Merge branch 'Release_2_8_2_Branch' into merge_r282_dev
authorJim Procter <jprocter@dundee.ac.uk>
Mon, 27 Oct 2014 13:39:38 +0000 (13:39 +0000)
committerJim Procter <jprocter@dundee.ac.uk>
Mon, 27 Oct 2014 13:39:38 +0000 (13:39 +0000)
normalised HTML messages and line endings for JAL-1420 JAL-1428 JAL-1355
(darolmar commits)
Conflicts:
resources/lang/Messages.properties
resources/lang/Messages_es.properties

80 files changed:
.classpath
.gitattributes [new file with mode: 0644]
.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
.settings/org.eclipse.jdt.ui.prefs [new file with mode: 0644]
JalviewApplet.jpx
JalviewX.jpx
build.xml
doc/i18n.html
examples-jbake/assets/1gaq.txt
examples-jbake/assets/ferredoxin.nw
examples-jbake/assets/javascript/jshashtable-2.1.js
examples-jbake/assets/jmol/Jmol.js
examples-jbake/assets/uniref50.fa
examples/1gaq.txt
examples/ferredoxin.nw
examples/groovy/JvLoadTestHarness.groovy
examples/groovy/JvLoadTester.groovy
examples/groovy/printtitle.groovy
examples/javascript/jshashtable-2.1.js
examples/jmol/Jmol.js
examples/uniref50.fa
help/help.hs
help/html/features/annotation.html
help/html/features/annotationsFormat.html
help/html/io/fileformats.html
help/html/menus/alignmentMenu.html
help/html/menus/alwannotations.html
help/html/menus/alwview.html
help/html/menus/popupMenu.html
lib/VARNAv3-91.jar [moved from lib/VARNAv3-9.jar with 53% similarity]
resources/lang/Messages.properties
resources/lang/Messages_es.properties
src/MCview/PDBChain.java
src/MCview/PDBViewer.java
src/MCview/PDBfile.java
src/jalview/analysis/AlignSeq.java
src/jalview/analysis/AlignmentAnnotationUtils.java [new file with mode: 0644]
src/jalview/datamodel/Alignment.java
src/jalview/datamodel/AlignmentAnnotation.java
src/jalview/datamodel/AlignmentI.java
src/jalview/datamodel/AlignmentOrder.java
src/jalview/datamodel/Sequence.java
src/jalview/datamodel/SequenceGroup.java
src/jalview/datamodel/SequenceI.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AnnotationChooser.java [new file with mode: 0644]
src/jalview/gui/AnnotationColourChooser.java
src/jalview/gui/AnnotationLabels.java
src/jalview/gui/AssociatePdbFileWithSeq.java
src/jalview/gui/Desktop.java
src/jalview/gui/FeatureSettings.java
src/jalview/gui/Finder.java
src/jalview/gui/Help.java [new file with mode: 0644]
src/jalview/gui/IdPanel.java
src/jalview/gui/OptsAndParamsPage.java
src/jalview/gui/PopupMenu.java
src/jalview/gui/TextColourChooser.java
src/jalview/io/AlignFile.java
src/jalview/io/AppletFormatAdapter.java
src/jalview/jbgui/GAlignFrame.java
src/jalview/jbgui/GRestServiceEditorPane.java
src/jalview/structure/StructureSelectionManager.java
src/jalview/workers/ConsensusThread.java
src/jalview/workers/ConservationThread.java
src/jalview/workers/StrucConsensusThread.java
test/jalview/analysis/AlignmentAnnotationUtilsTest.java [new file with mode: 0644]
test/jalview/datamodel/AlignmentAnnotationTests.java [new file with mode: 0644]
test/jalview/datamodel/AlignmentTest.java [new file with mode: 0644]
test/jalview/datamodel/SequenceTest.java [new file with mode: 0644]
test/jalview/ext/jmol/PDBFileWithJmolTest.java
test/jalview/ext/paradise/TestAnnotate3D.java
test/jalview/gui/AnnotationChooserTest.java [new file with mode: 0644]
test/jalview/gui/JAL1353bugdemo.java
test/jalview/gui/PopupMenuTest.java [new file with mode: 0644]
test/jalview/io/AnnotatedPDBFileInputTest.java [new file with mode: 0644]
test/jalview/ws/PDBSequenceFetcherTest.java
test/jalview/ws/jabaws/MinJabawsClientTests.java
utils/.cvsignore
utils/InstallAnywhere/Jalview.iap_xml
utils/splitstockholm.pl

index bd96609..ada4002 100644 (file)
@@ -48,6 +48,7 @@
        <classpathentry kind="lib" path="lib/slf4j-api-1.7.7.jar"/>
        <classpathentry kind="lib" path="lib/log4j-to-slf4j-2.0-rc2.jar"/>
        <classpathentry kind="lib" path="lib/slf4j-log4j12-1.7.7.jar"/>
+       <classpathentry kind="lib" path="lib/VARNAv3-91.jar"/>
        <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/plugin.jar"/>
        <classpathentry kind="lib" path="lib/xml-apis.jar"/>
        <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/plugin17"/>
diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..ecd18ce
--- /dev/null
@@ -0,0 +1,8 @@
+# force text file line endings to LF (Unix style) on commit
+# see https://help.github.com/articles/dealing-with-line-endings/#per-repository-settings
+* text=auto
+
+# see also http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace
+# Users should set a git/config entry of
+#    core.autocrlf = true # for Windows
+#    core.autocrlf = input # for Mac 
\ No newline at end of file
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..884491a
--- /dev/null
@@ -0,0 +1,285 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=1
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=4
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=8
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=76
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=2
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644 (file)
index 0000000..1986e85
--- /dev/null
@@ -0,0 +1,62 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Jalview
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=false
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_type_arguments=false
index 0044ab6..e7186e5 100755 (executable)
@@ -1,75 +1,75 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<!--JBuilder XML Project-->\r
-<project>\r
-  <property category="debug.0" name="SmartStepRedefineClasses" value="0"/>\r
-  <property category="debug.0" name="SmartStepSkipStaticInitializers" value="0"/>\r
-  <property category="debug.0" name="SmartStepSkipSynthetics" value="0"/>\r
-  <property category="editor.general" name="line_ending.style" value="2"/>\r
-  <property category="generalFormatting" name="lineEndingStyle" value="2"/>\r
-  <property category="generalFormatting2" name="lineEndingStyle" value="2"/>\r
-  <property category="generalFormatting2" name="overrideBasicFormatting" value="1"/>\r
-  <property category="javaFormatting" name="classBraceNextLine" value="1"/>\r
-  <property category="javaFormatting" name="methodBraceNextLine" value="1"/>\r
-  <property category="javaFormatting" name="otherBraceNextLine" value="1"/>\r
-  <property category="javaFormatting" name="packagePrefixGroups" value="java;javax;BLANK_LINE;java.awt;javax.swing;BLANK_LINE;org;(*)"/>\r
-  <property category="javaFormatting" name="throwsOnNewLine" value="1"/>\r
-  <property category="javadoc" name="custom.tags.1" value="todo;a;To Do:"/>\r
-  <property category="runtime" name="DefaultConfiguration" value="-1"/>\r
-  <property category="runtime.0" name="BuildTargetOnRun" value="com.borland.jbuilder.build.ProjectBuilder$ProjectBuildAction;make"/>\r
-  <property category="runtime.0" name="ConfigurationName" value="Applet"/>\r
-  <property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.AppletRunner"/>\r
-  <property category="runtime.0" name="applet.appletviewer" value="1"/>\r
-  <property category="runtime.0" name="applet.class" value="jalview.bin.JalviewLite"/>\r
-  <property category="runtime.0" name="applet.html" value="classes/applet.html"/>\r
-  <property category="serverservices" name="single.server.name" value="Tomcat 4.0"/>\r
-  <property category="sys" name="AuthorLabel" value="@author"/>\r
-  <property category="sys" name="BackupPath" value="bak"/>\r
-  <property category="sys" name="CheckStable" value="1"/>\r
-  <property category="sys" name="Company" value=""/>\r
-  <property category="sys" name="CompanyLabel" value="Company:"/>\r
-  <property category="sys" name="Copyright" value="Copyright (c) 2004"/>\r
-  <property category="sys" name="CopyrightLabel" value="Copyright:"/>\r
-  <property category="sys" name="DefaultPath" value="src"/>\r
-  <property category="sys" name="Description" value=""/>\r
-  <property category="sys" name="DescriptionLabel" value="Description:"/>\r
-  <property category="sys" name="DocPath" value="doc"/>\r
-  <property category="sys" name="ExcludeClassEnabled" value="0"/>\r
-  <property category="sys" name="IncludeTestPath" value="1"/>\r
-  <property category="sys" name="InstanceVisibility" value="2"/>\r
-  <property category="sys" name="JDK" value="java version 1.1.8_010"/>\r
-  <property category="sys" name="LastTag" value="0"/>\r
-  <property category="sys" name="Libraries" value=""/>\r
-  <property category="sys" name="MakeStable" value="0"/>\r
-  <property category="sys" name="OutPath" value="classes"/>\r
-  <property category="sys" name="SourcePath" value="src;test"/>\r
-  <property category="sys" name="TestPath" value="src"/>\r
-  <property category="sys" name="Title" value=""/>\r
-  <property category="sys" name="TitleLabel" value="Title:"/>\r
-  <property category="sys" name="Version" value="1.0"/>\r
-  <property category="sys" name="VersionLabel" value="@version"/>\r
-  <property category="sys" name="WorkingDirectory" value="."/>\r
-  <property category="sys" name="enable.auto.packages" value="false"/>\r
-  <node name="jalview.appletgui" type="Package"/>\r
-  <node name="jalview.datamodel" type="Package"/>\r
-  <node name="jalview.jbappletgui" type="Package"/>\r
-  <node name="jalview.math" type="Package"/>\r
-  <node name="jalview.schemes" type="Package"/>\r
-  <file path="src/jalview/analysis/AAFrequency.java"/>\r
-  <file path="src/jalview/io/AlignFile.java"/>\r
-  <file path="src/jalview/analysis/AlignmentSorter.java"/>\r
-  <file path="src/jalview/analysis/AlignSeq.java"/>\r
-  <file path="src/jalview/io/BLCFile.java"/>\r
-  <file path="src/jalview/io/ClustalFile.java"/>\r
-  <file path="src/jalview/analysis/Conservation.java"/>\r
-  <file path="src/jalview/io/FastaFile.java"/>\r
-  <file path="src/jalview/io/FileParse.java"/>\r
-  <file path="src/jalview/io/FormatAdapter.java"/>\r
-  <file path="src/jalview/io/IdentifyFile.java"/>\r
-  <file path="src/jalview/bin/JalviewLite.java"/>\r
-  <file path="src/jalview/io/MSFfile.java"/>\r
-  <file path="src/jalview/io/NewickFile.java"/>\r
-  <file path="src/jalview/analysis/NJTree.java"/>\r
-  <file path="src/jalview/analysis/PCA.java"/>\r
-  <file path="src/jalview/io/PfamFile.java"/>\r
-  <file path="src/jalview/io/PIRFile.java"/>\r
-</project>\r
+<?xml version="1.0" encoding="UTF-8"?>
+<!--JBuilder XML Project-->
+<project>
+  <property category="debug.0" name="SmartStepRedefineClasses" value="0"/>
+  <property category="debug.0" name="SmartStepSkipStaticInitializers" value="0"/>
+  <property category="debug.0" name="SmartStepSkipSynthetics" value="0"/>
+  <property category="editor.general" name="line_ending.style" value="2"/>
+  <property category="generalFormatting" name="lineEndingStyle" value="2"/>
+  <property category="generalFormatting2" name="lineEndingStyle" value="2"/>
+  <property category="generalFormatting2" name="overrideBasicFormatting" value="1"/>
+  <property category="javaFormatting" name="classBraceNextLine" value="1"/>
+  <property category="javaFormatting" name="methodBraceNextLine" value="1"/>
+  <property category="javaFormatting" name="otherBraceNextLine" value="1"/>
+  <property category="javaFormatting" name="packagePrefixGroups" value="java;javax;BLANK_LINE;java.awt;javax.swing;BLANK_LINE;org;(*)"/>
+  <property category="javaFormatting" name="throwsOnNewLine" value="1"/>
+  <property category="javadoc" name="custom.tags.1" value="todo;a;To Do:"/>
+  <property category="runtime" name="DefaultConfiguration" value="-1"/>
+  <property category="runtime.0" name="BuildTargetOnRun" value="com.borland.jbuilder.build.ProjectBuilder$ProjectBuildAction;make"/>
+  <property category="runtime.0" name="ConfigurationName" value="Applet"/>
+  <property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.AppletRunner"/>
+  <property category="runtime.0" name="applet.appletviewer" value="1"/>
+  <property category="runtime.0" name="applet.class" value="jalview.bin.JalviewLite"/>
+  <property category="runtime.0" name="applet.html" value="classes/applet.html"/>
+  <property category="serverservices" name="single.server.name" value="Tomcat 4.0"/>
+  <property category="sys" name="AuthorLabel" value="@author"/>
+  <property category="sys" name="BackupPath" value="bak"/>
+  <property category="sys" name="CheckStable" value="1"/>
+  <property category="sys" name="Company" value=""/>
+  <property category="sys" name="CompanyLabel" value="Company:"/>
+  <property category="sys" name="Copyright" value="Copyright (c) 2004"/>
+  <property category="sys" name="CopyrightLabel" value="Copyright:"/>
+  <property category="sys" name="DefaultPath" value="src"/>
+  <property category="sys" name="Description" value=""/>
+  <property category="sys" name="DescriptionLabel" value="Description:"/>
+  <property category="sys" name="DocPath" value="doc"/>
+  <property category="sys" name="ExcludeClassEnabled" value="0"/>
+  <property category="sys" name="IncludeTestPath" value="1"/>
+  <property category="sys" name="InstanceVisibility" value="2"/>
+  <property category="sys" name="JDK" value="java version 1.1.8_010"/>
+  <property category="sys" name="LastTag" value="0"/>
+  <property category="sys" name="Libraries" value=""/>
+  <property category="sys" name="MakeStable" value="0"/>
+  <property category="sys" name="OutPath" value="classes"/>
+  <property category="sys" name="SourcePath" value="src;test"/>
+  <property category="sys" name="TestPath" value="src"/>
+  <property category="sys" name="Title" value=""/>
+  <property category="sys" name="TitleLabel" value="Title:"/>
+  <property category="sys" name="Version" value="1.0"/>
+  <property category="sys" name="VersionLabel" value="@version"/>
+  <property category="sys" name="WorkingDirectory" value="."/>
+  <property category="sys" name="enable.auto.packages" value="false"/>
+  <node name="jalview.appletgui" type="Package"/>
+  <node name="jalview.datamodel" type="Package"/>
+  <node name="jalview.jbappletgui" type="Package"/>
+  <node name="jalview.math" type="Package"/>
+  <node name="jalview.schemes" type="Package"/>
+  <file path="src/jalview/analysis/AAFrequency.java"/>
+  <file path="src/jalview/io/AlignFile.java"/>
+  <file path="src/jalview/analysis/AlignmentSorter.java"/>
+  <file path="src/jalview/analysis/AlignSeq.java"/>
+  <file path="src/jalview/io/BLCFile.java"/>
+  <file path="src/jalview/io/ClustalFile.java"/>
+  <file path="src/jalview/analysis/Conservation.java"/>
+  <file path="src/jalview/io/FastaFile.java"/>
+  <file path="src/jalview/io/FileParse.java"/>
+  <file path="src/jalview/io/FormatAdapter.java"/>
+  <file path="src/jalview/io/IdentifyFile.java"/>
+  <file path="src/jalview/bin/JalviewLite.java"/>
+  <file path="src/jalview/io/MSFfile.java"/>
+  <file path="src/jalview/io/NewickFile.java"/>
+  <file path="src/jalview/analysis/NJTree.java"/>
+  <file path="src/jalview/analysis/PCA.java"/>
+  <file path="src/jalview/io/PfamFile.java"/>
+  <file path="src/jalview/io/PIRFile.java"/>
+</project>
index 239991a..cb2e19b 100755 (executable)
@@ -1,47 +1,47 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<!--JBuilder XML Project-->\r
-<project>\r
-  <property category="debug.0" name="SmartStepRedefineClasses" value="0"/>\r
-  <property category="debug.0" name="SmartStepSkipStaticInitializers" value="0"/>\r
-  <property category="debug.0" name="SmartStepSkipSynthetics" value="0"/>\r
-  <property category="generalFormatting2" name="overrideBasicFormatting" value="1"/>\r
-  <property category="javaFormatting" name="EventStyle" value="0"/>\r
-  <property category="javaFormatting" name="classBraceNextLine" value="1"/>\r
-  <property category="javaFormatting" name="methodBraceNextLine" value="1"/>\r
-  <property category="javaFormatting" name="otherBraceNextLine" value="1"/>\r
-  <property category="javaFormatting" name="packagePrefixGroups" value="java;javax;BLANK_LINE;java.awt;javax.swing;BLANK_LINE;org;(*)"/>\r
-  <property category="javaFormatting" name="throwsOnNewLine" value="1"/>\r
-  <property category="optimize.0" name="OptimizableType" value="com.borland.jbuilder.optimize.IntroOptimizeitProfiler"/>\r
-  <property category="runtime.0" name="BuildTargetOnRun" value="com.borland.jbuilder.build.ProjectBuilder$ProjectBuildAction;make"/>\r
-  <property category="runtime.0" name="ConfigurationName" value="JalviewX"/>\r
-  <property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.ApplicationRunner"/>\r
-  <property category="runtime.0" name="application.class" value="jalview.bin.Jalview"/>\r
-  <property category="serverservices" name="single.server.name" value="Tomcat 4.0"/>\r
-  <property category="sys" name="AuthorLabel" value="@author"/>\r
-  <property category="sys" name="BackupPath" value="bak"/>\r
-  <property category="sys" name="Company" value="Dundee University"/>\r
-  <property category="sys" name="CompanyLabel" value="Company:"/>\r
-  <property category="sys" name="Copyright" value="Copyright (c) 2004"/>\r
-  <property category="sys" name="CopyrightLabel" value="Copyright:"/>\r
-  <property category="sys" name="DefaultPath" value="src"/>\r
-  <property category="sys" name="Description" value=""/>\r
-  <property category="sys" name="DescriptionLabel" value="Description:"/>\r
-  <property category="sys" name="DocPath" value="doc"/>\r
-  <property category="sys" name="ExcludeClassEnabled" value="0"/>\r
-  <property category="sys" name="IncludeTestPath" value="1"/>\r
-  <property category="sys" name="JDK" value="java version 1.4.2_04-b05"/>\r
-  <property category="sys" name="JvmVersion" value="1.4"/>\r
-  <property category="sys" name="Libraries" value="all"/>\r
-  <property category="sys" name="OutPath" value="classes"/>\r
-  <property category="sys" name="SourcePath" value="src;test"/>\r
-  <property category="sys" name="SourceVersion" value="1.4"/>\r
-  <property category="sys" name="TestPath" value="test"/>\r
-  <property category="sys" name="Title" value=""/>\r
-  <property category="sys" name="TitleLabel" value="Title:"/>\r
-  <property category="sys" name="Version" value="1.0"/>\r
-  <property category="sys" name="VersionLabel" value="@version"/>\r
-  <property category="sys" name="WorkingDirectory" value="."/>\r
-  <property category="sys" name="uidesign.size.jalview.jbgui.GPreferences" value="453,333"/>\r
-  <property category="sys" name="uidesign.size.jalview.jbgui.GSequenceLink" value="400,112"/>\r
-  <file path="build.xml"/>\r
-</project>\r
+<?xml version="1.0" encoding="UTF-8"?>
+<!--JBuilder XML Project-->
+<project>
+  <property category="debug.0" name="SmartStepRedefineClasses" value="0"/>
+  <property category="debug.0" name="SmartStepSkipStaticInitializers" value="0"/>
+  <property category="debug.0" name="SmartStepSkipSynthetics" value="0"/>
+  <property category="generalFormatting2" name="overrideBasicFormatting" value="1"/>
+  <property category="javaFormatting" name="EventStyle" value="0"/>
+  <property category="javaFormatting" name="classBraceNextLine" value="1"/>
+  <property category="javaFormatting" name="methodBraceNextLine" value="1"/>
+  <property category="javaFormatting" name="otherBraceNextLine" value="1"/>
+  <property category="javaFormatting" name="packagePrefixGroups" value="java;javax;BLANK_LINE;java.awt;javax.swing;BLANK_LINE;org;(*)"/>
+  <property category="javaFormatting" name="throwsOnNewLine" value="1"/>
+  <property category="optimize.0" name="OptimizableType" value="com.borland.jbuilder.optimize.IntroOptimizeitProfiler"/>
+  <property category="runtime.0" name="BuildTargetOnRun" value="com.borland.jbuilder.build.ProjectBuilder$ProjectBuildAction;make"/>
+  <property category="runtime.0" name="ConfigurationName" value="JalviewX"/>
+  <property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.ApplicationRunner"/>
+  <property category="runtime.0" name="application.class" value="jalview.bin.Jalview"/>
+  <property category="serverservices" name="single.server.name" value="Tomcat 4.0"/>
+  <property category="sys" name="AuthorLabel" value="@author"/>
+  <property category="sys" name="BackupPath" value="bak"/>
+  <property category="sys" name="Company" value="Dundee University"/>
+  <property category="sys" name="CompanyLabel" value="Company:"/>
+  <property category="sys" name="Copyright" value="Copyright (c) 2004"/>
+  <property category="sys" name="CopyrightLabel" value="Copyright:"/>
+  <property category="sys" name="DefaultPath" value="src"/>
+  <property category="sys" name="Description" value=""/>
+  <property category="sys" name="DescriptionLabel" value="Description:"/>
+  <property category="sys" name="DocPath" value="doc"/>
+  <property category="sys" name="ExcludeClassEnabled" value="0"/>
+  <property category="sys" name="IncludeTestPath" value="1"/>
+  <property category="sys" name="JDK" value="java version 1.4.2_04-b05"/>
+  <property category="sys" name="JvmVersion" value="1.4"/>
+  <property category="sys" name="Libraries" value="all"/>
+  <property category="sys" name="OutPath" value="classes"/>
+  <property category="sys" name="SourcePath" value="src;test"/>
+  <property category="sys" name="SourceVersion" value="1.4"/>
+  <property category="sys" name="TestPath" value="test"/>
+  <property category="sys" name="Title" value=""/>
+  <property category="sys" name="TitleLabel" value="Title:"/>
+  <property category="sys" name="Version" value="1.0"/>
+  <property category="sys" name="VersionLabel" value="@version"/>
+  <property category="sys" name="WorkingDirectory" value="."/>
+  <property category="sys" name="uidesign.size.jalview.jbgui.GPreferences" value="453,333"/>
+  <property category="sys" name="uidesign.size.jalview.jbgui.GSequenceLink" value="400,112"/>
+  <file path="build.xml"/>
+</project>
index 681804d..19b41e5 100755 (executable)
--- a/build.xml
+++ b/build.xml
     <property name="outputJar" value="jalview.jar" />
     <!-- Jalview Applet JMol Jar Dependency -->
     <property name="jmolJar" value="JmolApplet-12.2.4.jar" />
-    <property name="varnaJar" value="VARNAv3-9.jar" />
+    <property name="varnaJar" value="VARNAv3-91.jar" />
     <property name="jalviewLiteJar" value="jalviewApplet.jar" />
     <!-- switch to indicate if we should obfuscate jalviewLite -->
     <!-- <property name="donotobfuscate" value="true"/> -->
index 0be5673..46f951d 100644 (file)
@@ -1,76 +1,76 @@
-<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
-<!--\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)\r
- * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle\r
- * \r
- * This file is part of Jalview.\r
- * \r
- * Jalview is free software: you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License \r
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\r
- *  \r
- * Jalview is distributed in the hope that it will be useful, but \r
- * WITHOUT ANY WARRANTY; without even the implied warranty \r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
- * PURPOSE.  See the GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
--->\r
-<html xmlns="http://www.w3.org/1999/xhtml">\r
-  <head>Jalview i18n</head>\r
-  <body>\r
-<h1>Best practices</h1>\r
-<ol>\r
-<li>Follow the standards described in this guide</li>\r
-<li>Always use properties files for user interface text; never include displayable text in code</li>\r
-<li>Use properties files only for user interface text (Messages_xx.properties) and config files for configuration settings (jalview.properties).</li>\r
-<li>Use a proper naming schema for keys in your resource bundles. The name of the keys should provide some information about the context of the displayed text. This helps the translators during the translation process.</li>\r
-<li>Group keys by view, ie. edit.title, edit.instructions, list.title, list.instructions, create.title, etc</li>\r
-<li>Never use displayable text when executing comparisons within the logic of the tool (separate codified values from displayable text)</li>\r
-<li>Always use the MessageManager class for retrieving properties values, and invoke MessageManager methods dynamically, to accommodate dynamic user preferences (see MessageManager below).</li>\r
-<li>All numbers and dates should be formatted specific to the user's locale (e.g. java.text.NumberFormat and java.text.DateFormat)</li>\r
-<li>Test code in more than one language</li>\r
-</ol>\r
-<h1>MessageManager</h1>\r
-<p>The jalview.util.MessageManager class is a wrapper class for the ResourceBundle class. It provides dynamic language/locale support for individual users, and is recommended for all Jalview code.</p>\r
-<p>To use it within your code, you only have to invoke MessageManager with the text key in Messages_xx.properties:</p>\r
-<p>JButton ok = new JButton(MessageManager.getString("button.ok"));</p>\r
-<p>This will set JButton text to the one included at button.ok key. In English JButton text will be OK, while in Spanish will be Aceptar. This is the big thing of i18n. :)</p>\r
-<h1>Don't rely comparisons on labels</h1>\r
-<p>Don't use this type of coding:\r
-    threshold.addItem("No Threshold");<br>\r
-    threshold.addItem("Above Threshold");<br>\r
-    threshold.addItem("Below Threshold");<br>\r
-    [...]<br>\r
-    if (threshold.getSelectedItem().equals("Above Threshold"))<br>\r
-    {</br>\r
-      aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;<br>\r
-    }<br>\r
-    else if (threshold.getSelectedItem().equals("Below Threshold"))<br>\r
-    {<br>\r
-      aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;<br>\r
-    }<br>\r
-</p>\r
-<p>Once text has been translated, these equals will fail as the label won't be the English ones. It should be used getSelectedIndex() instead of getSelectedItem(). If you do the proper way, the code will look like this:<br>\r
-    threshold.addItem(MessageManager.getString("label.threshold_feature_no_thereshold"));<br>\r
-    threshold.addItem(MessageManager.getString("label.threshold_feature_above_thereshold"));<br>\r
-    threshold.addItem(MessageManager.getString("label.threshold_feature_below_thereshold"));<br>\r
-    [...]<br>\r
-    if (threshold.getSelectedIndex()==1)<br>\r
-    {<br>\r
-      aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;<br>\r
-    }<br>\r
-    else if (threshold.getSelectedIndex()==2)<br>\r
-    {<br>\r
-      aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;<br>\r
-    }<br>    \r
-</p>\r
-<h1>How to translate Jalview</h1>\r
-<p>Anyone interested in localizing/translating Jalview is strongly encouraged to join the <a href="mailto:jalview-dev@jalview.org">Jalview Development List</a> list. We would recommend that you read this entire page before proceeding.</p>\r
-<p>If you are planning on working on a Jalview translation, please send us an email (<a href="mailto:jalview-dev@jalview.org">Jalview Development List</a>). There may be someone else already working on translating Jalview to your target language.</p>\r
-<p>Once you have downloaded the source code (available at <a href="http://www.jalview.org/download">http://www.jalview.org/download</a>), you must edit {jalview.home}/resources/lang/Messages_xx.properties, where xx refers to your language country code. If it doesn't exits, rename Messages.properties to Messages_xx.properties.</p>\r
-<p>Next step...start transtalation!</p>\r
-<p>Once you have it translated, we would appreciate if you contribute it forwarding the file to <a href="mailto:jalview-dev@jalview.org">Jalview Development List</a>. We will commit it to the code base as soon as possible. Thanks so much for this in advance!</p>\r
-</body>\r
-</html>\r
-\r
+<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
+ * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
+ * 
+ * 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/>.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>Jalview i18n</head>
+  <body>
+<h1>Best practices</h1>
+<ol>
+<li>Follow the standards described in this guide</li>
+<li>Always use properties files for user interface text; never include displayable text in code</li>
+<li>Use properties files only for user interface text (Messages_xx.properties) and config files for configuration settings (jalview.properties).</li>
+<li>Use a proper naming schema for keys in your resource bundles. The name of the keys should provide some information about the context of the displayed text. This helps the translators during the translation process.</li>
+<li>Group keys by view, ie. edit.title, edit.instructions, list.title, list.instructions, create.title, etc</li>
+<li>Never use displayable text when executing comparisons within the logic of the tool (separate codified values from displayable text)</li>
+<li>Always use the MessageManager class for retrieving properties values, and invoke MessageManager methods dynamically, to accommodate dynamic user preferences (see MessageManager below).</li>
+<li>All numbers and dates should be formatted specific to the user's locale (e.g. java.text.NumberFormat and java.text.DateFormat)</li>
+<li>Test code in more than one language</li>
+</ol>
+<h1>MessageManager</h1>
+<p>The jalview.util.MessageManager class is a wrapper class for the ResourceBundle class. It provides dynamic language/locale support for individual users, and is recommended for all Jalview code.</p>
+<p>To use it within your code, you only have to invoke MessageManager with the text key in Messages_xx.properties:</p>
+<p>JButton ok = new JButton(MessageManager.getString("button.ok"));</p>
+<p>This will set JButton text to the one included at button.ok key. In English JButton text will be OK, while in Spanish will be Aceptar. This is the big thing of i18n. :)</p>
+<h1>Don't rely comparisons on labels</h1>
+<p>Don't use this type of coding:
+    threshold.addItem("No Threshold");<br>
+    threshold.addItem("Above Threshold");<br>
+    threshold.addItem("Below Threshold");<br>
+    [...]<br>
+    if (threshold.getSelectedItem().equals("Above Threshold"))<br>
+    {</br>
+      aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;<br>
+    }<br>
+    else if (threshold.getSelectedItem().equals("Below Threshold"))<br>
+    {<br>
+      aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;<br>
+    }<br>
+</p>
+<p>Once text has been translated, these equals will fail as the label won't be the English ones. It should be used getSelectedIndex() instead of getSelectedItem(). If you do the proper way, the code will look like this:<br>
+    threshold.addItem(MessageManager.getString("label.threshold_feature_no_thereshold"));<br>
+    threshold.addItem(MessageManager.getString("label.threshold_feature_above_thereshold"));<br>
+    threshold.addItem(MessageManager.getString("label.threshold_feature_below_thereshold"));<br>
+    [...]<br>
+    if (threshold.getSelectedIndex()==1)<br>
+    {<br>
+      aboveThreshold = AnnotationColourGradient.ABOVE_THRESHOLD;<br>
+    }<br>
+    else if (threshold.getSelectedIndex()==2)<br>
+    {<br>
+      aboveThreshold = AnnotationColourGradient.BELOW_THRESHOLD;<br>
+    }<br>    
+</p>
+<h1>How to translate Jalview</h1>
+<p>Anyone interested in localizing/translating Jalview is strongly encouraged to join the <a href="mailto:jalview-dev@jalview.org">Jalview Development List</a> list. We would recommend that you read this entire page before proceeding.</p>
+<p>If you are planning on working on a Jalview translation, please send us an email (<a href="mailto:jalview-dev@jalview.org">Jalview Development List</a>). There may be someone else already working on translating Jalview to your target language.</p>
+<p>Once you have downloaded the source code (available at <a href="http://www.jalview.org/download">http://www.jalview.org/download</a>), you must edit {jalview.home}/resources/lang/Messages_xx.properties, where xx refers to your language country code. If it doesn't exits, rename Messages.properties to Messages_xx.properties.</p>
+<p>Next step...start transtalation!</p>
+<p>Once you have it translated, we would appreciate if you contribute it forwarding the file to <a href="mailto:jalview-dev@jalview.org">Jalview Development List</a>. We will commit it to the code base as soon as possible. Thanks so much for this in advance!</p>
+</body>
+</html>
+
index 69d17a5..7a40768 100755 (executable)
-HEADER    OXIDOREDUCTASE/ELECTRON TRANSPORT       08-MAY-00   1GAQ \r
-ATOM      2  CA  GLU A  19      20.491  30.713  36.290  1.00 74.29           C  \r
-ATOM     11  CA  SER A  20      24.056  29.774  37.264  1.00 72.09           C  \r
-ATOM     17  CA  LYS A  21      27.517  31.289  37.563  1.00 70.09           C  \r
-ATOM     26  CA  LYS A  22      28.794  27.865  36.481  1.00 68.64           C  \r
-ATOM     35  CA  GLN A  23      29.484  26.806  32.884  1.00 70.46           C  \r
-ATOM     44  CA  GLU A  24      26.420  25.175  31.360  1.00 72.08           C  \r
-ATOM     53  CA  GLU A  25      26.736  26.049  27.683  1.00 70.43           C  \r
-ATOM     62  CA  GLY A  26      28.299  22.912  26.233  1.00 63.14           C  \r
-ATOM     66  CA  VAL A  27      26.863  20.704  28.982  1.00 54.50           C  \r
-ATOM     73  CA  VAL A  28      25.030  17.390  28.655  1.00 48.32           C  \r
-ATOM     80  CA  THR A  29      23.728  14.677  30.991  1.00 44.86           C  \r
-ATOM     87  CA  ASN A  30      22.327  11.164  30.703  1.00 45.42           C  \r
-ATOM     95  CA  LEU A  31      23.332  10.459  27.102  1.00 45.42           C  \r
-ATOM    103  CA  TYR A  32      23.549   6.898  28.380  1.00 45.88           C  \r
-ATOM    115  CA  LYS A  33      21.656   5.321  31.262  1.00 47.27           C  \r
-ATOM    124  CA  PRO A  34      21.991   2.046  33.248  1.00 48.99           C  \r
-ATOM    131  CA  LYS A  35      19.339   0.560  30.970  1.00 52.75           C  \r
-ATOM    140  CA  GLU A  36      21.580   0.855  27.886  1.00 53.33           C  \r
-ATOM    149  CA  PRO A  37      25.154   2.015  28.678  1.00 47.54           C  \r
-ATOM    156  CA  TYR A  38      27.929   2.872  26.249  1.00 41.98           C  \r
-ATOM    168  CA  VAL A  39      30.355  -0.017  25.909  1.00 41.48           C  \r
-ATOM    175  CA  GLY A  40      33.823   1.485  25.966  1.00 37.59           C  \r
-ATOM    179  CA  ARG A  41      37.165  -0.277  26.122  1.00 39.77           C  \r
-ATOM    190  CA  CYS A  42      40.148  -0.029  28.442  1.00 36.51           C  \r
-ATOM    196  CA  LEU A  43      43.095   1.441  26.554  1.00 36.13           C  \r
-ATOM    204  CA  LEU A  44      45.231   2.023  29.649  1.00 33.55           C  \r
-ATOM    212  CA  ASN A  45      45.140   1.026  33.307  1.00 27.79           C  \r
-ATOM    220  CA  THR A  46      48.056   1.800  35.617  1.00 28.75           C  \r
-ATOM    227  CA  LYS A  47      48.542   1.776  39.388  1.00 30.31           C  \r
-ATOM    236  CA  ILE A  48      49.564   5.317  40.376  1.00 31.32           C  \r
-ATOM    244  CA  THR A  49      50.339   4.682  44.059  1.00 37.62           C  \r
-ATOM    251  CA  GLY A  50      53.585   3.317  45.460  1.00 44.49           C  \r
-ATOM    255  CA  ASP A  51      53.706  -0.448  46.087  1.00 52.89           C  \r
-ATOM    263  CA  ASP A  52      53.910   0.545  49.751  1.00 55.23           C  \r
-ATOM    271  CA  ALA A  53      50.816   2.767  50.056  1.00 53.34           C  \r
-ATOM    276  CA  PRO A  54      47.904   1.940  52.405  1.00 50.60           C  \r
-ATOM    283  CA  GLY A  55      45.420   1.579  49.561  1.00 50.35           C  \r
-ATOM    287  CA  GLU A  56      46.098   1.286  45.836  1.00 42.53           C  \r
-ATOM    296  CA  THR A  57      44.534   3.816  43.480  1.00 41.14           C  \r
-ATOM    303  CA  TRP A  58      44.540   3.423  39.708  1.00 35.60           C  \r
-ATOM    317  CA  HIS A  59      44.468   5.853  36.796  1.00 31.89           C  \r
-ATOM    327  CA  MET A  60      42.658   4.227  33.866  1.00 31.65           C  \r
-ATOM    335  CA  VAL A  61      41.716   5.345  30.350  1.00 30.43           C  \r
-ATOM    342  CA  PHE A  62      38.669   4.172  28.360  1.00 34.36           C  \r
-ATOM    353  CA  SER A  63      37.657   4.908  24.772  1.00 34.69           C  \r
-ATOM    359  CA  THR A  64      34.448   6.828  23.951  1.00 36.96           C  \r
-ATOM    366  CA  GLU A  65      34.691   7.644  20.254  1.00 40.08           C  \r
-ATOM    375  CA  GLY A  66      33.742  11.183  21.285  1.00 40.22           C  \r
-ATOM    379  CA  LYS A  67      30.272   9.763  22.003  1.00 41.93           C  \r
-ATOM    388  CA  ILE A  68      30.279  11.116  25.577  1.00 41.52           C  \r
-ATOM    396  CA  PRO A  69      30.791  14.926  25.537  1.00 42.35           C  \r
-ATOM    403  CA  TYR A  70      31.228  15.232  29.299  1.00 39.84           C  \r
-ATOM    415  CA  ARG A  71      32.639  18.451  30.768  1.00 44.14           C  \r
-ATOM    426  CA  GLU A  72      35.122  19.278  33.515  1.00 43.82           C  \r
-ATOM    435  CA  GLY A  73      33.472  18.458  36.835  1.00 41.97           C  \r
-ATOM    439  CA  GLN A  74      30.929  15.874  35.657  1.00 37.19           C  \r
-ATOM    448  CA  SER A  75      31.285  12.124  36.138  1.00 38.28           C  \r
-ATOM    454  CA  ILE A  76      30.458   8.792  34.539  1.00 36.84           C  \r
-ATOM    462  CA  GLY A  77      28.983   5.620  35.918  1.00 35.39           C  \r
-ATOM    466  CA  VAL A  78      30.311   2.108  35.530  1.00 32.05           C  \r
-ATOM    473  CA  ILE A  79      28.458  -1.201  35.591  1.00 32.67           C  \r
-ATOM    481  CA  ALA A  80      30.745  -4.018  36.644  1.00 35.36           C  \r
-ATOM    486  CA  ASP A  81      30.359  -7.373  34.872  1.00 38.72           C  \r
-ATOM    494  CA  GLY A  82      28.308 -10.332  36.110  1.00 45.79           C  \r
-ATOM    498  CA  VAL A  83      25.820 -10.242  39.001  1.00 52.24           C  \r
-ATOM    505  CA  ASP A  84      25.838 -10.250  42.834  1.00 60.54           C  \r
-ATOM    513  CA  LYS A  85      25.014 -13.158  45.196  1.00 66.72           C  \r
-ATOM    522  CA  ASN A  86      21.414 -13.062  43.904  1.00 67.37           C  \r
-ATOM    530  CA  GLY A  87      21.724 -13.423  40.136  1.00 64.74           C  \r
-ATOM    534  CA  LYS A  88      20.971  -9.733  39.570  1.00 61.12           C  \r
-ATOM    543  CA  PRO A  89      23.054  -7.201  37.561  1.00 54.68           C  \r
-ATOM    550  CA  HIS A  90      25.224  -4.957  39.755  1.00 44.44           C  \r
-ATOM    560  CA  LYS A  91      23.940  -1.433  40.260  1.00 40.48           C  \r
-ATOM    569  CA  VAL A  92      25.803   1.546  38.843  1.00 38.45           C  \r
-ATOM    576  CA  ARG A  93      28.709   2.986  40.828  1.00 38.93           C  \r
-ATOM    587  CA  LEU A  94      29.778   6.584  40.096  1.00 34.37           C  \r
-ATOM    595  CA  TYR A  95      33.309   7.878  39.513  1.00 30.27           C  \r
-ATOM    607  CA  SER A  96      34.425  11.475  39.057  1.00 29.44           C  \r
-ATOM    613  CA  ILE A  97      36.029  12.090  35.662  1.00 27.61           C  \r
-ATOM    621  CA  ALA A  98      39.769  12.693  36.069  1.00 31.12           C  \r
-ATOM    626  CA  SER A  99      40.393  13.712  32.475  1.00 32.42           C  \r
-ATOM    632  CA  SER A 100      39.566  17.142  31.059  1.00 36.14           C  \r
-ATOM    638  CA  ALA A 101      37.097  17.367  28.154  1.00 41.07           C  \r
-ATOM    643  CA  ILE A 102      39.764  16.549  25.527  1.00 47.65           C  \r
-ATOM    651  CA  GLY A 103      41.172  13.692  27.599  1.00 46.77           C  \r
-ATOM    655  CA  ASP A 104      44.730  12.612  28.289  1.00 43.82           C  \r
-ATOM    663  CA  PHE A 105      45.115  12.065  24.522  1.00 41.52           C  \r
-ATOM    674  CA  GLY A 106      43.862  15.455  23.328  1.00 41.66           C  \r
-ATOM    678  CA  ASP A 107      41.355  13.883  20.926  1.00 40.90           C  \r
-ATOM    686  CA  SER A 108      38.132  14.250  22.954  1.00 42.95           C  \r
-ATOM    692  CA  LYS A 109      37.967  10.535  22.224  1.00 44.74           C  \r
-ATOM    701  CA  THR A 110      38.731   9.184  25.704  1.00 41.09           C  \r
-ATOM    708  CA  VAL A 111      37.728   9.519  29.374  1.00 39.03           C  \r
-ATOM    715  CA  SER A 112      39.912   8.705  32.399  1.00 37.17           C  \r
-ATOM    721  CA  LEU A 113      39.098   7.476  35.935  1.00 32.10           C  \r
-ATOM    729  CA  CYS A 114      40.964   7.578  39.261  1.00 30.65           C  \r
-ATOM    735  CA  VAL A 115      39.724   4.459  41.060  1.00 33.45           C  \r
-ATOM    742  CA  LYS A 116      40.668   3.524  44.628  1.00 34.75           C  \r
-ATOM    751  CA  ARG A 117      40.376  -0.250  45.123  1.00 32.85           C  \r
-ATOM    762  CA  LEU A 118      38.137  -1.094  48.077  1.00 30.50           C  \r
-ATOM    770  CA  ILE A 119      39.376  -3.752  50.459  1.00 34.34           C  \r
-ATOM    778  CA  TYR A 120      38.699  -4.266  54.125  1.00 31.39           C  \r
-ATOM    790  CA  THR A 121      38.264  -7.086  56.567  1.00 28.83           C  \r
-ATOM    797  CA  ASN A 122      34.792  -7.477  58.109  1.00 26.51           C  \r
-ATOM    805  CA  ASP A 123      33.626  -8.382  61.634  1.00 31.58           C  \r
-ATOM    813  CA  ALA A 124      34.191 -12.077  60.901  1.00 27.84           C  \r
-ATOM    818  CA  GLY A 125      37.759 -11.844  59.728  1.00 32.39           C  \r
-ATOM    822  CA  GLU A 126      36.809 -12.146  56.073  1.00 35.82           C  \r
-ATOM    831  CA  ILE A 127      38.655  -9.932  53.598  1.00 38.42           C  \r
-ATOM    839  CA  VAL A 128      36.025  -8.261  51.421  1.00 33.73           C  \r
-ATOM    846  CA  LYS A 129      36.482  -6.484  48.090  1.00 31.87           C  \r
-ATOM    855  CA  GLY A 130      34.363  -3.680  46.686  1.00 26.91           C  \r
-ATOM    859  CA  VAL A 131      32.680  -5.051  43.569  1.00 27.89           C  \r
-ATOM    866  CA  CYS A 132      33.074  -2.246  41.018  1.00 28.46           C  \r
-ATOM    872  CA  SER A 133      36.266  -0.553  42.213  1.00 31.33           C  \r
-ATOM    878  CA  ASN A 134      37.861  -3.983  41.984  1.00 30.29           C  \r
-ATOM    886  CA  PHE A 135      36.318  -4.795  38.623  1.00 31.48           C  \r
-ATOM    897  CA  LEU A 136      37.926  -1.553  37.520  1.00 27.81           C  \r
-ATOM    905  CA  CYS A 137      41.417  -1.976  38.955  1.00 25.91           C  \r
-ATOM    911  CA  ASP A 138      41.605  -5.419  37.338  1.00 30.22           C  \r
-ATOM    919  CA  LEU A 139      40.462  -4.306  33.874  1.00 32.69           C  \r
-ATOM    927  CA  GLN A 140      42.851  -5.511  31.186  1.00 36.80           C  \r
-ATOM    936  CA  PRO A 141      43.380  -3.220  28.170  1.00 36.16           C  \r
-ATOM    943  CA  GLY A 142      40.864  -4.420  25.586  1.00 31.10           C  \r
-ATOM    947  CA  ASP A 143      38.129  -5.298  28.055  1.00 30.62           C  \r
-ATOM    955  CA  ASN A 144      34.690  -3.847  27.645  1.00 33.52           C  \r
-ATOM    963  CA  VAL A 145      33.430  -1.522  30.361  1.00 37.08           C  \r
-ATOM    970  CA  GLN A 146      29.817  -0.374  30.523  1.00 37.65           C  \r
-ATOM    979  CA  ILE A 147      29.547   3.413  31.045  1.00 30.95           C  \r
-ATOM    987  CA  THR A 148      26.637   5.791  31.832  1.00 29.95           C  \r
-ATOM    994  CA  GLY A 149      26.297   9.581  31.843  1.00 32.81           C  \r
-ATOM    998  CA  PRO A 150      27.785  12.148  31.800  1.00 34.98           C  \r
-ATOM   1005  CA  VAL A 151      26.376  12.668  35.275  1.00 36.53           C  \r
-ATOM   1012  CA  GLY A 152      26.196  15.756  37.474  1.00 43.09           C  \r
-ATOM   1016  CA  LYS A 153      26.048  19.528  37.068  1.00 48.37           C  \r
-ATOM   1025  CA  GLU A 154      26.921  20.540  40.633  1.00 49.70           C  \r
-ATOM   1034  CA  MET A 155      30.710  20.266  40.235  1.00 47.30           C  \r
-ATOM   1042  CA  LEU A 156      30.882  22.020  36.869  1.00 50.36           C  \r
-ATOM   1050  CA  MET A 157      33.362  24.883  36.404  1.00 55.29           C  \r
-ATOM   1058  CA  PRO A 158      32.521  28.612  36.605  1.00 54.88           C  \r
-ATOM   1065  CA  LYS A 159      32.291  30.776  33.464  1.00 54.92           C  \r
-ATOM   1074  CA  ASP A 160      34.497  33.503  34.939  1.00 57.22           C  \r
-ATOM   1082  CA  PRO A 161      38.055  32.687  33.759  1.00 58.62           C  \r
-ATOM   1089  CA  ASN A 162      39.524  35.240  36.163  1.00 60.44           C  \r
-ATOM   1097  CA  ALA A 163      37.814  33.910  39.279  1.00 55.80           C  \r
-ATOM   1102  CA  THR A 164      39.596  32.487  42.316  1.00 51.04           C  \r
-ATOM   1109  CA  ILE A 165      38.966  28.771  42.756  1.00 50.26           C  \r
-ATOM   1117  CA  ILE A 166      39.774  26.773  45.885  1.00 47.54           C  \r
-ATOM   1125  CA  MET A 167      39.883  23.014  45.324  1.00 46.38           C  \r
-ATOM   1133  CA  LEU A 168      39.700  20.963  48.522  1.00 42.18           C  \r
-ATOM   1141  CA  ALA A 169      40.377  17.316  47.770  1.00 36.41           C  \r
-ATOM   1146  CA  THR A 170      41.005  14.086  49.622  1.00 32.98           C  \r
-ATOM   1153  CA  GLY A 171      42.027  10.802  48.014  1.00 31.36           C  \r
-ATOM   1157  CA  THR A 172      40.386  10.037  44.680  1.00 30.48           C  \r
-ATOM   1164  CA  GLY A 173      38.640  13.335  45.359  1.00 33.99           C  \r
-ATOM   1168  CA  ILE A 174      41.418  15.036  43.394  1.00 35.66           C  \r
-ATOM   1176  CA  ALA A 175      39.758  13.585  40.300  1.00 36.00           C  \r
-ATOM   1181  CA  PRO A 176      37.445  16.385  39.155  1.00 39.41           C  \r
-ATOM   1188  CA  PHE A 177      40.109  18.971  39.976  1.00 43.21           C  \r
-ATOM   1199  CA  ARG A 178      42.726  17.119  37.955  1.00 41.09           C  \r
-ATOM   1210  CA  SER A 179      40.235  17.536  35.124  1.00 39.92           C  \r
-ATOM   1216  CA  PHE A 180      39.808  21.204  36.009  1.00 39.23           C  \r
-ATOM   1227  CA  LEU A 181      43.528  21.949  35.995  1.00 39.50           C  \r
-ATOM   1235  CA  TRP A 182      44.305  20.081  32.770  1.00 41.47           C  \r
-ATOM   1249  CA  LYS A 183      42.141  22.654  30.972  1.00 48.08           C  \r
-ATOM   1258  CA  MET A 184      43.477  25.547  33.062  1.00 52.79           C  \r
-ATOM   1266  CA  PHE A 185      47.102  25.043  32.014  1.00 57.35           C  \r
-ATOM   1277  CA  PHE A 186      48.075  21.921  30.051  1.00 55.98           C  \r
-ATOM   1288  CA  GLU A 187      45.758  23.173  27.297  1.00 54.44           C  \r
-ATOM   1297  CA  LYS A 188      44.908  26.236  25.196  1.00 51.29           C  \r
-ATOM   1306  CA  HIS A 189      41.395  27.080  24.003  1.00 51.35           C  \r
-ATOM   1316  CA  ASP A 190      40.108  29.972  21.873  1.00 54.30           C  \r
-ATOM   1324  CA  ASP A 191      37.199  30.481  24.249  1.00 53.95           C  \r
-ATOM   1332  CA  TYR A 192      38.816  29.937  27.634  1.00 50.68           C  \r
-ATOM   1344  CA  LYS A 193      41.916  31.388  29.230  1.00 51.00           C  \r
-ATOM   1353  CA  PHE A 194      42.322  30.967  32.956  1.00 52.09           C  \r
-ATOM   1364  CA  ASN A 195      43.672  34.234  34.312  1.00 56.46           C  \r
-ATOM   1372  CA  GLY A 196      42.616  34.078  37.969  1.00 57.17           C  \r
-ATOM   1376  CA  LEU A 197      43.874  31.920  40.843  1.00 57.92           C  \r
-ATOM   1384  CA  GLY A 198      43.549  28.151  41.086  1.00 56.67           C  \r
-ATOM   1388  CA  TRP A 199      44.258  26.886  44.592  1.00 51.55           C  \r
-ATOM   1402  CA  LEU A 200      44.411  23.170  45.379  1.00 49.17           C  \r
-ATOM   1410  CA  PHE A 201      44.558  21.335  48.709  1.00 48.60           C  \r
-ATOM   1421  CA  LEU A 202      45.122  17.570  48.598  1.00 45.34           C  \r
-ATOM   1429  CA  GLY A 203      44.885  15.480  51.742  1.00 48.55           C  \r
-ATOM   1433  CA  VAL A 204      46.225  11.936  51.755  1.00 50.23           C  \r
-ATOM   1440  CA  PRO A 205      47.942   9.740  54.365  1.00 51.51           C  \r
-ATOM   1447  CA  THR A 206      51.284   9.148  52.648  1.00 50.21           C  \r
-ATOM   1454  CA  SER A 207      53.551  10.483  49.894  1.00 49.38           C  \r
-ATOM   1460  CA  SER A 208      53.267   7.061  48.259  1.00 43.49           C  \r
-ATOM   1466  CA  SER A 209      49.588   8.049  48.093  1.00 42.57           C  \r
-ATOM   1472  CA  LEU A 210      49.990  11.424  46.364  1.00 42.65           C  \r
-ATOM   1480  CA  LEU A 211      48.121  11.446  43.035  1.00 39.33           C  \r
-ATOM   1488  CA  TYR A 212      49.516  13.214  39.935  1.00 40.89           C  \r
-ATOM   1500  CA  LYS A 213      52.128  15.234  41.873  1.00 45.88           C  \r
-ATOM   1509  CA  GLU A 214      54.518  15.406  38.899  1.00 53.22           C  \r
-ATOM   1518  CA  GLU A 215      51.680  16.911  36.889  1.00 55.16           C  \r
-ATOM   1527  CA  PHE A 216      50.757  19.475  39.514  1.00 60.55           C  \r
-ATOM   1538  CA  GLY A 217      54.488  20.153  39.524  1.00 66.64           C  \r
-ATOM   1542  CA  LYS A 218      54.575  21.110  35.850  1.00 68.86           C  \r
-ATOM   1551  CA  MET A 219      51.398  23.159  36.265  1.00 66.97           C  \r
-ATOM   1559  CA  LYS A 220      53.138  25.090  39.061  1.00 65.97           C  \r
-ATOM   1568  CA  GLU A 221      55.654  26.250  36.459  1.00 70.02           C  \r
-ATOM   1577  CA  ARG A 222      53.584  26.507  33.294  1.00 73.48           C  \r
-ATOM   1588  CA  ALA A 223      52.005  29.449  35.175  1.00 76.21           C  \r
-ATOM   1593  CA  PRO A 224      53.272  29.877  38.804  1.00 79.25           C  \r
-ATOM   1600  CA  GLU A 225      51.296  33.124  39.020  1.00 81.84           C  \r
-ATOM   1609  CA  ASN A 226      47.873  31.528  38.622  1.00 78.84           C  \r
-ATOM   1617  CA  PHE A 227      48.418  28.176  40.350  1.00 75.28           C  \r
-ATOM   1628  CA  ARG A 228      49.090  27.305  43.996  1.00 72.05           C  \r
-ATOM   1639  CA  VAL A 229      49.165  23.724  45.323  1.00 68.82           C  \r
-ATOM   1646  CA  ASP A 230      49.258  22.581  48.958  1.00 66.54           C  \r
-ATOM   1654  CA  TYR A 231      49.605  18.943  49.968  1.00 60.31           C  \r
-ATOM   1666  CA  ALA A 232      48.551  17.560  53.332  1.00 57.39           C  \r
-ATOM   1671  CA  VAL A 233      50.260  14.228  53.945  1.00 57.14           C  \r
-ATOM   1678  CA  SER A 234      48.465  13.579  57.244  1.00 60.81           C  \r
-ATOM   1684  CA  ARG A 235      50.959  11.010  58.514  1.00 60.74           C  \r
-ATOM   1695  CA  GLU A 236      54.268  12.594  57.481  1.00 59.17           C  \r
-ATOM   1704  CA  GLN A 237      53.494  16.197  58.450  1.00 59.62           C  \r
-ATOM   1713  CA  THR A 238      52.590  18.236  61.521  1.00 63.18           C  \r
-ATOM   1720  CA  ASN A 239      52.019  21.937  62.188  1.00 66.71           C  \r
-ATOM   1728  CA  ALA A 240      52.096  23.767  65.537  1.00 70.06           C  \r
-ATOM   1733  CA  ALA A 241      51.302  21.400  68.410  1.00 72.44           C  \r
-ATOM   1738  CA  GLY A 242      52.383  18.324  66.438  1.00 72.38           C  \r
-ATOM   1742  CA  GLU A 243      48.826  18.169  65.110  1.00 69.71           C  \r
-ATOM   1751  CA  ARG A 244      48.674  15.776  62.148  1.00 67.21           C  \r
-ATOM   1762  CA  MET A 245      48.712  17.796  58.933  1.00 64.20           C  \r
-ATOM   1770  CA  TYR A 246      45.246  17.082  57.556  1.00 60.65           C  \r
-ATOM   1782  CA  ILE A 247      43.617  18.437  54.409  1.00 62.98           C  \r
-ATOM   1790  CA  GLN A 248      42.035  21.001  56.761  1.00 64.64           C  \r
-ATOM   1799  CA  THR A 249      45.057  21.461  59.009  1.00 63.37           C  \r
-ATOM   1806  CA  ARG A 250      46.891  22.664  55.903  1.00 62.47           C  \r
-ATOM   1817  CA  MET A 251      44.123  25.201  55.251  1.00 63.35           C  \r
-ATOM   1825  CA  ALA A 252      44.571  26.305  58.854  1.00 65.73           C  \r
-ATOM   1830  CA  GLU A 253      47.973  27.809  58.076  1.00 65.97           C  \r
-ATOM   1839  CA  TYR A 254      46.267  30.063  55.517  1.00 65.83           C  \r
-ATOM   1851  CA  LYS A 255      42.991  30.559  57.379  1.00 70.30           C  \r
-ATOM   1860  CA  GLU A 256      43.578  34.326  57.320  1.00 73.73           C  \r
-ATOM   1869  CA  GLU A 257      44.189  34.738  53.593  1.00 71.52           C  \r
-ATOM   1878  CA  LEU A 258      41.459  32.202  52.893  1.00 73.38           C  \r
-ATOM   1886  CA  TRP A 259      38.790  34.074  54.853  1.00 76.72           C  \r
-ATOM   1900  CA  GLU A 260      39.721  37.275  53.006  1.00 78.61           C  \r
-ATOM   1909  CA  LEU A 261      38.580  35.553  49.815  1.00 75.71           C  \r
-ATOM   1917  CA  LEU A 262      35.391  33.881  51.047  1.00 73.74           C  \r
-ATOM   1925  CA  LYS A 263      33.562  37.165  50.535  1.00 73.64           C  \r
-ATOM   1934  CA  LYS A 264      34.299  38.143  46.954  1.00 72.48           C  \r
-ATOM   1943  CA  ASP A 265      31.954  37.554  43.993  1.00 69.65           C  \r
-ATOM   1951  CA  ASN A 266      34.660  35.649  42.106  1.00 65.06           C  \r
-ATOM   1959  CA  THR A 267      35.835  33.117  44.683  1.00 58.24           C  \r
-ATOM   1966  CA  TYR A 268      34.459  29.646  43.909  1.00 51.04           C  \r
-ATOM   1978  CA  VAL A 269      35.192  26.827  46.382  1.00 44.95           C  \r
-ATOM   1985  CA  TYR A 270      35.012  23.150  45.368  1.00 44.96           C  \r
-ATOM   1997  CA  MET A 271      35.162  20.122  47.656  1.00 41.72           C  \r
-ATOM   2005  CA  CYS A 272      35.314  16.468  46.632  1.00 37.19           C  \r
-ATOM   2011  CA  GLY A 273      36.343  13.080  47.951  1.00 37.65           C  \r
-ATOM   2015  CA  LEU A 274      36.040  10.886  51.020  1.00 39.39           C  \r
-ATOM   2023  CA  LYS A 275      33.076  12.283  52.955  1.00 44.86           C  \r
-ATOM   2032  CA  GLY A 276      34.322  13.183  56.400  1.00 49.16           C  \r
-ATOM   2036  CA  MET A 277      36.932  15.608  55.168  1.00 53.30           C  \r
-ATOM   2044  CA  GLU A 278      33.917  17.921  55.165  1.00 56.74           C  \r
-ATOM   2053  CA  LYS A 279      33.531  18.089  58.947  1.00 59.30           C  \r
-ATOM   2062  CA  GLY A 280      36.982  19.413  59.776  1.00 58.94           C  \r
-ATOM   2066  CA  ILE A 281      36.705  22.048  57.063  1.00 61.43           C  \r
-ATOM   2074  CA  ASP A 282      33.453  23.402  58.515  1.00 67.06           C  \r
-ATOM   2082  CA  ASP A 283      35.050  23.189  61.972  1.00 74.12           C  \r
-ATOM   2090  CA  ILE A 284      37.991  25.422  61.040  1.00 78.49           C  \r
-ATOM   2098  CA  MET A 285      35.456  27.566  59.201  1.00 82.25           C  \r
-ATOM   2106  CA  VAL A 286      32.941  27.959  62.027  1.00 83.44           C  \r
-ATOM   2113  CA  SER A 287      35.610  29.113  64.469  1.00 83.43           C  \r
-ATOM   2119  CA  LEU A 288      36.927  31.601  61.887  1.00 85.53           C  \r
-ATOM   2127  CA  ALA A 289      33.506  33.025  60.970  1.00 86.85           C  \r
-ATOM   2132  CA  GLU A 290      31.841  32.696  64.387  1.00 89.26           C  \r
-ATOM   2141  CA  LYS A 291      34.438  35.312  65.347  1.00 88.73           C  \r
-ATOM   2150  CA  ASP A 292      33.635  37.891  62.652  1.00 88.03           C  \r
-ATOM   2158  CA  GLY A 293      30.219  37.450  61.081  1.00 87.88           C  \r
-ATOM   2162  CA  ILE A 294      27.319  35.051  61.511  1.00 84.61           C  \r
-ATOM   2170  CA  ASP A 295      27.665  31.329  62.188  1.00 82.45           C  \r
-ATOM   2178  CA  TRP A 296      29.539  29.627  59.355  1.00 80.12           C  \r
-ATOM   2192  CA  PHE A 297      26.527  27.452  58.512  1.00 78.99           C  \r
-ATOM   2203  CA  ASP A 298      24.167  30.241  57.486  1.00 76.37           C  \r
-ATOM   2211  CA  TYR A 299      27.074  31.748  55.561  1.00 74.07           C  \r
-ATOM   2223  CA  LYS A 300      27.679  28.620  53.473  1.00 74.31           C  \r
-ATOM   2232  CA  LYS A 301      24.059  29.146  52.464  1.00 75.97           C  \r
-ATOM   2241  CA  GLN A 302      24.921  32.563  51.018  1.00 75.38           C  \r
-ATOM   2250  CA  LEU A 303      27.896  31.099  49.155  1.00 72.10           C  \r
-ATOM   2258  CA  LYS A 304      25.917  28.207  47.690  1.00 72.08           C  \r
-ATOM   2267  CA  ARG A 305      23.595  31.021  46.594  1.00 74.82           C  \r
-ATOM   2278  CA  GLY A 306      26.071  32.136  43.958  1.00 71.84           C  \r
-ATOM   2282  CA  ASP A 307      27.505  28.682  43.220  1.00 67.23           C  \r
-ATOM   2290  CA  GLN A 308      30.620  29.291  45.346  1.00 60.18           C  \r
-ATOM   2299  CA  TRP A 309      30.585  26.177  47.537  1.00 52.25           C  \r
-ATOM   2313  CA  ASN A 310      29.894  22.997  45.597  1.00 45.03           C  \r
-ATOM   2321  CA  VAL A 311      30.327  19.716  47.403  1.00 39.13           C  \r
-ATOM   2328  CA  GLU A 312      30.507  16.190  46.110  1.00 35.17           C  \r
-ATOM   2337  CA  VAL A 313      31.761  13.957  48.861  1.00 30.12           C  \r
-ATOM   2344  CA  TYR A 314      31.112  10.230  49.021  1.00 28.23           C  \r
-ATOM   2358  CA  ALA B   1       2.311  24.702  44.475  1.00 74.17           C  \r
-ATOM   2363  CA  THR B   2       3.590  24.207  48.055  1.00 74.76           C  \r
-ATOM   2370  CA  TYR B   3       3.069  20.876  49.837  1.00 73.52           C  \r
-ATOM   2382  CA  ASN B   4       3.748  19.874  53.435  1.00 75.75           C  \r
-ATOM   2390  CA  VAL B   5       6.618  17.399  53.868  1.00 75.95           C  \r
-ATOM   2397  CA  LYS B   6       7.769  15.523  56.983  1.00 77.70           C  \r
-ATOM   2406  CA  LEU B   7      11.351  14.325  57.458  1.00 78.91           C  \r
-ATOM   2414  CA  ILE B   8      11.807  11.511  59.985  1.00 81.00           C  \r
-ATOM   2422  CA  THR B   9      15.560  12.046  60.247  1.00 87.49           C  \r
-ATOM   2429  CA  PRO B  10      17.662   9.793  62.539  1.00 92.94           C  \r
-ATOM   2436  CA  GLU B  11      18.161  13.147  64.282  1.00 96.61           C  \r
-ATOM   2445  CA  GLY B  12      14.579  14.154  65.041  1.00 97.52           C  \r
-ATOM   2449  CA  GLU B  13      11.602  14.823  62.748  1.00 96.90           C  \r
-ATOM   2458  CA  VAL B  14      11.547  17.892  60.480  1.00 96.63           C  \r
-ATOM   2465  CA  GLU B  15       8.340  19.701  59.440  1.00 94.86           C  \r
-ATOM   2474  CA  LEU B  16       9.471  21.479  56.254  1.00 91.55           C  \r
-ATOM   2482  CA  GLN B  17       7.281  23.141  53.598  1.00 89.75           C  \r
-ATOM   2491  CA  VAL B  18       8.485  22.069  50.145  1.00 87.92           C  \r
-ATOM   2498  CA  PRO B  19       6.906  23.558  46.964  1.00 86.35           C  \r
-ATOM   2505  CA  ASP B  20       5.990  21.744  43.717  1.00 86.29           C  \r
-ATOM   2513  CA  ASP B  21       8.578  22.751  41.083  1.00 83.78           C  \r
-ATOM   2521  CA  VAL B  22      11.385  22.401  43.639  1.00 80.98           C  \r
-ATOM   2528  CA  TYR B  23      13.439  19.280  44.481  1.00 77.04           C  \r
-ATOM   2540  CA  ILE B  24      13.212  18.196  48.120  1.00 76.45           C  \r
-ATOM   2548  CA  LEU B  25      16.959  18.133  48.851  1.00 75.15           C  \r
-ATOM   2556  CA  ASP B  26      17.154  21.745  47.689  1.00 75.80           C  \r
-ATOM   2564  CA  GLN B  27      14.616  22.906  50.280  1.00 76.31           C  \r
-ATOM   2573  CA  ALA B  28      16.562  20.957  52.914  1.00 78.86           C  \r
-ATOM   2578  CA  GLU B  29      19.698  23.011  52.198  1.00 81.51           C  \r
-ATOM   2587  CA  GLU B  30      17.491  26.106  52.510  1.00 83.25           C  \r
-ATOM   2596  CA  ASP B  31      15.857  25.933  55.935  1.00 81.92           C  \r
-ATOM   2604  CA  GLY B  32      19.280  24.859  57.151  1.00 79.08           C  \r
-ATOM   2608  CA  ILE B  33      18.621  21.130  57.157  1.00 76.93           C  \r
-ATOM   2616  CA  ASP B  34      21.528  18.731  56.618  1.00 73.53           C  \r
-ATOM   2624  CA  LEU B  35      20.738  15.738  54.421  1.00 67.74           C  \r
-ATOM   2632  CA  PRO B  36      23.138  13.391  52.547  1.00 65.90           C  \r
-ATOM   2639  CA  TYR B  37      23.916  14.226  48.912  1.00 64.85           C  \r
-ATOM   2651  CA  SER B  38      26.659  13.373  46.412  1.00 62.58           C  \r
-ATOM   2657  CA  CYS B  39      26.193  13.603  42.652  1.00 60.99           C  \r
-ATOM   2663  CA  ARG B  40      22.908  15.441  43.251  1.00 58.35           C  \r
-ATOM   2674  CA  ALA B  41      21.699  14.108  39.886  1.00 56.38           C  \r
-ATOM   2679  CA  GLY B  42      19.886  10.955  40.991  1.00 56.66           C  \r
-ATOM   2683  CA  SER B  43      22.465   8.336  40.010  1.00 58.55           C  \r
-ATOM   2689  CA  CYS B  44      23.548   7.052  43.447  1.00 56.27           C  \r
-ATOM   2695  CA  SER B  45      22.057   5.987  46.791  1.00 58.20           C  \r
-ATOM   2701  CA  SER B  46      23.574   8.773  48.890  1.00 59.13           C  \r
-ATOM   2707  CA  CYS B  47      20.220  10.475  49.517  1.00 65.64           C  \r
-ATOM   2713  CA  ALA B  48      17.911   7.436  49.610  1.00 69.71           C  \r
-ATOM   2718  CA  GLY B  49      14.733   7.635  51.681  1.00 73.09           C  \r
-ATOM   2722  CA  LYS B  50      11.712   5.340  52.183  1.00 73.77           C  \r
-ATOM   2731  CA  VAL B  51       8.551   7.412  51.568  1.00 76.51           C  \r
-ATOM   2738  CA  VAL B  52       5.237   7.081  53.429  1.00 78.85           C  \r
-ATOM   2745  CA  SER B  53       2.180   9.376  53.647  1.00 79.57           C  \r
-ATOM   2751  CA  GLY B  54       2.118  10.991  50.218  1.00 76.32           C  \r
-ATOM   2755  CA  SER B  55       3.577  10.944  46.726  1.00 76.31           C  \r
-ATOM   2761  CA  VAL B  56       6.436  12.592  44.828  1.00 77.50           C  \r
-ATOM   2768  CA  ASP B  57       7.691  12.960  41.243  1.00 76.83           C  \r
-ATOM   2776  CA  GLN B  58      11.150  11.483  40.555  1.00 76.66           C  \r
-ATOM   2785  CA  SER B  59      10.976  10.827  36.792  1.00 80.19           C  \r
-ATOM   2791  CA  ASP B  60      14.688  11.644  36.510  1.00 83.51           C  \r
-ATOM   2799  CA  GLN B  61      15.175   8.137  37.916  1.00 85.74           C  \r
-ATOM   2808  CA  SER B  62      18.644   7.080  36.699  1.00 85.85           C  \r
-ATOM   2814  CA  TYR B  63      19.324   5.049  39.852  1.00 84.49           C  \r
-ATOM   2826  CA  LEU B  64      15.683   4.296  40.629  1.00 89.06           C  \r
-ATOM   2834  CA  ASP B  65      15.356   0.604  39.742  1.00 92.21           C  \r
-ATOM   2842  CA  ASP B  66      12.421  -1.791  39.331  1.00 92.35           C  \r
-ATOM   2850  CA  GLY B  67      10.747  -2.542  42.659  1.00 89.07           C  \r
-ATOM   2854  CA  GLN B  68      12.336   0.632  44.010  1.00 88.41           C  \r
-ATOM   2863  CA  ILE B  69       9.483   2.828  42.742  1.00 86.11           C  \r
-ATOM   2871  CA  ALA B  70       7.060   0.441  44.446  1.00 81.10           C  \r
-ATOM   2876  CA  ASP B  71       8.985  -0.310  47.648  1.00 76.82           C  \r
-ATOM   2884  CA  GLY B  72       8.653   3.423  48.186  1.00 73.00           C  \r
-ATOM   2888  CA  TRP B  73      12.342   4.386  48.095  1.00 67.93           C  \r
-ATOM   2902  CA  VAL B  74      13.052   8.007  47.136  1.00 63.84           C  \r
-ATOM   2909  CA  LEU B  75      16.093   9.940  45.892  1.00 58.37           C  \r
-ATOM   2917  CA  THR B  76      15.524  13.198  47.826  1.00 55.82           C  \r
-ATOM   2924  CA  CYS B  77      17.941  15.109  45.556  1.00 58.23           C  \r
-ATOM   2930  CA  HIS B  78      15.777  14.389  42.513  1.00 64.55           C  \r
-ATOM   2940  CA  ALA B  79      12.108  14.429  43.512  1.00 68.40           C  \r
-ATOM   2945  CA  TYR B  80       9.442  17.152  43.581  1.00 69.69           C  \r
-ATOM   2957  CA  PRO B  81       6.414  16.584  45.842  1.00 71.39           C  \r
-ATOM   2964  CA  THR B  82       3.015  16.014  44.179  1.00 73.67           C  \r
-ATOM   2971  CA  SER B  83       1.278  15.771  47.557  1.00 76.90           C  \r
-ATOM   2977  CA  ASP B  84       1.940  16.119  51.289  1.00 75.20           C  \r
-ATOM   2985  CA  VAL B  85       4.840  13.765  52.050  1.00 71.37           C  \r
-ATOM   2992  CA  VAL B  86       6.363  11.824  54.956  1.00 70.12           C  \r
-ATOM   2999  CA  ILE B  87       9.770  10.300  54.188  1.00 74.18           C  \r
-ATOM   3007  CA  GLU B  88      12.211   8.403  56.410  1.00 78.53           C  \r
-ATOM   3012  CA  THR B  89      15.541   9.964  55.407  1.00 79.79           C  \r
-ATOM   3019  CA  HIS B  90      19.062   8.538  55.881  1.00 79.40           C  \r
-ATOM   3029  CA  LYS B  91      17.584   5.099  55.099  1.00 84.52           C  \r
-ATOM   3038  CA  GLU B  92      20.016   2.596  53.549  1.00 91.64           C  \r
-ATOM   3047  CA  GLU B  93      20.192  -0.858  51.981  1.00 98.97           C  \r
-ATOM   3056  CA  GLU B  94      23.321  -2.924  51.298  1.00106.32           C  \r
-ATOM   3065  CA  LEU B  95      22.104  -6.552  51.453  1.00111.32           C  \r
-ATOM   3073  CA  THR B  96      18.778  -8.417  51.866  1.00116.01           C  \r
-ATOM   3080  CA  GLY B  97      18.877 -11.302  49.394  1.00116.63           C  \r
-ATOM   3084  CA  ALA B  98      22.056  -9.833  47.910  1.00116.02           C  \r
-ATOM   3091  CA  GLU C  19      26.080  -2.480  15.294  1.00 73.96           C  \r
-ATOM   3100  CA  SER C  20      23.405   0.198  14.956  1.00 67.27           C  \r
-ATOM   3106  CA  LYS C  21      22.937   3.927  15.380  1.00 59.27           C  \r
-ATOM   3115  CA  LYS C  22      19.198   3.481  15.874  1.00 58.42           C  \r
-ATOM   3124  CA  GLN C  23      17.251   3.141  19.137  1.00 59.89           C  \r
-ATOM   3133  CA  GLU C  24      17.931  -0.276  20.610  1.00 62.66           C  \r
-ATOM   3142  CA  GLU C  25      16.850  -0.453  24.226  1.00 64.27           C  \r
-ATOM   3151  CA  GLY C  26      13.211  -0.817  25.116  1.00 61.78           C  \r
-ATOM   3155  CA  VAL C  27      12.703  -2.073  21.582  1.00 58.37           C  \r
-ATOM   3162  CA  VAL C  28      10.779  -5.347  21.485  1.00 54.17           C  \r
-ATOM   3169  CA  THR C  29       9.481  -7.339  18.549  1.00 52.79           C  \r
-ATOM   3176  CA  ASN C  30       6.670  -9.775  17.786  1.00 51.30           C  \r
-ATOM   3184  CA  LEU C  31       4.863  -9.997  21.112  1.00 51.05           C  \r
-ATOM   3192  CA  TYR C  32       1.766 -11.297  19.327  1.00 50.51           C  \r
-ATOM   3204  CA  LYS C  33       1.373 -13.532  16.266  1.00 49.49           C  \r
-ATOM   3213  CA  PRO C  34      -1.609 -14.150  13.925  1.00 50.98           C  \r
-ATOM   3220  CA  LYS C  35      -2.450 -17.248  16.011  1.00 55.46           C  \r
-ATOM   3229  CA  GLU C  36      -2.977 -15.400  19.288  1.00 53.79           C  \r
-ATOM   3238  CA  PRO C  37      -3.251 -11.638  18.607  1.00 49.32           C  \r
-ATOM   3245  CA  TYR C  38      -3.674  -9.050  21.318  1.00 46.76           C  \r
-ATOM   3257  CA  VAL C  39      -7.276  -7.947  21.418  1.00 43.68           C  \r
-ATOM   3264  CA  GLY C  40      -7.415  -4.194  21.922  1.00 41.62           C  \r
-ATOM   3268  CA  ARG C  41     -10.273  -1.719  21.954  1.00 40.07           C  \r
-ATOM   3279  CA  CYS C  42     -11.026   1.064  19.477  1.00 36.37           C  \r
-ATOM   3285  CA  LEU C  43     -11.330   4.206  21.583  1.00 31.09           C  \r
-ATOM   3293  CA  LEU C  44     -11.337   6.671  18.673  1.00 28.46           C  \r
-ATOM   3301  CA  ASN C  45     -11.792   6.653  14.923  1.00 26.74           C  \r
-ATOM   3309  CA  THR C  46     -11.954   9.920  13.013  1.00 25.29           C  \r
-ATOM   3316  CA  LYS C  47     -11.667  10.775   9.352  1.00 21.50           C  \r
-ATOM   3325  CA  ILE C  48      -8.895  13.355   9.121  1.00 19.33           C  \r
-ATOM   3333  CA  THR C  49      -9.125  14.281   5.442  1.00 20.38           C  \r
-ATOM   3340  CA  GLY C  50     -11.630  16.676   3.855  1.00 20.12           C  \r
-ATOM   3344  CA  ASP C  51     -14.895  15.345   2.412  1.00 21.75           C  \r
-ATOM   3352  CA  ASP C  52     -13.889  16.693  -0.999  1.00 21.19           C  \r
-ATOM   3360  CA  ALA C  53     -10.651  14.683  -0.749  1.00 21.06           C  \r
-ATOM   3365  CA  PRO C  54     -10.036  11.974  -3.413  1.00 21.39           C  \r
-ATOM   3372  CA  GLY C  55      -9.982   9.067  -0.977  1.00 24.42           C  \r
-ATOM   3376  CA  GLU C  56     -10.374   9.298   2.857  1.00 22.08           C  \r
-ATOM   3385  CA  THR C  57      -7.723   8.611   5.517  1.00 20.31           C  \r
-ATOM   3392  CA  TRP C  58      -8.541   7.849   9.162  1.00 19.33           C  \r
-ATOM   3406  CA  HIS C  59      -6.758   8.520  12.438  1.00 22.68           C  \r
-ATOM   3416  CA  MET C  60      -7.645   5.951  15.108  1.00 27.16           C  \r
-ATOM   3424  CA  VAL C  61      -6.672   5.224  18.723  1.00 29.32           C  \r
-ATOM   3431  CA  PHE C  62      -6.669   1.704  20.220  1.00 34.23           C  \r
-ATOM   3442  CA  SER C  63      -6.102   0.643  23.847  1.00 37.05           C  \r
-ATOM   3448  CA  THR C  64      -3.096  -1.517  24.798  1.00 41.86           C  \r
-ATOM   3455  CA  GLU C  65      -3.169  -1.652  28.621  1.00 48.33           C  \r
-ATOM   3464  CA  GLY C  66       0.537  -0.885  28.318  1.00 52.45           C  \r
-ATOM   3468  CA  LYS C  67       0.955  -4.385  26.891  1.00 54.14           C  \r
-ATOM   3477  CA  ILE C  68       2.429  -3.211  23.570  1.00 51.52           C  \r
-ATOM   3485  CA  PRO C  69       5.602  -1.279  24.487  1.00 49.85           C  \r
-ATOM   3492  CA  TYR C  70       6.523  -0.180  20.967  1.00 44.48           C  \r
-ATOM   3504  CA  ARG C  71       9.185   2.353  19.993  1.00 40.96           C  \r
-ATOM   3515  CA  GLU C  72       8.727   5.317  17.688  1.00 33.49           C  \r
-ATOM   3524  CA  GLY C  73       8.913   3.876  14.164  1.00 30.16           C  \r
-ATOM   3528  CA  GLN C  74       7.423   0.399  14.427  1.00 31.26           C  \r
-ATOM   3537  CA  SER C  75       4.187  -0.913  12.966  1.00 33.65           C  \r
-ATOM   3543  CA  ILE C  76       1.454  -3.212  14.278  1.00 33.75           C  \r
-ATOM   3551  CA  GLY C  77      -0.295  -5.923  12.356  1.00 34.32           C  \r
-ATOM   3555  CA  VAL C  78      -4.060  -6.111  12.164  1.00 36.67           C  \r
-ATOM   3562  CA  ILE C  79      -6.137  -9.230  11.507  1.00 41.91           C  \r
-ATOM   3570  CA  ALA C  80      -9.427  -8.086  10.024  1.00 44.06           C  \r
-ATOM   3575  CA  ASP C  81     -12.530  -9.927  11.224  1.00 47.03           C  \r
-ATOM   3583  CA  GLY C  82     -13.972 -12.487   8.829  1.00 53.52           C  \r
-ATOM   3587  CA  VAL C  83     -12.521 -14.951   6.324  1.00 62.57           C  \r
-ATOM   3594  CA  ASP C  84     -11.856 -14.200   2.630  1.00 71.97           C  \r
-ATOM   3602  CA  LYS C  85     -12.935 -17.403   0.861  1.00 76.86           C  \r
-ATOM   3611  CA  ASN C  86     -13.690 -18.960   4.253  1.00 76.52           C  \r
-ATOM   3619  CA  GLY C  87     -10.006 -19.837   4.066  1.00 76.22           C  \r
-ATOM   3623  CA  LYS C  88      -8.802 -19.138   7.616  1.00 71.60           C  \r
-ATOM   3632  CA  PRO C  89      -8.651 -15.577   8.944  1.00 64.14           C  \r
-ATOM   3639  CA  HIS C  90      -7.547 -12.649   6.805  1.00 52.35           C  \r
-ATOM   3649  CA  LYS C  91      -3.753 -12.529   6.474  1.00 46.81           C  \r
-ATOM   3658  CA  VAL C  92      -2.180  -9.868   8.686  1.00 43.48           C  \r
-ATOM   3665  CA  ARG C  93      -1.491  -6.414   7.232  1.00 36.99           C  \r
-ATOM   3676  CA  LEU C  94       0.983  -3.882   8.601  1.00 32.95           C  \r
-ATOM   3684  CA  TYR C  95       0.340  -0.239   9.510  1.00 24.84           C  \r
-ATOM   3696  CA  SER C  96       3.003   2.101  10.803  1.00 23.32           C  \r
-ATOM   3702  CA  ILE C  97       2.244   3.502  14.236  1.00 24.12           C  \r
-ATOM   3710  CA  ALA C  98       1.243   7.179  13.932  1.00 22.32           C  \r
-ATOM   3715  CA  SER C  99       1.572   7.636  17.676  1.00 25.69           C  \r
-ATOM   3721  CA  SER C 100       4.752   7.924  19.726  1.00 28.83           C  \r
-ATOM   3727  CA  ALA C 101       5.741   5.521  22.508  1.00 35.61           C  \r
-ATOM   3732  CA  ILE C 102       3.906   7.635  25.079  1.00 38.39           C  \r
-ATOM   3740  CA  GLY C 103       0.899   7.826  22.742  1.00 31.93           C  \r
-ATOM   3744  CA  ASP C 104      -1.803  10.384  21.986  1.00 28.77           C  \r
-ATOM   3752  CA  PHE C 105      -3.050  10.293  25.607  1.00 37.05           C  \r
-ATOM   3763  CA  GLY C 106       0.503  10.389  26.967  1.00 39.36           C  \r
-ATOM   3767  CA  ASP C 107      -0.221   7.437  29.266  1.00 41.44           C  \r
-ATOM   3775  CA  SER C 108       1.566   4.766  27.217  1.00 42.18           C  \r
-ATOM   3781  CA  LYS C 109      -1.747   2.877  27.156  1.00 42.45           C  \r
-ATOM   3790  CA  THR C 110      -2.698   3.586  23.515  1.00 38.10           C  \r
-ATOM   3797  CA  VAL C 111      -1.603   2.971  19.906  1.00 32.79           C  \r
-ATOM   3804  CA  SER C 112      -2.671   5.020  16.872  1.00 29.60           C  \r
-ATOM   3810  CA  LEU C 113      -2.713   4.324  13.126  1.00 25.68           C  \r
-ATOM   3818  CA  CYS C 114      -3.142   6.498   9.999  1.00 24.23           C  \r
-ATOM   3824  CA  VAL C 115      -5.345   4.496   7.641  1.00 22.80           C  \r
-ATOM   3831  CA  LYS C 116      -6.221   5.196   4.015  1.00 22.11           C  \r
-ATOM   3840  CA  ARG C 117      -9.458   3.521   2.955  1.00 25.68           C  \r
-ATOM   3851  CA  LEU C 118      -8.447   1.440  -0.100  1.00 28.80           C  \r
-ATOM   3859  CA  ILE C 119     -11.140   1.661  -2.792  1.00 31.75           C  \r
-ATOM   3867  CA  TYR C 120     -10.086   0.716  -6.312  1.00 32.93           C  \r
-ATOM   3879  CA  THR C 121     -11.388  -0.733  -9.598  1.00 36.84           C  \r
-ATOM   3886  CA  ASN C 122     -10.258  -4.257 -10.546  1.00 36.90           C  \r
-ATOM   3894  CA  ASP C 123      -9.574  -5.562 -14.056  1.00 45.45           C  \r
-ATOM   3902  CA  ALA C 124     -13.196  -6.758 -14.269  1.00 44.66           C  \r
-ATOM   3907  CA  GLY C 125     -14.207  -3.102 -14.023  1.00 45.49           C  \r
-ATOM   3911  CA  GLU C 126     -16.059  -3.511 -10.722  1.00 45.54           C  \r
-ATOM   3920  CA  ILE C 127     -15.507  -1.321  -7.638  1.00 39.70           C  \r
-ATOM   3928  CA  VAL C 128     -13.846  -3.171  -4.762  1.00 38.09           C  \r
-ATOM   3935  CA  LYS C 129     -12.759  -2.512  -1.198  1.00 33.77           C  \r
-ATOM   3944  CA  GLY C 130      -9.566  -3.363   0.599  1.00 31.98           C  \r
-ATOM   3948  CA  VAL C 131     -10.443  -5.797   3.385  1.00 33.16           C  \r
-ATOM   3955  CA  CYS C 132      -8.241  -4.645   6.257  1.00 29.97           C  \r
-ATOM   3961  CA  SER C 133      -8.238  -0.898   5.607  1.00 30.67           C  \r
-ATOM   3967  CA  ASN C 134     -12.022  -0.902   5.268  1.00 30.35           C  \r
-ATOM   3975  CA  PHE C 135     -12.375  -2.946   8.424  1.00 29.86           C  \r
-ATOM   3986  CA  LEU C 136     -10.223  -0.334  10.195  1.00 29.42           C  \r
-ATOM   3994  CA  CYS C 137     -11.779   2.834   8.813  1.00 32.27           C  \r
-ATOM   4000  CA  ASP C 138     -15.116   1.280   9.724  1.00 34.29           C  \r
-ATOM   4008  CA  LEU C 139     -14.287   0.699  13.399  1.00 37.51           C  \r
-ATOM   4016  CA  GLN C 140     -16.635   2.170  16.028  1.00 43.76           C  \r
-ATOM   4025  CA  PRO C 141     -15.630   3.032  19.581  1.00 42.77           C  \r
-ATOM   4032  CA  GLY C 142     -16.082  -0.210  21.478  1.00 42.83           C  \r
-ATOM   4036  CA  ASP C 143     -15.117  -2.625  18.696  1.00 40.91           C  \r
-ATOM   4044  CA  ASN C 144     -12.182  -4.947  19.288  1.00 45.66           C  \r
-ATOM   4052  CA  VAL C 145      -9.056  -5.146  17.145  1.00 46.95           C  \r
-ATOM   4059  CA  GLN C 146      -6.707  -8.107  16.606  1.00 48.69           C  \r
-ATOM   4068  CA  ILE C 147      -3.249  -6.538  17.123  1.00 46.84           C  \r
-ATOM   4076  CA  THR C 148      -0.010  -8.392  16.264  1.00 46.26           C  \r
-ATOM   4083  CA  GLY C 149       3.543  -7.117  16.634  1.00 45.60           C  \r
-ATOM   4087  CA  PRO C 150       5.248  -4.818  17.394  1.00 44.97           C  \r
-ATOM   4094  CA  VAL C 151       7.423  -5.293  14.321  1.00 44.50           C  \r
-ATOM   4101  CA  GLY C 152      10.289  -3.716  12.438  1.00 45.33           C  \r
-ATOM   4105  CA  LYS C 153      13.599  -2.161  13.435  1.00 48.64           C  \r
-ATOM   4114  CA  GLU C 154      14.166  -0.437  10.074  1.00 48.20           C  \r
-ATOM   4123  CA  MET C 155      12.437   2.888  10.737  1.00 41.77           C  \r
-ATOM   4131  CA  LEU C 156      13.839   3.081  14.267  1.00 38.27           C  \r
-ATOM   4139  CA  MET C 157      15.076   6.540  15.308  1.00 34.29           C  \r
-ATOM   4147  CA  PRO C 158      18.782   7.419  15.339  1.00 34.05           C  \r
-ATOM   4154  CA  LYS C 159      20.262   7.521  18.845  1.00 35.82           C  \r
-ATOM   4163  CA  ASP C 160      22.076  10.792  18.273  1.00 35.95           C  \r
-ATOM   4171  CA  PRO C 161      19.683  13.401  19.809  1.00 35.63           C  \r
-ATOM   4178  CA  ASN C 162      21.563  15.948  17.758  1.00 33.92           C  \r
-ATOM   4186  CA  ALA C 163      21.028  14.172  14.487  1.00 30.82           C  \r
-ATOM   4191  CA  THR C 164      19.693  15.722  11.305  1.00 25.18           C  \r
-ATOM   4198  CA  ILE C 165      16.617  13.601  10.636  1.00 19.91           C  \r
-ATOM   4206  CA  ILE C 166      15.351  13.978   7.060  1.00 13.76           C  \r
-ATOM   4214  CA  MET C 167      11.843  12.550   6.703  1.00 14.98           C  \r
-ATOM   4222  CA  LEU C 168      10.385  11.831   3.251  1.00 16.64           C  \r
-ATOM   4230  CA  ALA C 169       6.747  10.808   3.007  1.00 15.85           C  \r
-ATOM   4235  CA  THR C 170       3.765  10.346   0.737  1.00 14.23           C  \r
-ATOM   4242  CA  GLY C 171       0.255   9.724   2.035  1.00 13.78           C  \r
-ATOM   4246  CA  THR C 172      -0.103   7.560   5.139  1.00 17.62           C  \r
-ATOM   4253  CA  GLY C 173       3.646   7.343   4.821  1.00 17.20           C  \r
-ATOM   4257  CA  ILE C 174       3.469  10.213   7.270  1.00 15.91           C  \r
-ATOM   4265  CA  ALA C 175       2.586   7.783  10.110  1.00 15.63           C  \r
-ATOM   4270  CA  PRO C 176       6.023   6.933  11.582  1.00 17.04           C  \r
-ATOM   4277  CA  PHE C 177       7.215  10.514  11.327  1.00 18.21           C  \r
-ATOM   4288  CA  ARG C 178       4.268  11.745  13.359  1.00 22.35           C  \r
-ATOM   4299  CA  SER C 179       5.563   9.289  15.983  1.00 25.22           C  \r
-ATOM   4305  CA  PHE C 180       9.139  10.593  15.614  1.00 25.98           C  \r
-ATOM   4316  CA  LEU C 181       7.925  14.180  15.767  1.00 29.12           C  \r
-ATOM   4324  CA  TRP C 182       5.625  13.641  18.714  1.00 31.35           C  \r
-ATOM   4338  CA  LYS C 183       8.488  12.385  20.871  1.00 30.92           C  \r
-ATOM   4347  CA  MET C 184      10.841  15.050  19.503  1.00 24.85           C  \r
-ATOM   4355  CA  PHE C 185       8.741  18.202  20.114  1.00 22.97           C  \r
-ATOM   4366  CA  PHE C 186       5.604  17.337  22.076  1.00 27.77           C  \r
-ATOM   4377  CA  GLU C 187       7.117  15.432  25.009  1.00 37.71           C  \r
-ATOM   4386  CA  LYS C 188       9.542  15.977  27.878  1.00 53.59           C  \r
-ATOM   4395  CA  HIS C 189      12.355  13.416  28.180  1.00 63.67           C  \r
-ATOM   4405  CA  ASP C 190      15.318  13.181  30.569  1.00 66.93           C  \r
-ATOM   4413  CA  ASP C 191      17.480  11.106  28.238  1.00 59.79           C  \r
-ATOM   4421  CA  TYR C 192      16.190  12.725  25.047  1.00 51.96           C  \r
-ATOM   4433  CA  LYS C 193      16.700  16.406  24.324  1.00 47.01           C  \r
-ATOM   4442  CA  PHE C 194      16.580  16.471  20.530  1.00 39.85           C  \r
-ATOM   4453  CA  ASN C 195      18.572  19.494  19.409  1.00 37.52           C  \r
-ATOM   4461  CA  GLY C 196      19.361  18.548  15.845  1.00 32.08           C  \r
-ATOM   4465  CA  LEU C 197      17.310  19.266  12.766  1.00 28.26           C  \r
-ATOM   4473  CA  GLY C 198      14.051  17.526  11.928  1.00 25.05           C  \r
-ATOM   4477  CA  TRP C 199      13.211  18.137   8.269  1.00 19.81           C  \r
-ATOM   4491  CA  LEU C 200       9.908  16.742   7.059  1.00 13.86           C  \r
-ATOM   4499  CA  PHE C 201       8.855  16.521   3.429  1.00 14.83           C  \r
-ATOM   4510  CA  LEU C 202       5.288  15.361   2.717  1.00 16.12           C  \r
-ATOM   4518  CA  GLY C 203       3.701  14.731  -0.681  1.00 13.79           C  \r
-ATOM   4522  CA  VAL C 204      -0.051  14.414  -1.182  1.00 11.75           C  \r
-ATOM   4529  CA  PRO C 205      -2.113  15.264  -4.308  1.00 14.66           C  \r
-ATOM   4536  CA  THR C 206      -4.553  17.737  -2.778  1.00 16.37           C  \r
-ATOM   4543  CA  SER C 207      -4.756  20.169   0.120  1.00 18.01           C  \r
-ATOM   4549  CA  SER C 208      -7.780  18.225   1.280  1.00 17.59           C  \r
-ATOM   4555  CA  SER C 209      -5.452  15.198   1.550  1.00 16.19           C  \r
-ATOM   4561  CA  LEU C 210      -2.972  16.940   3.860  1.00 14.22           C  \r
-ATOM   4569  CA  LEU C 211      -2.255  14.980   7.059  1.00 14.43           C  \r
-ATOM   4577  CA  TYR C 212      -1.624  16.449  10.549  1.00 18.94           C  \r
-ATOM   4589  CA  LYS C 213      -0.818  19.896   9.150  1.00 22.61           C  \r
-ATOM   4598  CA  GLU C 214      -2.039  21.572  12.352  1.00 25.73           C  \r
-ATOM   4607  CA  GLU C 215       0.152  19.413  14.514  1.00 19.23           C  \r
-ATOM   4616  CA  PHE C 216       3.216  20.178  12.439  1.00 17.80           C  \r
-ATOM   4627  CA  GLY C 217       2.478  23.890  12.512  1.00 19.90           C  \r
-ATOM   4631  CA  LYS C 218       2.578  24.001  16.294  1.00 25.54           C  \r
-ATOM   4640  CA  MET C 219       5.810  22.021  16.188  1.00 26.79           C  \r
-ATOM   4648  CA  LYS C 220       7.224  24.606  13.819  1.00 31.85           C  \r
-ATOM   4657  CA  GLU C 221       6.071  27.341  16.219  1.00 38.62           C  \r
-ATOM   4666  CA  ARG C 222       7.760  25.760  19.233  1.00 39.10           C  \r
-ATOM   4677  CA  ALA C 223      11.124  24.971  17.668  1.00 35.43           C  \r
-ATOM   4682  CA  PRO C 224      11.696  27.100  14.528  1.00 32.99           C  \r
-ATOM   4689  CA  GLU C 225      15.425  26.331  14.360  1.00 33.87           C  \r
-ATOM   4698  CA  ASN C 226      15.038  22.591  14.986  1.00 30.46           C  \r
-ATOM   4706  CA  PHE C 227      12.088  21.755  12.732  1.00 24.98           C  \r
-ATOM   4717  CA  ARG C 228      11.351  22.384   9.075  1.00 19.87           C  \r
-ATOM   4728  CA  VAL C 229       8.435  21.010   7.118  1.00 14.21           C  \r
-ATOM   4735  CA  ASP C 230       7.739  21.452   3.398  1.00 12.26           C  \r
-ATOM   4743  CA  TYR C 231       4.627  20.147   1.722  1.00 14.42           C  \r
-ATOM   4755  CA  ALA C 232       4.334  19.003  -1.872  1.00  9.99           C  \r
-ATOM   4760  CA  VAL C 233       0.778  19.232  -3.168  1.00 10.49           C  \r
-ATOM   4767  CA  SER C 234       1.043  17.769  -6.694  1.00 19.00           C  \r
-ATOM   4773  CA  ARG C 235      -2.240  19.042  -8.206  1.00 23.13           C  \r
-ATOM   4784  CA  GLU C 236      -2.069  22.459  -6.578  1.00 17.58           C  \r
-ATOM   4793  CA  GLN C 237       1.546  23.511  -6.623  1.00 15.89           C  \r
-ATOM   4802  CA  THR C 238       4.202  24.018  -9.275  1.00 17.86           C  \r
-ATOM   4809  CA  ASN C 239       7.922  24.800  -9.182  1.00 15.15           C  \r
-ATOM   4817  CA  ALA C 240       9.558  27.791 -10.892  1.00 21.51           C  \r
-ATOM   4822  CA  ALA C 241       9.475  25.887 -14.174  1.00 24.05           C  \r
-ATOM   4827  CA  GLY C 242       5.741  25.110 -13.938  1.00 26.25           C  \r
-ATOM   4831  CA  GLU C 243       5.999  21.359 -13.153  1.00 25.92           C  \r
-ATOM   4840  CA  ARG C 244       3.679  19.536 -10.704  1.00 24.04           C  \r
-ATOM   4851  CA  MET C 245       5.076  19.643  -7.174  1.00 18.58           C  \r
-ATOM   4859  CA  TYR C 246       5.784  16.047  -6.100  1.00 14.16           C  \r
-ATOM   4871  CA  ILE C 247       7.910  15.343  -3.034  1.00 16.78           C  \r
-ATOM   4879  CA  GLN C 248      11.089  15.070  -5.120  1.00 18.72           C  \r
-ATOM   4888  CA  THR C 249      10.168  18.255  -6.921  1.00 20.93           C  \r
-ATOM   4895  CA  ARG C 250       9.962  20.031  -3.567  1.00 19.25           C  \r
-ATOM   4906  CA  MET C 251      13.275  18.471  -2.561  1.00 19.40           C  \r
-ATOM   4914  CA  ALA C 252      14.910  19.812  -5.760  1.00 20.48           C  \r
-ATOM   4919  CA  GLU C 253      14.456  23.418  -4.569  1.00 18.19           C  \r
-ATOM   4928  CA  TYR C 254      16.804  22.515  -1.673  1.00 17.80           C  \r
-ATOM   4940  CA  LYS C 255      19.038  20.415  -3.902  1.00 20.66           C  \r
-ATOM   4949  CA  GLU C 256      22.452  21.603  -2.682  1.00 16.05           C  \r
-ATOM   4958  CA  GLU C 257      21.544  21.914   0.993  1.00 15.89           C  \r
-ATOM   4967  CA  LEU C 258      20.377  18.297   0.919  1.00 20.74           C  \r
-ATOM   4975  CA  TRP C 259      23.388  16.939  -0.965  1.00 23.45           C  \r
-ATOM   4989  CA  GLU C 260      25.645  18.669   1.563  1.00 24.08           C  \r
-ATOM   4998  CA  LEU C 261      23.573  17.378   4.477  1.00 24.74           C  \r
-ATOM   5006  CA  LEU C 262      24.020  13.928   2.938  1.00 26.14           C  \r
-ATOM   5014  CA  LYS C 263      27.792  14.091   3.402  1.00 25.40           C  \r
-ATOM   5023  CA  LYS C 264      27.457  14.521   7.176  1.00 31.47           C  \r
-ATOM   5032  CA  ASP C 265      27.877  11.474   9.425  1.00 35.31           C  \r
-ATOM   5040  CA  ASN C 266      24.934  12.482  11.620  1.00 29.63           C  \r
-ATOM   5048  CA  THR C 267      22.321  12.795   8.832  1.00 28.00           C  \r
-ATOM   5055  CA  TYR C 268      19.556  10.160   8.808  1.00 27.00           C  \r
-ATOM   5067  CA  VAL C 269      17.143   9.903   5.884  1.00 24.65           C  \r
-ATOM   5074  CA  TYR C 270      13.890   8.016   6.276  1.00 23.37           C  \r
-ATOM   5086  CA  MET C 271      11.373   7.327   3.518  1.00 18.93           C  \r
-ATOM   5094  CA  CYS C 272       7.834   6.074   4.043  1.00 18.24           C  \r
-ATOM   5100  CA  GLY C 273       4.784   5.874   1.826  1.00 22.39           C  \r
-ATOM   5104  CA  LEU C 274       3.837   4.483  -1.568  1.00 26.95           C  \r
-ATOM   5112  CA  LYS C 275       6.305   2.384  -3.532  1.00 32.36           C  \r
-ATOM   5121  CA  GLY C 276       7.741   4.199  -6.514  1.00 37.46           C  \r
-ATOM   5125  CA  MET C 277       7.714   7.455  -4.608  1.00 28.76           C  \r
-ATOM   5133  CA  GLU C 278      11.430   6.639  -4.425  1.00 32.22           C  \r
-ATOM   5142  CA  LYS C 279      12.017   6.321  -8.153  1.00 29.94           C  \r
-ATOM   5151  CA  GLY C 280      11.317  10.057  -8.293  1.00 24.18           C  \r
-ATOM   5155  CA  ILE C 281      13.766  10.673  -5.460  1.00 23.68           C  \r
-ATOM   5163  CA  ASP C 282      16.431   8.365  -6.934  1.00 26.58           C  \r
-ATOM   5171  CA  ASP C 283      16.211  10.530 -10.054  1.00 28.70           C  \r
-ATOM   5179  CA  ILE C 284      17.089  13.937  -8.538  1.00 27.28           C  \r
-ATOM   5187  CA  MET C 285      19.706  12.222  -6.388  1.00 27.45           C  \r
-ATOM   5195  CA  VAL C 286      21.377  10.712  -9.470  1.00 30.74           C  \r
-ATOM   5202  CA  SER C 287      21.619  14.159 -11.061  1.00 32.14           C  \r
-ATOM   5208  CA  LEU C 288      23.240  15.463  -7.873  1.00 34.20           C  \r
-ATOM   5216  CA  ALA C 289      25.801  12.653  -7.874  1.00 40.16           C  \r
-ATOM   5221  CA  GLU C 290      26.837  12.825 -11.536  1.00 41.84           C  \r
-ATOM   5230  CA  LYS C 291      27.855  16.387 -10.793  1.00 43.17           C  \r
-ATOM   5239  CA  ASP C 292      30.299  15.115  -8.139  1.00 41.84           C  \r
-ATOM   5247  CA  GLY C 293      31.237  12.232 -10.420  1.00 46.12           C  \r
-ATOM   5251  CA  ILE C 294      30.053   9.669  -7.864  1.00 45.54           C  \r
-ATOM   5259  CA  ASP C 295      27.399   6.998  -8.480  1.00 41.14           C  \r
-ATOM   5267  CA  TRP C 296      24.222   7.605  -6.479  1.00 30.67           C  \r
-ATOM   5281  CA  PHE C 297      23.381   3.910  -6.151  1.00 31.97           C  \r
-ATOM   5292  CA  ASP C 298      26.856   2.916  -4.907  1.00 38.12           C  \r
-ATOM   5300  CA  TYR C 299      26.671   5.875  -2.540  1.00 39.05           C  \r
-ATOM   5312  CA  LYS C 300      23.196   4.971  -1.294  1.00 41.63           C  \r
-ATOM   5321  CA  LYS C 301      24.542   1.489  -0.577  1.00 43.40           C  \r
-ATOM   5330  CA  GLN C 302      27.207   3.064   1.608  1.00 43.79           C  \r
-ATOM   5339  CA  LEU C 303      24.476   5.181   3.238  1.00 41.51           C  \r
-ATOM   5347  CA  LYS C 304      22.138   2.343   4.264  1.00 45.18           C  \r
-ATOM   5356  CA  ARG C 305      25.322   0.535   5.256  1.00 46.65           C  \r
-ATOM   5367  CA  GLY C 306      25.613   3.181   7.945  1.00 40.29           C  \r
-ATOM   5371  CA  ASP C 307      21.954   3.487   8.940  1.00 41.21           C  \r
-ATOM   5379  CA  GLN C 308      21.463   6.730   7.023  1.00 35.55           C  \r
-ATOM   5388  CA  TRP C 309      18.961   5.674   4.361  1.00 31.22           C  \r
-ATOM   5402  CA  ASN C 310      16.018   3.728   5.752  1.00 31.61           C  \r
-ATOM   5410  CA  VAL C 311      13.120   2.841   3.452  1.00 32.13           C  \r
-ATOM   5417  CA  GLU C 312       9.705   1.332   4.261  1.00 31.51           C  \r
-ATOM   5426  CA  VAL C 313       7.466   1.606   1.209  1.00 26.39           C  \r
-ATOM   5433  CA  TYR C 314       4.403  -0.343   0.111  1.00 25.42           C  \r
+HEADER    OXIDOREDUCTASE/ELECTRON TRANSPORT       08-MAY-00   1GAQ 
+ATOM      2  CA  GLU A  19      20.491  30.713  36.290  1.00 74.29           C  
+ATOM     11  CA  SER A  20      24.056  29.774  37.264  1.00 72.09           C  
+ATOM     17  CA  LYS A  21      27.517  31.289  37.563  1.00 70.09           C  
+ATOM     26  CA  LYS A  22      28.794  27.865  36.481  1.00 68.64           C  
+ATOM     35  CA  GLN A  23      29.484  26.806  32.884  1.00 70.46           C  
+ATOM     44  CA  GLU A  24      26.420  25.175  31.360  1.00 72.08           C  
+ATOM     53  CA  GLU A  25      26.736  26.049  27.683  1.00 70.43           C  
+ATOM     62  CA  GLY A  26      28.299  22.912  26.233  1.00 63.14           C  
+ATOM     66  CA  VAL A  27      26.863  20.704  28.982  1.00 54.50           C  
+ATOM     73  CA  VAL A  28      25.030  17.390  28.655  1.00 48.32           C  
+ATOM     80  CA  THR A  29      23.728  14.677  30.991  1.00 44.86           C  
+ATOM     87  CA  ASN A  30      22.327  11.164  30.703  1.00 45.42           C  
+ATOM     95  CA  LEU A  31      23.332  10.459  27.102  1.00 45.42           C  
+ATOM    103  CA  TYR A  32      23.549   6.898  28.380  1.00 45.88           C  
+ATOM    115  CA  LYS A  33      21.656   5.321  31.262  1.00 47.27           C  
+ATOM    124  CA  PRO A  34      21.991   2.046  33.248  1.00 48.99           C  
+ATOM    131  CA  LYS A  35      19.339   0.560  30.970  1.00 52.75           C  
+ATOM    140  CA  GLU A  36      21.580   0.855  27.886  1.00 53.33           C  
+ATOM    149  CA  PRO A  37      25.154   2.015  28.678  1.00 47.54           C  
+ATOM    156  CA  TYR A  38      27.929   2.872  26.249  1.00 41.98           C  
+ATOM    168  CA  VAL A  39      30.355  -0.017  25.909  1.00 41.48           C  
+ATOM    175  CA  GLY A  40      33.823   1.485  25.966  1.00 37.59           C  
+ATOM    179  CA  ARG A  41      37.165  -0.277  26.122  1.00 39.77           C  
+ATOM    190  CA  CYS A  42      40.148  -0.029  28.442  1.00 36.51           C  
+ATOM    196  CA  LEU A  43      43.095   1.441  26.554  1.00 36.13           C  
+ATOM    204  CA  LEU A  44      45.231   2.023  29.649  1.00 33.55           C  
+ATOM    212  CA  ASN A  45      45.140   1.026  33.307  1.00 27.79           C  
+ATOM    220  CA  THR A  46      48.056   1.800  35.617  1.00 28.75           C  
+ATOM    227  CA  LYS A  47      48.542   1.776  39.388  1.00 30.31           C  
+ATOM    236  CA  ILE A  48      49.564   5.317  40.376  1.00 31.32           C  
+ATOM    244  CA  THR A  49      50.339   4.682  44.059  1.00 37.62           C  
+ATOM    251  CA  GLY A  50      53.585   3.317  45.460  1.00 44.49           C  
+ATOM    255  CA  ASP A  51      53.706  -0.448  46.087  1.00 52.89           C  
+ATOM    263  CA  ASP A  52      53.910   0.545  49.751  1.00 55.23           C  
+ATOM    271  CA  ALA A  53      50.816   2.767  50.056  1.00 53.34           C  
+ATOM    276  CA  PRO A  54      47.904   1.940  52.405  1.00 50.60           C  
+ATOM    283  CA  GLY A  55      45.420   1.579  49.561  1.00 50.35           C  
+ATOM    287  CA  GLU A  56      46.098   1.286  45.836  1.00 42.53           C  
+ATOM    296  CA  THR A  57      44.534   3.816  43.480  1.00 41.14           C  
+ATOM    303  CA  TRP A  58      44.540   3.423  39.708  1.00 35.60           C  
+ATOM    317  CA  HIS A  59      44.468   5.853  36.796  1.00 31.89           C  
+ATOM    327  CA  MET A  60      42.658   4.227  33.866  1.00 31.65           C  
+ATOM    335  CA  VAL A  61      41.716   5.345  30.350  1.00 30.43           C  
+ATOM    342  CA  PHE A  62      38.669   4.172  28.360  1.00 34.36           C  
+ATOM    353  CA  SER A  63      37.657   4.908  24.772  1.00 34.69           C  
+ATOM    359  CA  THR A  64      34.448   6.828  23.951  1.00 36.96           C  
+ATOM    366  CA  GLU A  65      34.691   7.644  20.254  1.00 40.08           C  
+ATOM    375  CA  GLY A  66      33.742  11.183  21.285  1.00 40.22           C  
+ATOM    379  CA  LYS A  67      30.272   9.763  22.003  1.00 41.93           C  
+ATOM    388  CA  ILE A  68      30.279  11.116  25.577  1.00 41.52           C  
+ATOM    396  CA  PRO A  69      30.791  14.926  25.537  1.00 42.35           C  
+ATOM    403  CA  TYR A  70      31.228  15.232  29.299  1.00 39.84           C  
+ATOM    415  CA  ARG A  71      32.639  18.451  30.768  1.00 44.14           C  
+ATOM    426  CA  GLU A  72      35.122  19.278  33.515  1.00 43.82           C  
+ATOM    435  CA  GLY A  73      33.472  18.458  36.835  1.00 41.97           C  
+ATOM    439  CA  GLN A  74      30.929  15.874  35.657  1.00 37.19           C  
+ATOM    448  CA  SER A  75      31.285  12.124  36.138  1.00 38.28           C  
+ATOM    454  CA  ILE A  76      30.458   8.792  34.539  1.00 36.84           C  
+ATOM    462  CA  GLY A  77      28.983   5.620  35.918  1.00 35.39           C  
+ATOM    466  CA  VAL A  78      30.311   2.108  35.530  1.00 32.05           C  
+ATOM    473  CA  ILE A  79      28.458  -1.201  35.591  1.00 32.67           C  
+ATOM    481  CA  ALA A  80      30.745  -4.018  36.644  1.00 35.36           C  
+ATOM    486  CA  ASP A  81      30.359  -7.373  34.872  1.00 38.72           C  
+ATOM    494  CA  GLY A  82      28.308 -10.332  36.110  1.00 45.79           C  
+ATOM    498  CA  VAL A  83      25.820 -10.242  39.001  1.00 52.24           C  
+ATOM    505  CA  ASP A  84      25.838 -10.250  42.834  1.00 60.54           C  
+ATOM    513  CA  LYS A  85      25.014 -13.158  45.196  1.00 66.72           C  
+ATOM    522  CA  ASN A  86      21.414 -13.062  43.904  1.00 67.37           C  
+ATOM    530  CA  GLY A  87      21.724 -13.423  40.136  1.00 64.74           C  
+ATOM    534  CA  LYS A  88      20.971  -9.733  39.570  1.00 61.12           C  
+ATOM    543  CA  PRO A  89      23.054  -7.201  37.561  1.00 54.68           C  
+ATOM    550  CA  HIS A  90      25.224  -4.957  39.755  1.00 44.44           C  
+ATOM    560  CA  LYS A  91      23.940  -1.433  40.260  1.00 40.48           C  
+ATOM    569  CA  VAL A  92      25.803   1.546  38.843  1.00 38.45           C  
+ATOM    576  CA  ARG A  93      28.709   2.986  40.828  1.00 38.93           C  
+ATOM    587  CA  LEU A  94      29.778   6.584  40.096  1.00 34.37           C  
+ATOM    595  CA  TYR A  95      33.309   7.878  39.513  1.00 30.27           C  
+ATOM    607  CA  SER A  96      34.425  11.475  39.057  1.00 29.44           C  
+ATOM    613  CA  ILE A  97      36.029  12.090  35.662  1.00 27.61           C  
+ATOM    621  CA  ALA A  98      39.769  12.693  36.069  1.00 31.12           C  
+ATOM    626  CA  SER A  99      40.393  13.712  32.475  1.00 32.42           C  
+ATOM    632  CA  SER A 100      39.566  17.142  31.059  1.00 36.14           C  
+ATOM    638  CA  ALA A 101      37.097  17.367  28.154  1.00 41.07           C  
+ATOM    643  CA  ILE A 102      39.764  16.549  25.527  1.00 47.65           C  
+ATOM    651  CA  GLY A 103      41.172  13.692  27.599  1.00 46.77           C  
+ATOM    655  CA  ASP A 104      44.730  12.612  28.289  1.00 43.82           C  
+ATOM    663  CA  PHE A 105      45.115  12.065  24.522  1.00 41.52           C  
+ATOM    674  CA  GLY A 106      43.862  15.455  23.328  1.00 41.66           C  
+ATOM    678  CA  ASP A 107      41.355  13.883  20.926  1.00 40.90           C  
+ATOM    686  CA  SER A 108      38.132  14.250  22.954  1.00 42.95           C  
+ATOM    692  CA  LYS A 109      37.967  10.535  22.224  1.00 44.74           C  
+ATOM    701  CA  THR A 110      38.731   9.184  25.704  1.00 41.09           C  
+ATOM    708  CA  VAL A 111      37.728   9.519  29.374  1.00 39.03           C  
+ATOM    715  CA  SER A 112      39.912   8.705  32.399  1.00 37.17           C  
+ATOM    721  CA  LEU A 113      39.098   7.476  35.935  1.00 32.10           C  
+ATOM    729  CA  CYS A 114      40.964   7.578  39.261  1.00 30.65           C  
+ATOM    735  CA  VAL A 115      39.724   4.459  41.060  1.00 33.45           C  
+ATOM    742  CA  LYS A 116      40.668   3.524  44.628  1.00 34.75           C  
+ATOM    751  CA  ARG A 117      40.376  -0.250  45.123  1.00 32.85           C  
+ATOM    762  CA  LEU A 118      38.137  -1.094  48.077  1.00 30.50           C  
+ATOM    770  CA  ILE A 119      39.376  -3.752  50.459  1.00 34.34           C  
+ATOM    778  CA  TYR A 120      38.699  -4.266  54.125  1.00 31.39           C  
+ATOM    790  CA  THR A 121      38.264  -7.086  56.567  1.00 28.83           C  
+ATOM    797  CA  ASN A 122      34.792  -7.477  58.109  1.00 26.51           C  
+ATOM    805  CA  ASP A 123      33.626  -8.382  61.634  1.00 31.58           C  
+ATOM    813  CA  ALA A 124      34.191 -12.077  60.901  1.00 27.84           C  
+ATOM    818  CA  GLY A 125      37.759 -11.844  59.728  1.00 32.39           C  
+ATOM    822  CA  GLU A 126      36.809 -12.146  56.073  1.00 35.82           C  
+ATOM    831  CA  ILE A 127      38.655  -9.932  53.598  1.00 38.42           C  
+ATOM    839  CA  VAL A 128      36.025  -8.261  51.421  1.00 33.73           C  
+ATOM    846  CA  LYS A 129      36.482  -6.484  48.090  1.00 31.87           C  
+ATOM    855  CA  GLY A 130      34.363  -3.680  46.686  1.00 26.91           C  
+ATOM    859  CA  VAL A 131      32.680  -5.051  43.569  1.00 27.89           C  
+ATOM    866  CA  CYS A 132      33.074  -2.246  41.018  1.00 28.46           C  
+ATOM    872  CA  SER A 133      36.266  -0.553  42.213  1.00 31.33           C  
+ATOM    878  CA  ASN A 134      37.861  -3.983  41.984  1.00 30.29           C  
+ATOM    886  CA  PHE A 135      36.318  -4.795  38.623  1.00 31.48           C  
+ATOM    897  CA  LEU A 136      37.926  -1.553  37.520  1.00 27.81           C  
+ATOM    905  CA  CYS A 137      41.417  -1.976  38.955  1.00 25.91           C  
+ATOM    911  CA  ASP A 138      41.605  -5.419  37.338  1.00 30.22           C  
+ATOM    919  CA  LEU A 139      40.462  -4.306  33.874  1.00 32.69           C  
+ATOM    927  CA  GLN A 140      42.851  -5.511  31.186  1.00 36.80           C  
+ATOM    936  CA  PRO A 141      43.380  -3.220  28.170  1.00 36.16           C  
+ATOM    943  CA  GLY A 142      40.864  -4.420  25.586  1.00 31.10           C  
+ATOM    947  CA  ASP A 143      38.129  -5.298  28.055  1.00 30.62           C  
+ATOM    955  CA  ASN A 144      34.690  -3.847  27.645  1.00 33.52           C  
+ATOM    963  CA  VAL A 145      33.430  -1.522  30.361  1.00 37.08           C  
+ATOM    970  CA  GLN A 146      29.817  -0.374  30.523  1.00 37.65           C  
+ATOM    979  CA  ILE A 147      29.547   3.413  31.045  1.00 30.95           C  
+ATOM    987  CA  THR A 148      26.637   5.791  31.832  1.00 29.95           C  
+ATOM    994  CA  GLY A 149      26.297   9.581  31.843  1.00 32.81           C  
+ATOM    998  CA  PRO A 150      27.785  12.148  31.800  1.00 34.98           C  
+ATOM   1005  CA  VAL A 151      26.376  12.668  35.275  1.00 36.53           C  
+ATOM   1012  CA  GLY A 152      26.196  15.756  37.474  1.00 43.09           C  
+ATOM   1016  CA  LYS A 153      26.048  19.528  37.068  1.00 48.37           C  
+ATOM   1025  CA  GLU A 154      26.921  20.540  40.633  1.00 49.70           C  
+ATOM   1034  CA  MET A 155      30.710  20.266  40.235  1.00 47.30           C  
+ATOM   1042  CA  LEU A 156      30.882  22.020  36.869  1.00 50.36           C  
+ATOM   1050  CA  MET A 157      33.362  24.883  36.404  1.00 55.29           C  
+ATOM   1058  CA  PRO A 158      32.521  28.612  36.605  1.00 54.88           C  
+ATOM   1065  CA  LYS A 159      32.291  30.776  33.464  1.00 54.92           C  
+ATOM   1074  CA  ASP A 160      34.497  33.503  34.939  1.00 57.22           C  
+ATOM   1082  CA  PRO A 161      38.055  32.687  33.759  1.00 58.62           C  
+ATOM   1089  CA  ASN A 162      39.524  35.240  36.163  1.00 60.44           C  
+ATOM   1097  CA  ALA A 163      37.814  33.910  39.279  1.00 55.80           C  
+ATOM   1102  CA  THR A 164      39.596  32.487  42.316  1.00 51.04           C  
+ATOM   1109  CA  ILE A 165      38.966  28.771  42.756  1.00 50.26           C  
+ATOM   1117  CA  ILE A 166      39.774  26.773  45.885  1.00 47.54           C  
+ATOM   1125  CA  MET A 167      39.883  23.014  45.324  1.00 46.38           C  
+ATOM   1133  CA  LEU A 168      39.700  20.963  48.522  1.00 42.18           C  
+ATOM   1141  CA  ALA A 169      40.377  17.316  47.770  1.00 36.41           C  
+ATOM   1146  CA  THR A 170      41.005  14.086  49.622  1.00 32.98           C  
+ATOM   1153  CA  GLY A 171      42.027  10.802  48.014  1.00 31.36           C  
+ATOM   1157  CA  THR A 172      40.386  10.037  44.680  1.00 30.48           C  
+ATOM   1164  CA  GLY A 173      38.640  13.335  45.359  1.00 33.99           C  
+ATOM   1168  CA  ILE A 174      41.418  15.036  43.394  1.00 35.66           C  
+ATOM   1176  CA  ALA A 175      39.758  13.585  40.300  1.00 36.00           C  
+ATOM   1181  CA  PRO A 176      37.445  16.385  39.155  1.00 39.41           C  
+ATOM   1188  CA  PHE A 177      40.109  18.971  39.976  1.00 43.21           C  
+ATOM   1199  CA  ARG A 178      42.726  17.119  37.955  1.00 41.09           C  
+ATOM   1210  CA  SER A 179      40.235  17.536  35.124  1.00 39.92           C  
+ATOM   1216  CA  PHE A 180      39.808  21.204  36.009  1.00 39.23           C  
+ATOM   1227  CA  LEU A 181      43.528  21.949  35.995  1.00 39.50           C  
+ATOM   1235  CA  TRP A 182      44.305  20.081  32.770  1.00 41.47           C  
+ATOM   1249  CA  LYS A 183      42.141  22.654  30.972  1.00 48.08           C  
+ATOM   1258  CA  MET A 184      43.477  25.547  33.062  1.00 52.79           C  
+ATOM   1266  CA  PHE A 185      47.102  25.043  32.014  1.00 57.35           C  
+ATOM   1277  CA  PHE A 186      48.075  21.921  30.051  1.00 55.98           C  
+ATOM   1288  CA  GLU A 187      45.758  23.173  27.297  1.00 54.44           C  
+ATOM   1297  CA  LYS A 188      44.908  26.236  25.196  1.00 51.29           C  
+ATOM   1306  CA  HIS A 189      41.395  27.080  24.003  1.00 51.35           C  
+ATOM   1316  CA  ASP A 190      40.108  29.972  21.873  1.00 54.30           C  
+ATOM   1324  CA  ASP A 191      37.199  30.481  24.249  1.00 53.95           C  
+ATOM   1332  CA  TYR A 192      38.816  29.937  27.634  1.00 50.68           C  
+ATOM   1344  CA  LYS A 193      41.916  31.388  29.230  1.00 51.00           C  
+ATOM   1353  CA  PHE A 194      42.322  30.967  32.956  1.00 52.09           C  
+ATOM   1364  CA  ASN A 195      43.672  34.234  34.312  1.00 56.46           C  
+ATOM   1372  CA  GLY A 196      42.616  34.078  37.969  1.00 57.17           C  
+ATOM   1376  CA  LEU A 197      43.874  31.920  40.843  1.00 57.92           C  
+ATOM   1384  CA  GLY A 198      43.549  28.151  41.086  1.00 56.67           C  
+ATOM   1388  CA  TRP A 199      44.258  26.886  44.592  1.00 51.55           C  
+ATOM   1402  CA  LEU A 200      44.411  23.170  45.379  1.00 49.17           C  
+ATOM   1410  CA  PHE A 201      44.558  21.335  48.709  1.00 48.60           C  
+ATOM   1421  CA  LEU A 202      45.122  17.570  48.598  1.00 45.34           C  
+ATOM   1429  CA  GLY A 203      44.885  15.480  51.742  1.00 48.55           C  
+ATOM   1433  CA  VAL A 204      46.225  11.936  51.755  1.00 50.23           C  
+ATOM   1440  CA  PRO A 205      47.942   9.740  54.365  1.00 51.51           C  
+ATOM   1447  CA  THR A 206      51.284   9.148  52.648  1.00 50.21           C  
+ATOM   1454  CA  SER A 207      53.551  10.483  49.894  1.00 49.38           C  
+ATOM   1460  CA  SER A 208      53.267   7.061  48.259  1.00 43.49           C  
+ATOM   1466  CA  SER A 209      49.588   8.049  48.093  1.00 42.57           C  
+ATOM   1472  CA  LEU A 210      49.990  11.424  46.364  1.00 42.65           C  
+ATOM   1480  CA  LEU A 211      48.121  11.446  43.035  1.00 39.33           C  
+ATOM   1488  CA  TYR A 212      49.516  13.214  39.935  1.00 40.89           C  
+ATOM   1500  CA  LYS A 213      52.128  15.234  41.873  1.00 45.88           C  
+ATOM   1509  CA  GLU A 214      54.518  15.406  38.899  1.00 53.22           C  
+ATOM   1518  CA  GLU A 215      51.680  16.911  36.889  1.00 55.16           C  
+ATOM   1527  CA  PHE A 216      50.757  19.475  39.514  1.00 60.55           C  
+ATOM   1538  CA  GLY A 217      54.488  20.153  39.524  1.00 66.64           C  
+ATOM   1542  CA  LYS A 218      54.575  21.110  35.850  1.00 68.86           C  
+ATOM   1551  CA  MET A 219      51.398  23.159  36.265  1.00 66.97           C  
+ATOM   1559  CA  LYS A 220      53.138  25.090  39.061  1.00 65.97           C  
+ATOM   1568  CA  GLU A 221      55.654  26.250  36.459  1.00 70.02           C  
+ATOM   1577  CA  ARG A 222      53.584  26.507  33.294  1.00 73.48           C  
+ATOM   1588  CA  ALA A 223      52.005  29.449  35.175  1.00 76.21           C  
+ATOM   1593  CA  PRO A 224      53.272  29.877  38.804  1.00 79.25           C  
+ATOM   1600  CA  GLU A 225      51.296  33.124  39.020  1.00 81.84           C  
+ATOM   1609  CA  ASN A 226      47.873  31.528  38.622  1.00 78.84           C  
+ATOM   1617  CA  PHE A 227      48.418  28.176  40.350  1.00 75.28           C  
+ATOM   1628  CA  ARG A 228      49.090  27.305  43.996  1.00 72.05           C  
+ATOM   1639  CA  VAL A 229      49.165  23.724  45.323  1.00 68.82           C  
+ATOM   1646  CA  ASP A 230      49.258  22.581  48.958  1.00 66.54           C  
+ATOM   1654  CA  TYR A 231      49.605  18.943  49.968  1.00 60.31           C  
+ATOM   1666  CA  ALA A 232      48.551  17.560  53.332  1.00 57.39           C  
+ATOM   1671  CA  VAL A 233      50.260  14.228  53.945  1.00 57.14           C  
+ATOM   1678  CA  SER A 234      48.465  13.579  57.244  1.00 60.81           C  
+ATOM   1684  CA  ARG A 235      50.959  11.010  58.514  1.00 60.74           C  
+ATOM   1695  CA  GLU A 236      54.268  12.594  57.481  1.00 59.17           C  
+ATOM   1704  CA  GLN A 237      53.494  16.197  58.450  1.00 59.62           C  
+ATOM   1713  CA  THR A 238      52.590  18.236  61.521  1.00 63.18           C  
+ATOM   1720  CA  ASN A 239      52.019  21.937  62.188  1.00 66.71           C  
+ATOM   1728  CA  ALA A 240      52.096  23.767  65.537  1.00 70.06           C  
+ATOM   1733  CA  ALA A 241      51.302  21.400  68.410  1.00 72.44           C  
+ATOM   1738  CA  GLY A 242      52.383  18.324  66.438  1.00 72.38           C  
+ATOM   1742  CA  GLU A 243      48.826  18.169  65.110  1.00 69.71           C  
+ATOM   1751  CA  ARG A 244      48.674  15.776  62.148  1.00 67.21           C  
+ATOM   1762  CA  MET A 245      48.712  17.796  58.933  1.00 64.20           C  
+ATOM   1770  CA  TYR A 246      45.246  17.082  57.556  1.00 60.65           C  
+ATOM   1782  CA  ILE A 247      43.617  18.437  54.409  1.00 62.98           C  
+ATOM   1790  CA  GLN A 248      42.035  21.001  56.761  1.00 64.64           C  
+ATOM   1799  CA  THR A 249      45.057  21.461  59.009  1.00 63.37           C  
+ATOM   1806  CA  ARG A 250      46.891  22.664  55.903  1.00 62.47           C  
+ATOM   1817  CA  MET A 251      44.123  25.201  55.251  1.00 63.35           C  
+ATOM   1825  CA  ALA A 252      44.571  26.305  58.854  1.00 65.73           C  
+ATOM   1830  CA  GLU A 253      47.973  27.809  58.076  1.00 65.97           C  
+ATOM   1839  CA  TYR A 254      46.267  30.063  55.517  1.00 65.83           C  
+ATOM   1851  CA  LYS A 255      42.991  30.559  57.379  1.00 70.30           C  
+ATOM   1860  CA  GLU A 256      43.578  34.326  57.320  1.00 73.73           C  
+ATOM   1869  CA  GLU A 257      44.189  34.738  53.593  1.00 71.52           C  
+ATOM   1878  CA  LEU A 258      41.459  32.202  52.893  1.00 73.38           C  
+ATOM   1886  CA  TRP A 259      38.790  34.074  54.853  1.00 76.72           C  
+ATOM   1900  CA  GLU A 260      39.721  37.275  53.006  1.00 78.61           C  
+ATOM   1909  CA  LEU A 261      38.580  35.553  49.815  1.00 75.71           C  
+ATOM   1917  CA  LEU A 262      35.391  33.881  51.047  1.00 73.74           C  
+ATOM   1925  CA  LYS A 263      33.562  37.165  50.535  1.00 73.64           C  
+ATOM   1934  CA  LYS A 264      34.299  38.143  46.954  1.00 72.48           C  
+ATOM   1943  CA  ASP A 265      31.954  37.554  43.993  1.00 69.65           C  
+ATOM   1951  CA  ASN A 266      34.660  35.649  42.106  1.00 65.06           C  
+ATOM   1959  CA  THR A 267      35.835  33.117  44.683  1.00 58.24           C  
+ATOM   1966  CA  TYR A 268      34.459  29.646  43.909  1.00 51.04           C  
+ATOM   1978  CA  VAL A 269      35.192  26.827  46.382  1.00 44.95           C  
+ATOM   1985  CA  TYR A 270      35.012  23.150  45.368  1.00 44.96           C  
+ATOM   1997  CA  MET A 271      35.162  20.122  47.656  1.00 41.72           C  
+ATOM   2005  CA  CYS A 272      35.314  16.468  46.632  1.00 37.19           C  
+ATOM   2011  CA  GLY A 273      36.343  13.080  47.951  1.00 37.65           C  
+ATOM   2015  CA  LEU A 274      36.040  10.886  51.020  1.00 39.39           C  
+ATOM   2023  CA  LYS A 275      33.076  12.283  52.955  1.00 44.86           C  
+ATOM   2032  CA  GLY A 276      34.322  13.183  56.400  1.00 49.16           C  
+ATOM   2036  CA  MET A 277      36.932  15.608  55.168  1.00 53.30           C  
+ATOM   2044  CA  GLU A 278      33.917  17.921  55.165  1.00 56.74           C  
+ATOM   2053  CA  LYS A 279      33.531  18.089  58.947  1.00 59.30           C  
+ATOM   2062  CA  GLY A 280      36.982  19.413  59.776  1.00 58.94           C  
+ATOM   2066  CA  ILE A 281      36.705  22.048  57.063  1.00 61.43           C  
+ATOM   2074  CA  ASP A 282      33.453  23.402  58.515  1.00 67.06           C  
+ATOM   2082  CA  ASP A 283      35.050  23.189  61.972  1.00 74.12           C  
+ATOM   2090  CA  ILE A 284      37.991  25.422  61.040  1.00 78.49           C  
+ATOM   2098  CA  MET A 285      35.456  27.566  59.201  1.00 82.25           C  
+ATOM   2106  CA  VAL A 286      32.941  27.959  62.027  1.00 83.44           C  
+ATOM   2113  CA  SER A 287      35.610  29.113  64.469  1.00 83.43           C  
+ATOM   2119  CA  LEU A 288      36.927  31.601  61.887  1.00 85.53           C  
+ATOM   2127  CA  ALA A 289      33.506  33.025  60.970  1.00 86.85           C  
+ATOM   2132  CA  GLU A 290      31.841  32.696  64.387  1.00 89.26           C  
+ATOM   2141  CA  LYS A 291      34.438  35.312  65.347  1.00 88.73           C  
+ATOM   2150  CA  ASP A 292      33.635  37.891  62.652  1.00 88.03           C  
+ATOM   2158  CA  GLY A 293      30.219  37.450  61.081  1.00 87.88           C  
+ATOM   2162  CA  ILE A 294      27.319  35.051  61.511  1.00 84.61           C  
+ATOM   2170  CA  ASP A 295      27.665  31.329  62.188  1.00 82.45           C  
+ATOM   2178  CA  TRP A 296      29.539  29.627  59.355  1.00 80.12           C  
+ATOM   2192  CA  PHE A 297      26.527  27.452  58.512  1.00 78.99           C  
+ATOM   2203  CA  ASP A 298      24.167  30.241  57.486  1.00 76.37           C  
+ATOM   2211  CA  TYR A 299      27.074  31.748  55.561  1.00 74.07           C  
+ATOM   2223  CA  LYS A 300      27.679  28.620  53.473  1.00 74.31           C  
+ATOM   2232  CA  LYS A 301      24.059  29.146  52.464  1.00 75.97           C  
+ATOM   2241  CA  GLN A 302      24.921  32.563  51.018  1.00 75.38           C  
+ATOM   2250  CA  LEU A 303      27.896  31.099  49.155  1.00 72.10           C  
+ATOM   2258  CA  LYS A 304      25.917  28.207  47.690  1.00 72.08           C  
+ATOM   2267  CA  ARG A 305      23.595  31.021  46.594  1.00 74.82           C  
+ATOM   2278  CA  GLY A 306      26.071  32.136  43.958  1.00 71.84           C  
+ATOM   2282  CA  ASP A 307      27.505  28.682  43.220  1.00 67.23           C  
+ATOM   2290  CA  GLN A 308      30.620  29.291  45.346  1.00 60.18           C  
+ATOM   2299  CA  TRP A 309      30.585  26.177  47.537  1.00 52.25           C  
+ATOM   2313  CA  ASN A 310      29.894  22.997  45.597  1.00 45.03           C  
+ATOM   2321  CA  VAL A 311      30.327  19.716  47.403  1.00 39.13           C  
+ATOM   2328  CA  GLU A 312      30.507  16.190  46.110  1.00 35.17           C  
+ATOM   2337  CA  VAL A 313      31.761  13.957  48.861  1.00 30.12           C  
+ATOM   2344  CA  TYR A 314      31.112  10.230  49.021  1.00 28.23           C  
+ATOM   2358  CA  ALA B   1       2.311  24.702  44.475  1.00 74.17           C  
+ATOM   2363  CA  THR B   2       3.590  24.207  48.055  1.00 74.76           C  
+ATOM   2370  CA  TYR B   3       3.069  20.876  49.837  1.00 73.52           C  
+ATOM   2382  CA  ASN B   4       3.748  19.874  53.435  1.00 75.75           C  
+ATOM   2390  CA  VAL B   5       6.618  17.399  53.868  1.00 75.95           C  
+ATOM   2397  CA  LYS B   6       7.769  15.523  56.983  1.00 77.70           C  
+ATOM   2406  CA  LEU B   7      11.351  14.325  57.458  1.00 78.91           C  
+ATOM   2414  CA  ILE B   8      11.807  11.511  59.985  1.00 81.00           C  
+ATOM   2422  CA  THR B   9      15.560  12.046  60.247  1.00 87.49           C  
+ATOM   2429  CA  PRO B  10      17.662   9.793  62.539  1.00 92.94           C  
+ATOM   2436  CA  GLU B  11      18.161  13.147  64.282  1.00 96.61           C  
+ATOM   2445  CA  GLY B  12      14.579  14.154  65.041  1.00 97.52           C  
+ATOM   2449  CA  GLU B  13      11.602  14.823  62.748  1.00 96.90           C  
+ATOM   2458  CA  VAL B  14      11.547  17.892  60.480  1.00 96.63           C  
+ATOM   2465  CA  GLU B  15       8.340  19.701  59.440  1.00 94.86           C  
+ATOM   2474  CA  LEU B  16       9.471  21.479  56.254  1.00 91.55           C  
+ATOM   2482  CA  GLN B  17       7.281  23.141  53.598  1.00 89.75           C  
+ATOM   2491  CA  VAL B  18       8.485  22.069  50.145  1.00 87.92           C  
+ATOM   2498  CA  PRO B  19       6.906  23.558  46.964  1.00 86.35           C  
+ATOM   2505  CA  ASP B  20       5.990  21.744  43.717  1.00 86.29           C  
+ATOM   2513  CA  ASP B  21       8.578  22.751  41.083  1.00 83.78           C  
+ATOM   2521  CA  VAL B  22      11.385  22.401  43.639  1.00 80.98           C  
+ATOM   2528  CA  TYR B  23      13.439  19.280  44.481  1.00 77.04           C  
+ATOM   2540  CA  ILE B  24      13.212  18.196  48.120  1.00 76.45           C  
+ATOM   2548  CA  LEU B  25      16.959  18.133  48.851  1.00 75.15           C  
+ATOM   2556  CA  ASP B  26      17.154  21.745  47.689  1.00 75.80           C  
+ATOM   2564  CA  GLN B  27      14.616  22.906  50.280  1.00 76.31           C  
+ATOM   2573  CA  ALA B  28      16.562  20.957  52.914  1.00 78.86           C  
+ATOM   2578  CA  GLU B  29      19.698  23.011  52.198  1.00 81.51           C  
+ATOM   2587  CA  GLU B  30      17.491  26.106  52.510  1.00 83.25           C  
+ATOM   2596  CA  ASP B  31      15.857  25.933  55.935  1.00 81.92           C  
+ATOM   2604  CA  GLY B  32      19.280  24.859  57.151  1.00 79.08           C  
+ATOM   2608  CA  ILE B  33      18.621  21.130  57.157  1.00 76.93           C  
+ATOM   2616  CA  ASP B  34      21.528  18.731  56.618  1.00 73.53           C  
+ATOM   2624  CA  LEU B  35      20.738  15.738  54.421  1.00 67.74           C  
+ATOM   2632  CA  PRO B  36      23.138  13.391  52.547  1.00 65.90           C  
+ATOM   2639  CA  TYR B  37      23.916  14.226  48.912  1.00 64.85           C  
+ATOM   2651  CA  SER B  38      26.659  13.373  46.412  1.00 62.58           C  
+ATOM   2657  CA  CYS B  39      26.193  13.603  42.652  1.00 60.99           C  
+ATOM   2663  CA  ARG B  40      22.908  15.441  43.251  1.00 58.35           C  
+ATOM   2674  CA  ALA B  41      21.699  14.108  39.886  1.00 56.38           C  
+ATOM   2679  CA  GLY B  42      19.886  10.955  40.991  1.00 56.66           C  
+ATOM   2683  CA  SER B  43      22.465   8.336  40.010  1.00 58.55           C  
+ATOM   2689  CA  CYS B  44      23.548   7.052  43.447  1.00 56.27           C  
+ATOM   2695  CA  SER B  45      22.057   5.987  46.791  1.00 58.20           C  
+ATOM   2701  CA  SER B  46      23.574   8.773  48.890  1.00 59.13           C  
+ATOM   2707  CA  CYS B  47      20.220  10.475  49.517  1.00 65.64           C  
+ATOM   2713  CA  ALA B  48      17.911   7.436  49.610  1.00 69.71           C  
+ATOM   2718  CA  GLY B  49      14.733   7.635  51.681  1.00 73.09           C  
+ATOM   2722  CA  LYS B  50      11.712   5.340  52.183  1.00 73.77           C  
+ATOM   2731  CA  VAL B  51       8.551   7.412  51.568  1.00 76.51           C  
+ATOM   2738  CA  VAL B  52       5.237   7.081  53.429  1.00 78.85           C  
+ATOM   2745  CA  SER B  53       2.180   9.376  53.647  1.00 79.57           C  
+ATOM   2751  CA  GLY B  54       2.118  10.991  50.218  1.00 76.32           C  
+ATOM   2755  CA  SER B  55       3.577  10.944  46.726  1.00 76.31           C  
+ATOM   2761  CA  VAL B  56       6.436  12.592  44.828  1.00 77.50           C  
+ATOM   2768  CA  ASP B  57       7.691  12.960  41.243  1.00 76.83           C  
+ATOM   2776  CA  GLN B  58      11.150  11.483  40.555  1.00 76.66           C  
+ATOM   2785  CA  SER B  59      10.976  10.827  36.792  1.00 80.19           C  
+ATOM   2791  CA  ASP B  60      14.688  11.644  36.510  1.00 83.51           C  
+ATOM   2799  CA  GLN B  61      15.175   8.137  37.916  1.00 85.74           C  
+ATOM   2808  CA  SER B  62      18.644   7.080  36.699  1.00 85.85           C  
+ATOM   2814  CA  TYR B  63      19.324   5.049  39.852  1.00 84.49           C  
+ATOM   2826  CA  LEU B  64      15.683   4.296  40.629  1.00 89.06           C  
+ATOM   2834  CA  ASP B  65      15.356   0.604  39.742  1.00 92.21           C  
+ATOM   2842  CA  ASP B  66      12.421  -1.791  39.331  1.00 92.35           C  
+ATOM   2850  CA  GLY B  67      10.747  -2.542  42.659  1.00 89.07           C  
+ATOM   2854  CA  GLN B  68      12.336   0.632  44.010  1.00 88.41           C  
+ATOM   2863  CA  ILE B  69       9.483   2.828  42.742  1.00 86.11           C  
+ATOM   2871  CA  ALA B  70       7.060   0.441  44.446  1.00 81.10           C  
+ATOM   2876  CA  ASP B  71       8.985  -0.310  47.648  1.00 76.82           C  
+ATOM   2884  CA  GLY B  72       8.653   3.423  48.186  1.00 73.00           C  
+ATOM   2888  CA  TRP B  73      12.342   4.386  48.095  1.00 67.93           C  
+ATOM   2902  CA  VAL B  74      13.052   8.007  47.136  1.00 63.84           C  
+ATOM   2909  CA  LEU B  75      16.093   9.940  45.892  1.00 58.37           C  
+ATOM   2917  CA  THR B  76      15.524  13.198  47.826  1.00 55.82           C  
+ATOM   2924  CA  CYS B  77      17.941  15.109  45.556  1.00 58.23           C  
+ATOM   2930  CA  HIS B  78      15.777  14.389  42.513  1.00 64.55           C  
+ATOM   2940  CA  ALA B  79      12.108  14.429  43.512  1.00 68.40           C  
+ATOM   2945  CA  TYR B  80       9.442  17.152  43.581  1.00 69.69           C  
+ATOM   2957  CA  PRO B  81       6.414  16.584  45.842  1.00 71.39           C  
+ATOM   2964  CA  THR B  82       3.015  16.014  44.179  1.00 73.67           C  
+ATOM   2971  CA  SER B  83       1.278  15.771  47.557  1.00 76.90           C  
+ATOM   2977  CA  ASP B  84       1.940  16.119  51.289  1.00 75.20           C  
+ATOM   2985  CA  VAL B  85       4.840  13.765  52.050  1.00 71.37           C  
+ATOM   2992  CA  VAL B  86       6.363  11.824  54.956  1.00 70.12           C  
+ATOM   2999  CA  ILE B  87       9.770  10.300  54.188  1.00 74.18           C  
+ATOM   3007  CA  GLU B  88      12.211   8.403  56.410  1.00 78.53           C  
+ATOM   3012  CA  THR B  89      15.541   9.964  55.407  1.00 79.79           C  
+ATOM   3019  CA  HIS B  90      19.062   8.538  55.881  1.00 79.40           C  
+ATOM   3029  CA  LYS B  91      17.584   5.099  55.099  1.00 84.52           C  
+ATOM   3038  CA  GLU B  92      20.016   2.596  53.549  1.00 91.64           C  
+ATOM   3047  CA  GLU B  93      20.192  -0.858  51.981  1.00 98.97           C  
+ATOM   3056  CA  GLU B  94      23.321  -2.924  51.298  1.00106.32           C  
+ATOM   3065  CA  LEU B  95      22.104  -6.552  51.453  1.00111.32           C  
+ATOM   3073  CA  THR B  96      18.778  -8.417  51.866  1.00116.01           C  
+ATOM   3080  CA  GLY B  97      18.877 -11.302  49.394  1.00116.63           C  
+ATOM   3084  CA  ALA B  98      22.056  -9.833  47.910  1.00116.02           C  
+ATOM   3091  CA  GLU C  19      26.080  -2.480  15.294  1.00 73.96           C  
+ATOM   3100  CA  SER C  20      23.405   0.198  14.956  1.00 67.27           C  
+ATOM   3106  CA  LYS C  21      22.937   3.927  15.380  1.00 59.27           C  
+ATOM   3115  CA  LYS C  22      19.198   3.481  15.874  1.00 58.42           C  
+ATOM   3124  CA  GLN C  23      17.251   3.141  19.137  1.00 59.89           C  
+ATOM   3133  CA  GLU C  24      17.931  -0.276  20.610  1.00 62.66           C  
+ATOM   3142  CA  GLU C  25      16.850  -0.453  24.226  1.00 64.27           C  
+ATOM   3151  CA  GLY C  26      13.211  -0.817  25.116  1.00 61.78           C  
+ATOM   3155  CA  VAL C  27      12.703  -2.073  21.582  1.00 58.37           C  
+ATOM   3162  CA  VAL C  28      10.779  -5.347  21.485  1.00 54.17           C  
+ATOM   3169  CA  THR C  29       9.481  -7.339  18.549  1.00 52.79           C  
+ATOM   3176  CA  ASN C  30       6.670  -9.775  17.786  1.00 51.30           C  
+ATOM   3184  CA  LEU C  31       4.863  -9.997  21.112  1.00 51.05           C  
+ATOM   3192  CA  TYR C  32       1.766 -11.297  19.327  1.00 50.51           C  
+ATOM   3204  CA  LYS C  33       1.373 -13.532  16.266  1.00 49.49           C  
+ATOM   3213  CA  PRO C  34      -1.609 -14.150  13.925  1.00 50.98           C  
+ATOM   3220  CA  LYS C  35      -2.450 -17.248  16.011  1.00 55.46           C  
+ATOM   3229  CA  GLU C  36      -2.977 -15.400  19.288  1.00 53.79           C  
+ATOM   3238  CA  PRO C  37      -3.251 -11.638  18.607  1.00 49.32           C  
+ATOM   3245  CA  TYR C  38      -3.674  -9.050  21.318  1.00 46.76           C  
+ATOM   3257  CA  VAL C  39      -7.276  -7.947  21.418  1.00 43.68           C  
+ATOM   3264  CA  GLY C  40      -7.415  -4.194  21.922  1.00 41.62           C  
+ATOM   3268  CA  ARG C  41     -10.273  -1.719  21.954  1.00 40.07           C  
+ATOM   3279  CA  CYS C  42     -11.026   1.064  19.477  1.00 36.37           C  
+ATOM   3285  CA  LEU C  43     -11.330   4.206  21.583  1.00 31.09           C  
+ATOM   3293  CA  LEU C  44     -11.337   6.671  18.673  1.00 28.46           C  
+ATOM   3301  CA  ASN C  45     -11.792   6.653  14.923  1.00 26.74           C  
+ATOM   3309  CA  THR C  46     -11.954   9.920  13.013  1.00 25.29           C  
+ATOM   3316  CA  LYS C  47     -11.667  10.775   9.352  1.00 21.50           C  
+ATOM   3325  CA  ILE C  48      -8.895  13.355   9.121  1.00 19.33           C  
+ATOM   3333  CA  THR C  49      -9.125  14.281   5.442  1.00 20.38           C  
+ATOM   3340  CA  GLY C  50     -11.630  16.676   3.855  1.00 20.12           C  
+ATOM   3344  CA  ASP C  51     -14.895  15.345   2.412  1.00 21.75           C  
+ATOM   3352  CA  ASP C  52     -13.889  16.693  -0.999  1.00 21.19           C  
+ATOM   3360  CA  ALA C  53     -10.651  14.683  -0.749  1.00 21.06           C  
+ATOM   3365  CA  PRO C  54     -10.036  11.974  -3.413  1.00 21.39           C  
+ATOM   3372  CA  GLY C  55      -9.982   9.067  -0.977  1.00 24.42           C  
+ATOM   3376  CA  GLU C  56     -10.374   9.298   2.857  1.00 22.08           C  
+ATOM   3385  CA  THR C  57      -7.723   8.611   5.517  1.00 20.31           C  
+ATOM   3392  CA  TRP C  58      -8.541   7.849   9.162  1.00 19.33           C  
+ATOM   3406  CA  HIS C  59      -6.758   8.520  12.438  1.00 22.68           C  
+ATOM   3416  CA  MET C  60      -7.645   5.951  15.108  1.00 27.16           C  
+ATOM   3424  CA  VAL C  61      -6.672   5.224  18.723  1.00 29.32           C  
+ATOM   3431  CA  PHE C  62      -6.669   1.704  20.220  1.00 34.23           C  
+ATOM   3442  CA  SER C  63      -6.102   0.643  23.847  1.00 37.05           C  
+ATOM   3448  CA  THR C  64      -3.096  -1.517  24.798  1.00 41.86           C  
+ATOM   3455  CA  GLU C  65      -3.169  -1.652  28.621  1.00 48.33           C  
+ATOM   3464  CA  GLY C  66       0.537  -0.885  28.318  1.00 52.45           C  
+ATOM   3468  CA  LYS C  67       0.955  -4.385  26.891  1.00 54.14           C  
+ATOM   3477  CA  ILE C  68       2.429  -3.211  23.570  1.00 51.52           C  
+ATOM   3485  CA  PRO C  69       5.602  -1.279  24.487  1.00 49.85           C  
+ATOM   3492  CA  TYR C  70       6.523  -0.180  20.967  1.00 44.48           C  
+ATOM   3504  CA  ARG C  71       9.185   2.353  19.993  1.00 40.96           C  
+ATOM   3515  CA  GLU C  72       8.727   5.317  17.688  1.00 33.49           C  
+ATOM   3524  CA  GLY C  73       8.913   3.876  14.164  1.00 30.16           C  
+ATOM   3528  CA  GLN C  74       7.423   0.399  14.427  1.00 31.26           C  
+ATOM   3537  CA  SER C  75       4.187  -0.913  12.966  1.00 33.65           C  
+ATOM   3543  CA  ILE C  76       1.454  -3.212  14.278  1.00 33.75           C  
+ATOM   3551  CA  GLY C  77      -0.295  -5.923  12.356  1.00 34.32           C  
+ATOM   3555  CA  VAL C  78      -4.060  -6.111  12.164  1.00 36.67           C  
+ATOM   3562  CA  ILE C  79      -6.137  -9.230  11.507  1.00 41.91           C  
+ATOM   3570  CA  ALA C  80      -9.427  -8.086  10.024  1.00 44.06           C  
+ATOM   3575  CA  ASP C  81     -12.530  -9.927  11.224  1.00 47.03           C  
+ATOM   3583  CA  GLY C  82     -13.972 -12.487   8.829  1.00 53.52           C  
+ATOM   3587  CA  VAL C  83     -12.521 -14.951   6.324  1.00 62.57           C  
+ATOM   3594  CA  ASP C  84     -11.856 -14.200   2.630  1.00 71.97           C  
+ATOM   3602  CA  LYS C  85     -12.935 -17.403   0.861  1.00 76.86           C  
+ATOM   3611  CA  ASN C  86     -13.690 -18.960   4.253  1.00 76.52           C  
+ATOM   3619  CA  GLY C  87     -10.006 -19.837   4.066  1.00 76.22           C  
+ATOM   3623  CA  LYS C  88      -8.802 -19.138   7.616  1.00 71.60           C  
+ATOM   3632  CA  PRO C  89      -8.651 -15.577   8.944  1.00 64.14           C  
+ATOM   3639  CA  HIS C  90      -7.547 -12.649   6.805  1.00 52.35           C  
+ATOM   3649  CA  LYS C  91      -3.753 -12.529   6.474  1.00 46.81           C  
+ATOM   3658  CA  VAL C  92      -2.180  -9.868   8.686  1.00 43.48           C  
+ATOM   3665  CA  ARG C  93      -1.491  -6.414   7.232  1.00 36.99           C  
+ATOM   3676  CA  LEU C  94       0.983  -3.882   8.601  1.00 32.95           C  
+ATOM   3684  CA  TYR C  95       0.340  -0.239   9.510  1.00 24.84           C  
+ATOM   3696  CA  SER C  96       3.003   2.101  10.803  1.00 23.32           C  
+ATOM   3702  CA  ILE C  97       2.244   3.502  14.236  1.00 24.12           C  
+ATOM   3710  CA  ALA C  98       1.243   7.179  13.932  1.00 22.32           C  
+ATOM   3715  CA  SER C  99       1.572   7.636  17.676  1.00 25.69           C  
+ATOM   3721  CA  SER C 100       4.752   7.924  19.726  1.00 28.83           C  
+ATOM   3727  CA  ALA C 101       5.741   5.521  22.508  1.00 35.61           C  
+ATOM   3732  CA  ILE C 102       3.906   7.635  25.079  1.00 38.39           C  
+ATOM   3740  CA  GLY C 103       0.899   7.826  22.742  1.00 31.93           C  
+ATOM   3744  CA  ASP C 104      -1.803  10.384  21.986  1.00 28.77           C  
+ATOM   3752  CA  PHE C 105      -3.050  10.293  25.607  1.00 37.05           C  
+ATOM   3763  CA  GLY C 106       0.503  10.389  26.967  1.00 39.36           C  
+ATOM   3767  CA  ASP C 107      -0.221   7.437  29.266  1.00 41.44           C  
+ATOM   3775  CA  SER C 108       1.566   4.766  27.217  1.00 42.18           C  
+ATOM   3781  CA  LYS C 109      -1.747   2.877  27.156  1.00 42.45           C  
+ATOM   3790  CA  THR C 110      -2.698   3.586  23.515  1.00 38.10           C  
+ATOM   3797  CA  VAL C 111      -1.603   2.971  19.906  1.00 32.79           C  
+ATOM   3804  CA  SER C 112      -2.671   5.020  16.872  1.00 29.60           C  
+ATOM   3810  CA  LEU C 113      -2.713   4.324  13.126  1.00 25.68           C  
+ATOM   3818  CA  CYS C 114      -3.142   6.498   9.999  1.00 24.23           C  
+ATOM   3824  CA  VAL C 115      -5.345   4.496   7.641  1.00 22.80           C  
+ATOM   3831  CA  LYS C 116      -6.221   5.196   4.015  1.00 22.11           C  
+ATOM   3840  CA  ARG C 117      -9.458   3.521   2.955  1.00 25.68           C  
+ATOM   3851  CA  LEU C 118      -8.447   1.440  -0.100  1.00 28.80           C  
+ATOM   3859  CA  ILE C 119     -11.140   1.661  -2.792  1.00 31.75           C  
+ATOM   3867  CA  TYR C 120     -10.086   0.716  -6.312  1.00 32.93           C  
+ATOM   3879  CA  THR C 121     -11.388  -0.733  -9.598  1.00 36.84           C  
+ATOM   3886  CA  ASN C 122     -10.258  -4.257 -10.546  1.00 36.90           C  
+ATOM   3894  CA  ASP C 123      -9.574  -5.562 -14.056  1.00 45.45           C  
+ATOM   3902  CA  ALA C 124     -13.196  -6.758 -14.269  1.00 44.66           C  
+ATOM   3907  CA  GLY C 125     -14.207  -3.102 -14.023  1.00 45.49           C  
+ATOM   3911  CA  GLU C 126     -16.059  -3.511 -10.722  1.00 45.54           C  
+ATOM   3920  CA  ILE C 127     -15.507  -1.321  -7.638  1.00 39.70           C  
+ATOM   3928  CA  VAL C 128     -13.846  -3.171  -4.762  1.00 38.09           C  
+ATOM   3935  CA  LYS C 129     -12.759  -2.512  -1.198  1.00 33.77           C  
+ATOM   3944  CA  GLY C 130      -9.566  -3.363   0.599  1.00 31.98           C  
+ATOM   3948  CA  VAL C 131     -10.443  -5.797   3.385  1.00 33.16           C  
+ATOM   3955  CA  CYS C 132      -8.241  -4.645   6.257  1.00 29.97           C  
+ATOM   3961  CA  SER C 133      -8.238  -0.898   5.607  1.00 30.67           C  
+ATOM   3967  CA  ASN C 134     -12.022  -0.902   5.268  1.00 30.35           C  
+ATOM   3975  CA  PHE C 135     -12.375  -2.946   8.424  1.00 29.86           C  
+ATOM   3986  CA  LEU C 136     -10.223  -0.334  10.195  1.00 29.42           C  
+ATOM   3994  CA  CYS C 137     -11.779   2.834   8.813  1.00 32.27           C  
+ATOM   4000  CA  ASP C 138     -15.116   1.280   9.724  1.00 34.29           C  
+ATOM   4008  CA  LEU C 139     -14.287   0.699  13.399  1.00 37.51           C  
+ATOM   4016  CA  GLN C 140     -16.635   2.170  16.028  1.00 43.76           C  
+ATOM   4025  CA  PRO C 141     -15.630   3.032  19.581  1.00 42.77           C  
+ATOM   4032  CA  GLY C 142     -16.082  -0.210  21.478  1.00 42.83           C  
+ATOM   4036  CA  ASP C 143     -15.117  -2.625  18.696  1.00 40.91           C  
+ATOM   4044  CA  ASN C 144     -12.182  -4.947  19.288  1.00 45.66           C  
+ATOM   4052  CA  VAL C 145      -9.056  -5.146  17.145  1.00 46.95           C  
+ATOM   4059  CA  GLN C 146      -6.707  -8.107  16.606  1.00 48.69           C  
+ATOM   4068  CA  ILE C 147      -3.249  -6.538  17.123  1.00 46.84           C  
+ATOM   4076  CA  THR C 148      -0.010  -8.392  16.264  1.00 46.26           C  
+ATOM   4083  CA  GLY C 149       3.543  -7.117  16.634  1.00 45.60           C  
+ATOM   4087  CA  PRO C 150       5.248  -4.818  17.394  1.00 44.97           C  
+ATOM   4094  CA  VAL C 151       7.423  -5.293  14.321  1.00 44.50           C  
+ATOM   4101  CA  GLY C 152      10.289  -3.716  12.438  1.00 45.33           C  
+ATOM   4105  CA  LYS C 153      13.599  -2.161  13.435  1.00 48.64           C  
+ATOM   4114  CA  GLU C 154      14.166  -0.437  10.074  1.00 48.20           C  
+ATOM   4123  CA  MET C 155      12.437   2.888  10.737  1.00 41.77           C  
+ATOM   4131  CA  LEU C 156      13.839   3.081  14.267  1.00 38.27           C  
+ATOM   4139  CA  MET C 157      15.076   6.540  15.308  1.00 34.29           C  
+ATOM   4147  CA  PRO C 158      18.782   7.419  15.339  1.00 34.05           C  
+ATOM   4154  CA  LYS C 159      20.262   7.521  18.845  1.00 35.82           C  
+ATOM   4163  CA  ASP C 160      22.076  10.792  18.273  1.00 35.95           C  
+ATOM   4171  CA  PRO C 161      19.683  13.401  19.809  1.00 35.63           C  
+ATOM   4178  CA  ASN C 162      21.563  15.948  17.758  1.00 33.92           C  
+ATOM   4186  CA  ALA C 163      21.028  14.172  14.487  1.00 30.82           C  
+ATOM   4191  CA  THR C 164      19.693  15.722  11.305  1.00 25.18           C  
+ATOM   4198  CA  ILE C 165      16.617  13.601  10.636  1.00 19.91           C  
+ATOM   4206  CA  ILE C 166      15.351  13.978   7.060  1.00 13.76           C  
+ATOM   4214  CA  MET C 167      11.843  12.550   6.703  1.00 14.98           C  
+ATOM   4222  CA  LEU C 168      10.385  11.831   3.251  1.00 16.64           C  
+ATOM   4230  CA  ALA C 169       6.747  10.808   3.007  1.00 15.85           C  
+ATOM   4235  CA  THR C 170       3.765  10.346   0.737  1.00 14.23           C  
+ATOM   4242  CA  GLY C 171       0.255   9.724   2.035  1.00 13.78           C  
+ATOM   4246  CA  THR C 172      -0.103   7.560   5.139  1.00 17.62           C  
+ATOM   4253  CA  GLY C 173       3.646   7.343   4.821  1.00 17.20           C  
+ATOM   4257  CA  ILE C 174       3.469  10.213   7.270  1.00 15.91           C  
+ATOM   4265  CA  ALA C 175       2.586   7.783  10.110  1.00 15.63           C  
+ATOM   4270  CA  PRO C 176       6.023   6.933  11.582  1.00 17.04           C  
+ATOM   4277  CA  PHE C 177       7.215  10.514  11.327  1.00 18.21           C  
+ATOM   4288  CA  ARG C 178       4.268  11.745  13.359  1.00 22.35           C  
+ATOM   4299  CA  SER C 179       5.563   9.289  15.983  1.00 25.22           C  
+ATOM   4305  CA  PHE C 180       9.139  10.593  15.614  1.00 25.98           C  
+ATOM   4316  CA  LEU C 181       7.925  14.180  15.767  1.00 29.12           C  
+ATOM   4324  CA  TRP C 182       5.625  13.641  18.714  1.00 31.35           C  
+ATOM   4338  CA  LYS C 183       8.488  12.385  20.871  1.00 30.92           C  
+ATOM   4347  CA  MET C 184      10.841  15.050  19.503  1.00 24.85           C  
+ATOM   4355  CA  PHE C 185       8.741  18.202  20.114  1.00 22.97           C  
+ATOM   4366  CA  PHE C 186       5.604  17.337  22.076  1.00 27.77           C  
+ATOM   4377  CA  GLU C 187       7.117  15.432  25.009  1.00 37.71           C  
+ATOM   4386  CA  LYS C 188       9.542  15.977  27.878  1.00 53.59           C  
+ATOM   4395  CA  HIS C 189      12.355  13.416  28.180  1.00 63.67           C  
+ATOM   4405  CA  ASP C 190      15.318  13.181  30.569  1.00 66.93           C  
+ATOM   4413  CA  ASP C 191      17.480  11.106  28.238  1.00 59.79           C  
+ATOM   4421  CA  TYR C 192      16.190  12.725  25.047  1.00 51.96           C  
+ATOM   4433  CA  LYS C 193      16.700  16.406  24.324  1.00 47.01           C  
+ATOM   4442  CA  PHE C 194      16.580  16.471  20.530  1.00 39.85           C  
+ATOM   4453  CA  ASN C 195      18.572  19.494  19.409  1.00 37.52           C  
+ATOM   4461  CA  GLY C 196      19.361  18.548  15.845  1.00 32.08           C  
+ATOM   4465  CA  LEU C 197      17.310  19.266  12.766  1.00 28.26           C  
+ATOM   4473  CA  GLY C 198      14.051  17.526  11.928  1.00 25.05           C  
+ATOM   4477  CA  TRP C 199      13.211  18.137   8.269  1.00 19.81           C  
+ATOM   4491  CA  LEU C 200       9.908  16.742   7.059  1.00 13.86           C  
+ATOM   4499  CA  PHE C 201       8.855  16.521   3.429  1.00 14.83           C  
+ATOM   4510  CA  LEU C 202       5.288  15.361   2.717  1.00 16.12           C  
+ATOM   4518  CA  GLY C 203       3.701  14.731  -0.681  1.00 13.79           C  
+ATOM   4522  CA  VAL C 204      -0.051  14.414  -1.182  1.00 11.75           C  
+ATOM   4529  CA  PRO C 205      -2.113  15.264  -4.308  1.00 14.66           C  
+ATOM   4536  CA  THR C 206      -4.553  17.737  -2.778  1.00 16.37           C  
+ATOM   4543  CA  SER C 207      -4.756  20.169   0.120  1.00 18.01           C  
+ATOM   4549  CA  SER C 208      -7.780  18.225   1.280  1.00 17.59           C  
+ATOM   4555  CA  SER C 209      -5.452  15.198   1.550  1.00 16.19           C  
+ATOM   4561  CA  LEU C 210      -2.972  16.940   3.860  1.00 14.22           C  
+ATOM   4569  CA  LEU C 211      -2.255  14.980   7.059  1.00 14.43           C  
+ATOM   4577  CA  TYR C 212      -1.624  16.449  10.549  1.00 18.94           C  
+ATOM   4589  CA  LYS C 213      -0.818  19.896   9.150  1.00 22.61           C  
+ATOM   4598  CA  GLU C 214      -2.039  21.572  12.352  1.00 25.73           C  
+ATOM   4607  CA  GLU C 215       0.152  19.413  14.514  1.00 19.23           C  
+ATOM   4616  CA  PHE C 216       3.216  20.178  12.439  1.00 17.80           C  
+ATOM   4627  CA  GLY C 217       2.478  23.890  12.512  1.00 19.90           C  
+ATOM   4631  CA  LYS C 218       2.578  24.001  16.294  1.00 25.54           C  
+ATOM   4640  CA  MET C 219       5.810  22.021  16.188  1.00 26.79           C  
+ATOM   4648  CA  LYS C 220       7.224  24.606  13.819  1.00 31.85           C  
+ATOM   4657  CA  GLU C 221       6.071  27.341  16.219  1.00 38.62           C  
+ATOM   4666  CA  ARG C 222       7.760  25.760  19.233  1.00 39.10           C  
+ATOM   4677  CA  ALA C 223      11.124  24.971  17.668  1.00 35.43           C  
+ATOM   4682  CA  PRO C 224      11.696  27.100  14.528  1.00 32.99           C  
+ATOM   4689  CA  GLU C 225      15.425  26.331  14.360  1.00 33.87           C  
+ATOM   4698  CA  ASN C 226      15.038  22.591  14.986  1.00 30.46           C  
+ATOM   4706  CA  PHE C 227      12.088  21.755  12.732  1.00 24.98           C  
+ATOM   4717  CA  ARG C 228      11.351  22.384   9.075  1.00 19.87           C  
+ATOM   4728  CA  VAL C 229       8.435  21.010   7.118  1.00 14.21           C  
+ATOM   4735  CA  ASP C 230       7.739  21.452   3.398  1.00 12.26           C  
+ATOM   4743  CA  TYR C 231       4.627  20.147   1.722  1.00 14.42           C  
+ATOM   4755  CA  ALA C 232       4.334  19.003  -1.872  1.00  9.99           C  
+ATOM   4760  CA  VAL C 233       0.778  19.232  -3.168  1.00 10.49           C  
+ATOM   4767  CA  SER C 234       1.043  17.769  -6.694  1.00 19.00           C  
+ATOM   4773  CA  ARG C 235      -2.240  19.042  -8.206  1.00 23.13           C  
+ATOM   4784  CA  GLU C 236      -2.069  22.459  -6.578  1.00 17.58           C  
+ATOM   4793  CA  GLN C 237       1.546  23.511  -6.623  1.00 15.89           C  
+ATOM   4802  CA  THR C 238       4.202  24.018  -9.275  1.00 17.86           C  
+ATOM   4809  CA  ASN C 239       7.922  24.800  -9.182  1.00 15.15           C  
+ATOM   4817  CA  ALA C 240       9.558  27.791 -10.892  1.00 21.51           C  
+ATOM   4822  CA  ALA C 241       9.475  25.887 -14.174  1.00 24.05           C  
+ATOM   4827  CA  GLY C 242       5.741  25.110 -13.938  1.00 26.25           C  
+ATOM   4831  CA  GLU C 243       5.999  21.359 -13.153  1.00 25.92           C  
+ATOM   4840  CA  ARG C 244       3.679  19.536 -10.704  1.00 24.04           C  
+ATOM   4851  CA  MET C 245       5.076  19.643  -7.174  1.00 18.58           C  
+ATOM   4859  CA  TYR C 246       5.784  16.047  -6.100  1.00 14.16           C  
+ATOM   4871  CA  ILE C 247       7.910  15.343  -3.034  1.00 16.78           C  
+ATOM   4879  CA  GLN C 248      11.089  15.070  -5.120  1.00 18.72           C  
+ATOM   4888  CA  THR C 249      10.168  18.255  -6.921  1.00 20.93           C  
+ATOM   4895  CA  ARG C 250       9.962  20.031  -3.567  1.00 19.25           C  
+ATOM   4906  CA  MET C 251      13.275  18.471  -2.561  1.00 19.40           C  
+ATOM   4914  CA  ALA C 252      14.910  19.812  -5.760  1.00 20.48           C  
+ATOM   4919  CA  GLU C 253      14.456  23.418  -4.569  1.00 18.19           C  
+ATOM   4928  CA  TYR C 254      16.804  22.515  -1.673  1.00 17.80           C  
+ATOM   4940  CA  LYS C 255      19.038  20.415  -3.902  1.00 20.66           C  
+ATOM   4949  CA  GLU C 256      22.452  21.603  -2.682  1.00 16.05           C  
+ATOM   4958  CA  GLU C 257      21.544  21.914   0.993  1.00 15.89           C  
+ATOM   4967  CA  LEU C 258      20.377  18.297   0.919  1.00 20.74           C  
+ATOM   4975  CA  TRP C 259      23.388  16.939  -0.965  1.00 23.45           C  
+ATOM   4989  CA  GLU C 260      25.645  18.669   1.563  1.00 24.08           C  
+ATOM   4998  CA  LEU C 261      23.573  17.378   4.477  1.00 24.74           C  
+ATOM   5006  CA  LEU C 262      24.020  13.928   2.938  1.00 26.14           C  
+ATOM   5014  CA  LYS C 263      27.792  14.091   3.402  1.00 25.40           C  
+ATOM   5023  CA  LYS C 264      27.457  14.521   7.176  1.00 31.47           C  
+ATOM   5032  CA  ASP C 265      27.877  11.474   9.425  1.00 35.31           C  
+ATOM   5040  CA  ASN C 266      24.934  12.482  11.620  1.00 29.63           C  
+ATOM   5048  CA  THR C 267      22.321  12.795   8.832  1.00 28.00           C  
+ATOM   5055  CA  TYR C 268      19.556  10.160   8.808  1.00 27.00           C  
+ATOM   5067  CA  VAL C 269      17.143   9.903   5.884  1.00 24.65           C  
+ATOM   5074  CA  TYR C 270      13.890   8.016   6.276  1.00 23.37           C  
+ATOM   5086  CA  MET C 271      11.373   7.327   3.518  1.00 18.93           C  
+ATOM   5094  CA  CYS C 272       7.834   6.074   4.043  1.00 18.24           C  
+ATOM   5100  CA  GLY C 273       4.784   5.874   1.826  1.00 22.39           C  
+ATOM   5104  CA  LEU C 274       3.837   4.483  -1.568  1.00 26.95           C  
+ATOM   5112  CA  LYS C 275       6.305   2.384  -3.532  1.00 32.36           C  
+ATOM   5121  CA  GLY C 276       7.741   4.199  -6.514  1.00 37.46           C  
+ATOM   5125  CA  MET C 277       7.714   7.455  -4.608  1.00 28.76           C  
+ATOM   5133  CA  GLU C 278      11.430   6.639  -4.425  1.00 32.22           C  
+ATOM   5142  CA  LYS C 279      12.017   6.321  -8.153  1.00 29.94           C  
+ATOM   5151  CA  GLY C 280      11.317  10.057  -8.293  1.00 24.18           C  
+ATOM   5155  CA  ILE C 281      13.766  10.673  -5.460  1.00 23.68           C  
+ATOM   5163  CA  ASP C 282      16.431   8.365  -6.934  1.00 26.58           C  
+ATOM   5171  CA  ASP C 283      16.211  10.530 -10.054  1.00 28.70           C  
+ATOM   5179  CA  ILE C 284      17.089  13.937  -8.538  1.00 27.28           C  
+ATOM   5187  CA  MET C 285      19.706  12.222  -6.388  1.00 27.45           C  
+ATOM   5195  CA  VAL C 286      21.377  10.712  -9.470  1.00 30.74           C  
+ATOM   5202  CA  SER C 287      21.619  14.159 -11.061  1.00 32.14           C  
+ATOM   5208  CA  LEU C 288      23.240  15.463  -7.873  1.00 34.20           C  
+ATOM   5216  CA  ALA C 289      25.801  12.653  -7.874  1.00 40.16           C  
+ATOM   5221  CA  GLU C 290      26.837  12.825 -11.536  1.00 41.84           C  
+ATOM   5230  CA  LYS C 291      27.855  16.387 -10.793  1.00 43.17           C  
+ATOM   5239  CA  ASP C 292      30.299  15.115  -8.139  1.00 41.84           C  
+ATOM   5247  CA  GLY C 293      31.237  12.232 -10.420  1.00 46.12           C  
+ATOM   5251  CA  ILE C 294      30.053   9.669  -7.864  1.00 45.54           C  
+ATOM   5259  CA  ASP C 295      27.399   6.998  -8.480  1.00 41.14           C  
+ATOM   5267  CA  TRP C 296      24.222   7.605  -6.479  1.00 30.67           C  
+ATOM   5281  CA  PHE C 297      23.381   3.910  -6.151  1.00 31.97           C  
+ATOM   5292  CA  ASP C 298      26.856   2.916  -4.907  1.00 38.12           C  
+ATOM   5300  CA  TYR C 299      26.671   5.875  -2.540  1.00 39.05           C  
+ATOM   5312  CA  LYS C 300      23.196   4.971  -1.294  1.00 41.63           C  
+ATOM   5321  CA  LYS C 301      24.542   1.489  -0.577  1.00 43.40           C  
+ATOM   5330  CA  GLN C 302      27.207   3.064   1.608  1.00 43.79           C  
+ATOM   5339  CA  LEU C 303      24.476   5.181   3.238  1.00 41.51           C  
+ATOM   5347  CA  LYS C 304      22.138   2.343   4.264  1.00 45.18           C  
+ATOM   5356  CA  ARG C 305      25.322   0.535   5.256  1.00 46.65           C  
+ATOM   5367  CA  GLY C 306      25.613   3.181   7.945  1.00 40.29           C  
+ATOM   5371  CA  ASP C 307      21.954   3.487   8.940  1.00 41.21           C  
+ATOM   5379  CA  GLN C 308      21.463   6.730   7.023  1.00 35.55           C  
+ATOM   5388  CA  TRP C 309      18.961   5.674   4.361  1.00 31.22           C  
+ATOM   5402  CA  ASN C 310      16.018   3.728   5.752  1.00 31.61           C  
+ATOM   5410  CA  VAL C 311      13.120   2.841   3.452  1.00 32.13           C  
+ATOM   5417  CA  GLU C 312       9.705   1.332   4.261  1.00 31.51           C  
+ATOM   5426  CA  VAL C 313       7.466   1.606   1.209  1.00 26.39           C  
+ATOM   5433  CA  TYR C 314       4.403  -0.343   0.111  1.00 25.42           C  
index d82ff48..0b949de 100755 (executable)
@@ -1 +1 @@
-(((FER_BRANA:128.0,FER3_RAPSA:128.0):50.75,FER_CAPAA:178.75):121.94443,(Q93Z60_ARATH:271.45456,((O80429_MAIZE:183.0,FER1_MAIZE:183.0):30.5,((Q7XA98_TRIPR:90.0,FER1_PEA:90.0):83.32143,(((FER2_ARATH:64.0,FER1_ARATH:64.0):94.375,(FER1_SPIOL:124.5,FER1_MESCR:124.5):33.875):6.4166718,((Q93XJ9_SOLTU:33.5,FER1_SOLLC:33.5):49.0,FER_CAPAN:82.5):82.29167):8.529755):40.178574):57.95456):29.239868);\r
+(((FER_BRANA:128.0,FER3_RAPSA:128.0):50.75,FER_CAPAA:178.75):121.94443,(Q93Z60_ARATH:271.45456,((O80429_MAIZE:183.0,FER1_MAIZE:183.0):30.5,((Q7XA98_TRIPR:90.0,FER1_PEA:90.0):83.32143,(((FER2_ARATH:64.0,FER1_ARATH:64.0):94.375,(FER1_SPIOL:124.5,FER1_MESCR:124.5):33.875):6.4166718,((Q93XJ9_SOLTU:33.5,FER1_SOLLC:33.5):49.0,FER_CAPAN:82.5):82.29167):8.529755):40.178574):57.95456):29.239868);
index 3b93622..e19c0be 100644 (file)
@@ -1,16 +1,16 @@
-/**\r
- * Copyright 2010 Tim Down.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
+/**
+ * Copyright 2010 Tim Down.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 var Hashtable=(function(){var p="function";var n=(typeof Array.prototype.splice==p)?function(s,r){s.splice(r,1)}:function(u,t){var s,v,r;if(t===u.length-1){u.length=t}else{s=u.slice(t+1);u.length=t;for(v=0,r=s.length;v<r;++v){u[t+v]=s[v]}}};function a(t){var r;if(typeof t=="string"){return t}else{if(typeof t.hashCode==p){r=t.hashCode();return(typeof r=="string")?r:a(r)}else{if(typeof t.toString==p){return t.toString()}else{try{return String(t)}catch(s){return Object.prototype.toString.call(t)}}}}}function g(r,s){return r.equals(s)}function e(r,s){return(typeof s.equals==p)?s.equals(r):(r===s)}function c(r){return function(s){if(s===null){throw new Error("null is not a valid "+r)}else{if(typeof s=="undefined"){throw new Error(r+" must not be undefined")}}}}var q=c("key"),l=c("value");function d(u,s,t,r){this[0]=u;this.entries=[];this.addEntry(s,t);if(r!==null){this.getEqualityFunction=function(){return r}}}var h=0,j=1,f=2;function o(r){return function(t){var s=this.entries.length,v,u=this.getEqualityFunction(t);while(s--){v=this.entries[s];if(u(t,v[0])){switch(r){case h:return true;case j:return v;case f:return[s,v[1]]}}}return false}}function k(r){return function(u){var v=u.length;for(var t=0,s=this.entries.length;t<s;++t){u[v+t]=this.entries[t][r]}}}d.prototype={getEqualityFunction:function(r){return(typeof r.equals==p)?g:e},getEntryForKey:o(j),getEntryAndIndexForKey:o(f),removeEntryForKey:function(s){var r=this.getEntryAndIndexForKey(s);if(r){n(this.entries,r[0]);return r[1]}return null},addEntry:function(r,s){this.entries[this.entries.length]=[r,s]},keys:k(0),values:k(1),getEntries:function(s){var u=s.length;for(var t=0,r=this.entries.length;t<r;++t){s[u+t]=this.entries[t].slice(0)}},containsKey:o(h),containsValue:function(s){var r=this.entries.length;while(r--){if(s===this.entries[r][1]){return true}}return false}};function m(s,t){var r=s.length,u;while(r--){u=s[r];if(t===u[0]){return r}}return null}function i(r,s){var t=r[s];return(t&&(t instanceof d))?t:null}function b(t,r){var w=this;var v=[];var u={};var x=(typeof t==p)?t:a;var s=(typeof r==p)?r:null;this.put=function(B,C){q(B);l(C);var D=x(B),E,A,z=null;E=i(u,D);if(E){A=E.getEntryForKey(B);if(A){z=A[1];A[1]=C}else{E.addEntry(B,C)}}else{E=new d(D,B,C,s);v[v.length]=E;u[D]=E}return z};this.get=function(A){q(A);var B=x(A);var C=i(u,B);if(C){var z=C.getEntryForKey(A);if(z){return z[1]}}return null};this.containsKey=function(A){q(A);var z=x(A);var B=i(u,z);return B?B.containsKey(A):false};this.containsValue=function(A){l(A);var z=v.length;while(z--){if(v[z].containsValue(A)){return true}}return false};this.clear=function(){v.length=0;u={}};this.isEmpty=function(){return !v.length};var y=function(z){return function(){var A=[],B=v.length;while(B--){v[B][z](A)}return A}};this.keys=y("keys");this.values=y("values");this.entries=y("getEntries");this.remove=function(B){q(B);var C=x(B),z,A=null;var D=i(u,C);if(D){A=D.removeEntryForKey(B);if(A!==null){if(!D.entries.length){z=m(v,C);n(v,z);delete u[C]}}}return A};this.size=function(){var A=0,z=v.length;while(z--){A+=v[z].entries.length}return A};this.each=function(C){var z=w.entries(),A=z.length,B;while(A--){B=z[A];C(B[0],B[1])}};this.putAll=function(H,C){var B=H.entries();var E,F,D,z,A=B.length;var G=(typeof C==p);while(A--){E=B[A];F=E[0];D=E[1];if(G&&(z=w.get(F))){D=C(F,z,D)}w.put(F,D)}};this.clone=function(){var z=new b(t,r);z.putAll(w);return z}}return b})();
\ No newline at end of file
index 6962276..fbc3638 100644 (file)
-/* Jmol 12.0 script library Jmol.js 9:48 PM 1/31/2011 Bob Hanson\r
-\r
- checkbox heirarchy -- see http://chemapps.stolaf.edu/jmol/docs/examples-11/check.htm\r
-\r
-    based on:\r
- *\r
- * Copyright (C) 2004-2005  Miguel, Jmol Development, www.jmol.org\r
- *\r
- * Contact: hansonr@stolaf.edu\r
- *\r
- *  This library is free software; you can redistribute it and/or\r
- *  modify it under the terms of the GNU Lesser General Public\r
- *  License as published by the Free Software Foundation; either\r
- *  version 2.1 of the License, or (at your option) any later version.\r
- *\r
- *  This library is distributed in the hope that it will be useful,\r
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- *  Lesser General Public License for more details.\r
- *\r
- *  You should have received a copy of the GNU Lesser General Public\r
- *  License along with this library; if not, write to the Free Software\r
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA\r
- *  02111-1307  USA.\r
- */\r
-\r
-// for documentation see www.jmol.org/jslibrary\r
-\r
-try{if(typeof(_jmol)!="undefined")exit()\r
-\r
-// place "?NOAPPLET" on your command line to check applet control action with a textarea\r
-// place "?JMOLJAR=xxxxx" to use a specific jar file\r
-\r
-// bob hanson -- jmolResize(w,h) -- resizes absolutely or by percent (w or h 0.5 means 50%)\r
-//    angel herraez -- update of jmolResize(w,h,targetSuffix) so it is not tied to first applet\r
-// bob hanson -- jmolEvaluate -- evaluates molecular math 8:37 AM 2/23/2007\r
-// bob hanson -- jmolScriptMessage -- returns all "scriptStatus" messages 8:37 AM 2/23/2007\r
-// bob hanson -- jmolScriptEcho -- returns all "scriptEcho" messages 8:37 AM 2/23/2007\r
-// bob hanson -- jmolScriptWait -- 11:31 AM 5/2/2006\r
-// bob hanson -- remove trailing separatorHTML in radio groups -- 12:18 PM 5/6/2006\r
-// bob hanson -- adds support for dynamic DOM script nodes 7:04 AM 5/19/2006\r
-// bob hanson -- adds try/catch for wiki - multiple code passes 7:05 AM 5/19/2006\r
-// bob hanson -- auto-initiates to defaultdir/defaultjar -- change as desired.\r
-// bob hanson -- adding save/restore orientation w/ and w/o delay 11:49 AM 5/25/2006\r
-// bob hanson -- adding AjaxJS service 11:16 AM 6/3/2006\r
-// bob hanson -- fix for iframes not available for finding applet\r
-// bob hanson -- added applet fake ?NOAPPLET URL flag\r
-// bob hanson -- added jmolSetCallback(calbackName, funcName) 3:32 PM 6/13/2006\r
-//                     used PRIOR to jmolApplet() or jmolAppletInline()\r
-//               added 4th array element in jmolRadioGroup -- title\r
-//               added <span> and id around link, checkbox, radio, menu\r
-//               fixing AJAX loads for MSIE/Opera-Mozilla incompatibility\r
-//            -- renamed Jmol-11.js from Jmol-new.js; JmolApplet.jar from JmolAppletProto.jar\r
-//              renamed Jmol.js for Jmol 11 distribution\r
-//            -- modified jmolRestoreOrientation() to be immediate, no 1-second delay\r
-// bob hanson -- jmolScriptWait always returns a string -- 11:23 AM 9/16/2006\r
-// bh         -- jmolCommandInput()\r
-// bh         -- jmolSetTranslation(TF) -- forces translation even if there might be message callback issues\r
-// bh         -- minor fixes suggested by Angel\r
-// bh         -- adds jmolSetSyncId() and jmolGetSyncId()\r
-// bh 3/2008  -- adds jmolAppendInlineScript() and jmolAppendInlineArray()\r
-// bh 3/2008  -- fixes IE7 bug in relation to jmolLoadInlineArray()\r
-// bh 6/2008  -- adds jmolSetAppletWindow()\r
-// Angel H. 6/2008  -- added html <label> tags to checkboxes and radio buttons [in jmolCheckbox() and _jmolRadio() functions]\r
-// bh 7/2008  -- code fix "for(i..." not "for(var i..."\r
-// bh 12/2008 -- jmolLoadInline, jmolLoadInlineArray, jmolLoadInlineScript, jmolAppendInlineScript, jmolAppendInlineArray all return error message or null (Jmol 11.7.16)\r
-// bh 12/2008 -- jmolScriptWaitOutput() -- waits for script to complete and delivers output normally sent to console\r
-\r
-// bh 5/2009  -- Support for XHTML using jmolSetXHTML(id)\r
-// ah & bh 6/2009 -- New jmolResizeApplet() more flexible, similar to jmolApplet() size syntax\r
-// bh 11/2009 -- care in accessing top.document\r
-// bh 12/2009 -- added jmolSetParameter(name, value)\r
-// bh 12/2009 -- added PARAMS=name:value;name:value;name:value... for command line\r
-// bh 12/2009 -- overhaul of target checking\r
-// bh 1/2010  -- all _xxxx() methods ALWAYS have complete argument list\r
-// bh 1/2010  -- adds option to run a JavaScript function from any Jmol control. \r
-//               This is accomplished by passing an array rather than a script:\r
-//               jmolHref([myfunc,"my param 1", "my param 2"], "testing")\r
-//               function myfunc(jmolControlObject, [myfunc,"my param 1", "my param 2"], target){...}\r
-//               and allows much more flexibility with responding to controls\r
-// bh 4/2010  -- added jmolSetMemoryMb(nMb)\r
-// ah 1/2011  -- wider detection of browsers; more browsers now use the object tag instead of the applet tag; \r
-//               fix of object tag (removed classid) accounts for change of behavior in Chrome\r
-// bh 3/2011  -- added jmolLoadAjax_STOLAF_NIH\r
-\r
-var defaultdir = "."\r
-var defaultjar = "JmolApplet.jar"\r
-\r
-\r
-// Note added 12:41 PM 9/21/2008 by Bob Hanson, hansonr@stolaf.edu:\r
-\r
-// JMOLJAR=xxxxx.jar on the URL for this page will override\r
-// the JAR file specified in the jmolInitialize() call.\r
-\r
-// The idea is that it can be very useful to test a web page with different JAR files\r
-// Or for an expert user to substitute a signed applet for an unsigned one\r
-// so as to use a broader range of models or to create JPEG files, for example.\r
-\r
-// If the JAR file is not in the current directory (has any sort of "/" in its name)\r
-// then the user is presented with a warning and asked whether it is OK to change Jar files.\r
-// The default action, if the user just presses "OK" is to NOT allow the change. \r
-// The user must type the word "yes" in the prompt box for the change to be approved.\r
-\r
-// If you don't want people to be able to switch in their own JAR file on your page,\r
-// simply set this next line to read "var allowJMOLJAR = false".\r
-\r
-\r
-var undefined; // for IE 5 ... wherein undefined is undefined\r
-\r
-////////////////////////////////////////////////////////////////\r
-// Basic Scripting infrastruture\r
-////////////////////////////////////////////////////////////////\r
-\r
-function jmolInitialize(codebaseDirectory, fileNameOrUseSignedApplet) {\r
-  if (_jmol.initialized)\r
-    return;\r
-  _jmol.initialized = true;\r
-  if(_jmol.jmoljar) {\r
-    var f = _jmol.jmoljar;\r
-    if (f.indexOf("/") >= 0) {\r
-      alert ("This web page URL is requesting that the applet used be " + f + ". This is a possible security risk, particularly if the applet is signed, because signed applets can read and write files on your local machine or network.")\r
-      var ok = prompt("Do you want to use applet " + f + "? ","yes or no")\r
-      if (ok == "yes") {\r
-        codebaseDirectory = f.substring(0, f.lastIndexOf("/"));\r
-        fileNameOrUseSignedApplet = f.substring(f.lastIndexOf("/") + 1);\r
-      } else {\r
-       _jmolGetJarFilename(fileNameOrUseSignedApplet);\r
-        alert("The web page URL was ignored. Continuing using " + _jmol.archivePath + ' in directory "' + codebaseDirectory + '"');\r
-      }\r
-    } else {\r
-      fileNameOrUseSignedApplet = f;\r
-    }\r
-  }\r
-  _jmolSetCodebase(codebaseDirectory);\r
-  _jmolGetJarFilename(fileNameOrUseSignedApplet);\r
-  _jmolOnloadResetForms();\r
-}\r
-\r
-function jmolSetTranslation(TF) {\r
-  _jmol.params.doTranslate = ''+TF;\r
-}\r
-\r
-function _jmolGetJarFilename(fileNameOrFlag) {\r
-  _jmol.archivePath =\r
-    (typeof(fileNameOrFlag) == "string"  ? fileNameOrFlag : (fileNameOrFlag ?  "JmolAppletSigned" : "JmolApplet") + "0.jar");\r
-}\r
-\r
-function jmolSetDocument(doc) {\r
-  _jmol.currentDocument = doc;\r
-}\r
-\r
-function jmolSetAppletColor(boxbgcolor, boxfgcolor, progresscolor) {\r
-  _jmolInitCheck();\r
-  _jmol.params.boxbgcolor = boxbgcolor;\r
-  if (boxfgcolor)\r
-    _jmol.params.boxfgcolor = boxfgcolor\r
-  else if (boxbgcolor == "white" || boxbgcolor == "#FFFFFF")\r
-    _jmol.params.boxfgcolor = "black";\r
-  else\r
-    _jmol.params.boxfgcolor = "white";\r
-  if (progresscolor)\r
-    _jmol.params.progresscolor = progresscolor;\r
-  if (_jmol.debugAlert)\r
-    alert(" boxbgcolor=" + _jmol.params.boxbgcolor +\r
-          " boxfgcolor=" + _jmol.params.boxfgcolor +\r
-          " progresscolor=" + _jmol.params.progresscolor);\r
-}\r
-\r
-function jmolSetAppletWindow(w) {\r
-  _jmol.appletWindow = w;\r
-}\r
-\r
-function jmolApplet(size, script, nameSuffix) {\r
-  _jmolInitCheck();\r
-  return _jmolApplet(size, null, script, nameSuffix);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// Basic controls\r
-////////////////////////////////////////////////////////////////\r
-\r
-// undefined means it wasn't there; null means it was explicitly listed as null (so as to skip it)\r
-\r
-function jmolButton(script, label, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolButton" + _jmol.buttonCount);\r
-  label != undefined && label != null || (label = script.substring(0, 32));\r
-  ++_jmol.buttonCount;\r
-  var scriptIndex = _jmolAddScript(script);\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='button' name='" + id + "' id='" + id +\r
-          "' value='" + label +\r
-          "' onclick='_jmolClick(this," + scriptIndex + _jmol.targetText +\r
-          ")' onmouseover='_jmolMouseOver(" + scriptIndex +\r
-          ");return true' onmouseout='_jmolMouseOut()' " +\r
-          _jmol.buttonCssText + " /></span>";\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolCheckbox(scriptWhenChecked, scriptWhenUnchecked,\r
-                      labelHtml, isChecked, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolCheckbox" + _jmol.checkboxCount);\r
-  ++_jmol.checkboxCount;\r
-  if (scriptWhenChecked == undefined || scriptWhenChecked == null ||\r
-      scriptWhenUnchecked == undefined || scriptWhenUnchecked == null) {\r
-    alert("jmolCheckbox requires two scripts");\r
-    return;\r
-  }\r
-  if (labelHtml == undefined || labelHtml == null) {\r
-    alert("jmolCheckbox requires a label");\r
-    return;\r
-  }\r
-  var indexChecked = _jmolAddScript(scriptWhenChecked);\r
-  var indexUnchecked = _jmolAddScript(scriptWhenUnchecked);\r
-  var eospan = "</span>"\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='checkbox' name='" + id + "' id='" + id +\r
-          "' onclick='_jmolCbClick(this," +\r
-          indexChecked + "," + indexUnchecked + _jmol.targetText +\r
-          ")' onmouseover='_jmolCbOver(this," + indexChecked + "," +\r
-          indexUnchecked +\r
-          ");return true' onmouseout='_jmolMouseOut()' " +\r
-         (isChecked ? "checked='true' " : "")+ _jmol.checkboxCssText + " />" \r
-  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {\r
-       t += eospan\r
-       eospan = "";\r
-  }\r
-  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan;\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolStartNewRadioGroup() {\r
-  ++_jmol.radioGroupCount;\r
-}\r
-\r
-function jmolRadioGroup(arrayOfRadioButtons, separatorHtml, groupName, id, title) {\r
-  /*\r
-\r
-    array: [radio1,radio2,radio3...]\r
-    where radioN = ["script","label",isSelected,"id","title"]\r
-\r
-  */\r
-\r
-  _jmolInitCheck();\r
-  var type = typeof arrayOfRadioButtons;\r
-  if (type != "object" || type == null || ! arrayOfRadioButtons.length) {\r
-    alert("invalid arrayOfRadioButtons");\r
-    return;\r
-  }\r
-  separatorHtml != undefined && separatorHtml != null || (separatorHtml = "&nbsp; ");\r
-  var len = arrayOfRadioButtons.length;\r
-  jmolStartNewRadioGroup();\r
-  groupName || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));\r
-  var t = "<span id='"+(id ? id : groupName)+"'>";\r
-  for (var i = 0; i < len; ++i) {\r
-    if (i == len - 1)\r
-      separatorHtml = "";\r
-    var radio = arrayOfRadioButtons[i];\r
-    type = typeof radio;\r
-    if (type == "object") {\r
-      t += _jmolRadio(radio[0], radio[1], radio[2], separatorHtml, groupName, (radio.length > 3 ? radio[3]: (id ? id : groupName)+"_"+i), (radio.length > 4 ? radio[4] : 0), title);\r
-    } else {\r
-      t += _jmolRadio(radio, null, null, separatorHtml, groupName, (id ? id : groupName)+"_"+i, title);\r
-    }\r
-  }\r
-  t+="</span>"\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-\r
-function jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {\r
-  _jmolInitCheck();\r
-  if (_jmol.radioGroupCount == 0)\r
-    ++_jmol.radioGroupCount;\r
-  var t = _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, (id ? id : groupName + "_" + _jmol.radioCount), title ? title : 0);\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolLink(script, label, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolLink" + _jmol.linkCount);\r
-  label != undefined && label != null || (label = script.substring(0, 32));\r
-  ++_jmol.linkCount;\r
-  var scriptIndex = _jmolAddScript(script);\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><a name='" + id + "' id='" + id + \r
-          "' href='javascript:_jmolClick(this," + scriptIndex + _jmol.targetText + ");' onmouseover='_jmolMouseOver(" + scriptIndex +\r
-          ");return true;' onmouseout='_jmolMouseOut()' " +\r
-          _jmol.linkCssText + ">" + label + "</a></span>";\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolCommandInput(label, size, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolCmd" + _jmol.cmdCount);\r
-  label != undefined && label != null || (label = "Execute");\r
-  size != undefined && !isNaN(size) || (size = 60);\r
-  ++_jmol.cmdCount;\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" + id + "' id='" + id + \r
-          "' size='"+size+"' onkeypress='_jmolCommandKeyPress(event,\""+id+"\"" + _jmol.targetText + ")'><input type=button value = '"+label+"' onclick='jmolScript(document.getElementById(\""+id+"\").value" + _jmol.targetText + ")' /></span>";\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function _jmolCommandKeyPress(e, id, target) {\r
-       var keycode = (window.event ? window.event.keyCode : e ? e.which : 0);\r
-       if (keycode == 13) {\r
-               var inputBox = document.getElementById(id)\r
-               _jmolScriptExecute(inputBox, inputBox.value, target)\r
-       }\r
-}\r
-\r
-function _jmolScriptExecute(element,script,target) {\r
-       if (typeof(script) == "object")\r
-               script[0](element, script, target)\r
-       else\r
-               jmolScript(script, target) \r
-}\r
-\r
-function jmolMenu(arrayOfMenuItems, size, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolMenu" + _jmol.menuCount);\r
-  ++_jmol.menuCount;\r
-  var type = typeof arrayOfMenuItems;\r
-  if (type != null && type == "object" && arrayOfMenuItems.length) {\r
-    var len = arrayOfMenuItems.length;\r
-    if (typeof size != "number" || size == 1)\r
-      size = null;\r
-    else if (size < 0)\r
-      size = len;\r
-    var sizeText = size ? " size='" + size + "' " : "";\r
-    var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><select name='" + id + "' id='" + id +\r
-            "' onChange='_jmolMenuSelected(this" + _jmol.targetText + ")'" +\r
-            sizeText + _jmol.menuCssText + ">";\r
-    for (var i = 0; i < len; ++i) {\r
-      var menuItem = arrayOfMenuItems[i];\r
-      type = typeof menuItem;\r
-      var script, text;\r
-      var isSelected = undefined;\r
-      if (type == "object" && menuItem != null) {\r
-        script = menuItem[0];\r
-        text = menuItem[1];\r
-        isSelected = menuItem[2];\r
-      } else {\r
-        script = text = menuItem;\r
-      }\r
-      text != undefined && text != null || (text = script);            \r
-      if (script=="#optgroup") {\r
-        t += "<optgroup label='" + text + "'>";          \r
-         } else if (script=="#optgroupEnd") {\r
-        t += "</optgroup>";      \r
-         } else {              \r
-        var scriptIndex = _jmolAddScript(script);\r
-        var selectedText = isSelected ? "' selected='true'>" : "'>";\r
-        t += "<option value='" + scriptIndex + selectedText + text + "</option>";\r
-      }\r
-    }\r
-    t += "</select></span>";\r
-    if (_jmol.debugAlert)\r
-      alert(t);\r
-    return _jmolDocumentWrite(t);\r
-  }\r
-}\r
-\r
-function jmolHtml(html) {\r
-  return _jmolDocumentWrite(html);\r
-}\r
-\r
-function jmolBr() {\r
-  return _jmolDocumentWrite("<br />");\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// advanced scripting functions\r
-////////////////////////////////////////////////////////////////\r
-\r
-function jmolDebugAlert(enableAlerts) {\r
-  _jmol.debugAlert = (enableAlerts == undefined || enableAlerts)\r
-}\r
-\r
-function jmolAppletInline(size, inlineModel, script, nameSuffix) {\r
-  _jmolInitCheck();\r
-  return _jmolApplet(size, _jmolSterilizeInline(inlineModel),\r
-                     script, nameSuffix);\r
-}\r
-\r
-function jmolSetTarget(targetSuffix) {\r
-  _jmol.targetSuffix = targetSuffix;\r
-  _jmol.targetText = targetSuffix ? ",\"" + targetSuffix + "\"" : ",0";\r
-}\r
-\r
-function jmolScript(script, targetSuffix) {\r
-  if (script) {\r
-    _jmolCheckBrowser();\r
-    if (targetSuffix == "all") {\r
-      with (_jmol) {\r
-       for (var i = 0; i < appletSuffixes.length; ++i) {\r
-         var applet = _jmolGetApplet(appletSuffixes[i]);\r
-          if (applet) applet.script(script);\r
-        }\r
-      }\r
-    } else {\r
-      var applet=_jmolGetApplet(targetSuffix);\r
-      if (applet) applet.script(script);\r
-    }\r
-  }\r
-}\r
-\r
-function jmolLoadInline(model, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  if (typeof(model) == "string")\r
-    return applet.loadInlineString(model, "", false);\r
-  else\r
-    return applet.loadInlineArray(model, "", false);\r
-}\r
-\r
-\r
-function jmolLoadInlineScript(model, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  return applet.loadInlineString(model, script, false);\r
-}\r
-\r
-\r
-function jmolLoadInlineArray(ModelArray, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  script || (script="")\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  try {\r
-    return applet.loadInlineArray(ModelArray, script, false);\r
-  } catch (err) {\r
-    //IE 7 bug\r
-    return applet.loadInlineString(ModelArray.join("\n"), script, false);\r
-  }\r
-}\r
-\r
-function jmolAppendInlineArray(ModelArray, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  script || (script="")\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  try {\r
-    return applet.loadInlineArray(ModelArray, script, true);\r
-  } catch (err) {\r
-    //IE 7 bug\r
-    return applet.loadInlineString(ModelArray.join("\n"), script, true);\r
-  }\r
-}\r
-\r
-function jmolAppendInlineScript(model, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  return applet.loadInlineString(model, script, true);\r
-}\r
-\r
-function jmolCheckBrowser(action, urlOrMessage, nowOrLater) {\r
-  if (typeof action == "string") {\r
-    action = action.toLowerCase();\r
-    action == "alert" || action == "redirect" || action == "popup" || (action = null);\r
-  }\r
-  if (typeof action != "string")\r
-    alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +\r
-          "action must be 'alert', 'redirect', or 'popup'");\r
-  else {\r
-    if (typeof urlOrMessage != "string")\r
-      alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +\r
-            "urlOrMessage must be a string");\r
-    else {\r
-      _jmol.checkBrowserAction = action;\r
-      _jmol.checkBrowserUrlOrMessage = urlOrMessage;\r
-    }\r
-  }\r
-  if (typeof nowOrLater == "string" && nowOrLater.toLowerCase() == "now")\r
-    _jmolCheckBrowser();\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// Cascading Style Sheet Class support\r
-////////////////////////////////////////////////////////////////\r
-\r
-function jmolSetAppletCssClass(appletCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.appletCssClass = appletCssClass;\r
-    _jmol.appletCssText = appletCssClass ? "class='" + appletCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetButtonCssClass(buttonCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.buttonCssClass = buttonCssClass;\r
-    _jmol.buttonCssText = buttonCssClass ? "class='" + buttonCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetCheckboxCssClass(checkboxCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.checkboxCssClass = checkboxCssClass;\r
-    _jmol.checkboxCssText = checkboxCssClass ? "class='" + checkboxCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetRadioCssClass(radioCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.radioCssClass = radioCssClass;\r
-    _jmol.radioCssText = radioCssClass ? "class='" + radioCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetLinkCssClass(linkCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.linkCssClass = linkCssClass;\r
-    _jmol.linkCssText = linkCssClass ? "class='" + linkCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetMenuCssClass(menuCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.menuCssClass = menuCssClass;\r
-    _jmol.menuCssText = menuCssClass ? "class='" + menuCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// functions for INTERNAL USE ONLY which are subject to change\r
-// use at your own risk ... you have been WARNED!\r
-////////////////////////////////////////////////////////////////\r
-var _jmol = {\r
-  currentDocument: document,\r
-\r
-  debugAlert: false,\r
-  \r
-  codebase: "",\r
-  modelbase: ".",\r
-  \r
-  appletCount: 0,\r
-  appletSuffixes: [],\r
-  appletWindow: null,\r
-  allowedJmolSize: [25, 2048, 300],   // min, max, default (pixels)\r
-         /*  By setting the _jmol.allowedJmolSize[] variable in the webpage \r
-             before calling jmolApplet(), limits for applet size can be overriden.\r
-                   2048 standard for GeoWall (http://geowall.geo.lsa.umich.edu/home.html)\r
-         */  \r
-  buttonCount: 0,\r
-  checkboxCount: 0,\r
-  linkCount: 0,\r
-  cmdCount: 0,\r
-  menuCount: 0,\r
-  radioCount: 0,\r
-  radioGroupCount: 0,\r
-  \r
-  appletCssClass: null,\r
-  appletCssText: "",\r
-  buttonCssClass: null,\r
-  buttonCssText: "",\r
-  checkboxCssClass: null,\r
-  checkboxCssText: "",\r
-  java_arguments: "-Xmx512m",\r
-  radioCssClass: null,\r
-  radioCssText: "",\r
-  linkCssClass: null,\r
-  linkCssText: "",\r
-  menuCssClass: null,\r
-  menuCssText: "",\r
-  \r
-  targetSuffix: 0,\r
-  targetText: ",0",\r
-  scripts: [""],\r
-  params: {\r
-       syncId: ("" + Math.random()).substring(3),\r
-       progressbar: "true",\r
-       progresscolor: "blue",\r
-       boxbgcolor: "black",\r
-       boxfgcolor: "white",\r
-       boxmessage: "Downloading JmolApplet ..."\r
-  },\r
-  ua: navigator.userAgent.toLowerCase(),\r
-  // uaVersion: parseFloat(navigator.appVersion),  // not used\r
-  \r
-  os: "unknown",\r
-  browser: "unknown",\r
-  browserVersion: 0,\r
-  hasGetElementById: !!document.getElementById,\r
-  isJavaEnabled: navigator.javaEnabled(),\r
-  // isNetscape47Win: false,  // not used, N4.7 is no longer supported even for detection\r
-  useIEObject: false,\r
-  useHtml4Object: false,\r
-  \r
-  windowsClassId: "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93",\r
-  windowsCabUrl:\r
-   "http://java.sun.com/update/1.6.0/jinstall-6u22-windows-i586.cab",\r
-\r
-  isBrowserCompliant: false,\r
-  isJavaCompliant: false,\r
-  isFullyCompliant: false,\r
-\r
-  initialized: false,\r
-  initChecked: false,\r
-  \r
-  browserChecked: false,\r
-  checkBrowserAction: "alert",\r
-  checkBrowserUrlOrMessage: null,\r
-\r
-  archivePath: null, // JmolApplet0.jar OR JmolAppletSigned0.jar\r
-\r
-  previousOnloadHandler: null,\r
-\r
-  jmoljar: null,  \r
-  useNoApplet: false,\r
-\r
-  ready: {}\r
-}\r
-\r
-with (_jmol) {\r
-  function _jmolTestUA(candidate) {\r
-    var ua = _jmol.ua;\r
-    var index = ua.indexOf(candidate);\r
-    if (index < 0)\r
-      return false;\r
-    _jmol.browser = candidate;\r
-    _jmol.browserVersion = parseFloat(ua.substring(index+candidate.length+1));\r
-    return true;\r
-  }\r
-  \r
-  function _jmolTestOS(candidate) {\r
-    if (_jmol.ua.indexOf(candidate) < 0)\r
-      return false;\r
-    _jmol.os = candidate;\r
-    return true;\r
-  }\r
-  \r
-  _jmolTestUA("konqueror") ||\r
-  _jmolTestUA("webkit") ||\r
-  _jmolTestUA("omniweb") ||\r
-  _jmolTestUA("opera") ||\r
-  _jmolTestUA("webtv") ||\r
-  _jmolTestUA("icab") ||\r
-  _jmolTestUA("msie") ||\r
-  (_jmol.ua.indexOf("compatible") < 0 && _jmolTestUA("mozilla")); //Netscape, Mozilla, Seamonkey, Firefox and anything assimilated\r
-  \r
-  _jmolTestOS("linux") ||\r
-  _jmolTestOS("unix") ||\r
-  _jmolTestOS("mac") ||\r
-  _jmolTestOS("win");\r
-\r
-  /* not used:\r
-       isNetscape47Win = (os == "win" && browser == "mozilla" &&\r
-                     browserVersion >= 4.78 && browserVersion <= 4.8);\r
-       */\r
-\r
-  if (os == "win") {\r
-    isBrowserCompliant = hasGetElementById;\r
-  } else if (os == "mac") { // mac is the problem child :-(\r
-    if (browser == "mozilla" && browserVersion >= 5) {\r
-      // miguel 2004 11 17\r
-      // checking the plugins array does not work because\r
-      // Netscape 7.2 OS X still has Java 1.3.1 listed even though\r
-      // javaplugin.sf.net is installed to upgrade to 1.4.2\r
-      eval("try {var v = java.lang.System.getProperty('java.version');" +\r
-           " _jmol.isBrowserCompliant = v >= '1.4.2';" +\r
-           " } catch (e) { }");\r
-    } else if (browser == "opera" && browserVersion <= 7.54) {\r
-      isBrowserCompliant = false;\r
-    } else {\r
-      isBrowserCompliant = hasGetElementById &&\r
-        !((browser == "msie") ||\r
-          (browser == "webkit" && browserVersion < 125.12));\r
-    }\r
-  } else if (os == "linux" || os == "unix") {\r
-    if (browser == "konqueror" && browserVersion <= 3.3)\r
-      isBrowserCompliant = false;\r
-    else\r
-      isBrowserCompliant = hasGetElementById;\r
-  } else { // other OS\r
-    isBrowserCompliant = hasGetElementById;\r
-  }\r
-\r
-  // possibly more checks in the future for this\r
-  isJavaCompliant = isJavaEnabled;\r
-\r
-  isFullyCompliant = isBrowserCompliant && isJavaCompliant;\r
-\r
-  useIEObject = (os == "win" && browser == "msie" && browserVersion >= 5.5);\r
-  useHtml4Object =\r
-   (browser == "mozilla" && browserVersion >= 5) ||\r
-   (browser == "opera" && browserVersion >= 8) ||\r
-   (browser == "webkit" && browserVersion >= 412.2);\r
- try {\r
-  if (top.location.search.indexOf("JMOLJAR=")>=0)\r
-    jmoljar = top.location.search.split("JMOLJAR=")[1].split("&")[0];\r
- } catch(e) {\r
-  // can't access top.location\r
- }\r
- try {\r
-  useNoApplet = (top.location.search.indexOf("NOAPPLET")>=0);\r
- } catch(e) {\r
-  // can't access top.document\r
- }\r
-}\r
-\r
-function jmolSetMemoryMb(nMb) {\r
-  _jmol.java_arguments = "-Xmx" + Math.round(nMb) + "m"\r
-}\r
-\r
-function jmolSetParameter(name,value) {\r
-  _jmol.params[name] = value\r
-}\r
-\r
-function jmolSetCallback(callbackName,funcName) {\r
-  _jmol.params[callbackName] = funcName\r
-}\r
-\r
- try {\r
-// note this is done FIRST, so it cannot override a setting done by the developer\r
-  if (top.location.search.indexOf("PARAMS=")>=0) {\r
-    var pars = unescape(top.location.search.split("PARAMS=")[1].split("&")[0]).split(";");\r
-    for (var i = 0; i < pars.length; i++) {\r
-      var p = pars[i].split(":");\r
-      jmolSetParameter(p[0],p[1]);\r
-    }\r
-  }\r
- } catch(e) {\r
-  // can't access top.location\r
- }\r
-\r
-function jmolSetSyncId(n) {\r
-  return _jmol.params["syncId"] = n\r
-}\r
-\r
-function jmolGetSyncId() {\r
-  return _jmol.params["syncId"]\r
-}\r
-\r
-function jmolSetLogLevel(n) {\r
-  _jmol.params.logLevel = ''+n;\r
-}\r
-\r
-       /*  AngelH, mar2007:\r
-               By (re)setting these variables in the webpage before calling jmolApplet(), \r
-               a custom message can be provided (e.g. localized for user's language) when no Java is installed.\r
-       */\r
-if (noJavaMsg==undefined) var noJavaMsg = \r
-        "You do not have Java applets enabled in your web browser, or your browser is blocking this applet.<br />\n" +\r
-        "Check the warning message from your browser and/or enable Java applets in<br />\n" +\r
-        "your web browser preferences, or install the Java Runtime Environment from <a href='http://www.java.com'>www.java.com</a><br />";\r
-if (noJavaMsg2==undefined) var noJavaMsg2 = \r
-        "You do not have the<br />\n" +\r
-        "Java Runtime Environment<br />\n" +\r
-        "installed for applet support.<br />\n" +\r
-        "Visit <a href='http://www.java.com'>www.java.com</a>";\r
-function _jmolApplet(size, inlineModel, script, nameSuffix) {\r
-       /*  AngelH, mar2007\r
-               Fixed percent / pixel business, to avoid browser errors:\r
-               put "px" where needed, avoid where not.\r
-\r
-           Bob Hanson, 1/2010\r
-               Fixed inline escape changing returns to |               \r
-       */\r
-  with (_jmol) {\r
-    nameSuffix == undefined && (nameSuffix = appletCount);\r
-    appletSuffixes.push(nameSuffix);\r
-    ++appletCount;\r
-    script || (script = "select *");\r
-    var sz = _jmolGetAppletSize(size);\r
-    var widthAndHeight = " width='" + sz[0] + "' height='" + sz[1] + "' ";\r
-    var tHeader, tFooter;\r
-    codebase || jmolInitialize(".");\r
-    if (useIEObject || useHtml4Object) {\r
-      params.archive = archivePath;\r
-      params.mayscript = 'true';\r
-      params.codebase = codebase;\r
-      params.code = 'JmolApplet';\r
-      tHeader = \r
-        "<object name='jmolApplet" + nameSuffix +\r
-        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +\r
-                               widthAndHeight + "\n";\r
-      tFooter = "</object>";\r
-    }\r
-    if (java_arguments)\r
-      params.java_arguments = java_arguments;\r
-    if (useIEObject) { // use MSFT IE6 object tag with .cab file reference\r
-      tHeader += " classid='" + windowsClassId + "'\n" +\r
-      (windowsCabUrl ? " codebase='" + windowsCabUrl + "'\n" : "") + ">\n";\r
-    } else if (useHtml4Object) { // use HTML4 object tag\r
-      tHeader += " type='application/x-java-applet'\n>\n";\r
-                               /*      " classid='java:JmolApplet'\n" +        AH removed this\r
-                                 Chromium Issue 62076:         Java Applets using an <object> with a classid paramater don't load.\r
-                                       http://code.google.com/p/chromium/issues/detail?id=62076\r
-                                       They say this is the correct behavior according to the spec, and there's no indication at this point \r
-                                       that WebKit will be changing the handling, so eventually Safari will acquire this behavior too.\r
-                                       Removing the classid parameter seems to be well tolerated by all browsers (even IE!).\r
-                               */\r
-    } else { // use applet tag\r
-      tHeader = \r
-        "<applet name='jmolApplet" + nameSuffix +\r
-        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +\r
-                               widthAndHeight + "\n" +\r
-        " code='JmolApplet'" +\r
-        " archive='" + archivePath + "' codebase='" + codebase + "'\n" +\r
-        " mayscript='true'>\n";\r
-      tFooter = "</applet>";\r
-    }\r
-    var visitJava;\r
-    if (useIEObject || useHtml4Object) {\r
-               var szX = "width:" + sz[0]\r
-               if ( szX.indexOf("%")==-1 ) szX+="px" \r
-               var szY = "height:" + sz[1]\r
-               if ( szY.indexOf("%")==-1 ) szY+="px" \r
-      visitJava =\r
-        "<p style='background-color:yellow; color:black; " +\r
-               szX + ";" + szY + ";" +\r
-        // why doesn't this vertical-align work?\r
-       "text-align:center;vertical-align:middle;'>\n" +\r
-               noJavaMsg +\r
-        "</p>";\r
-    } else {\r
-      visitJava =\r
-        "<table bgcolor='yellow'><tr>" +\r
-        "<td align='center' valign='middle' " + widthAndHeight + "><font color='black'>\n" +\r
-               noJavaMsg2 +\r
-        "</font></td></tr></table>";\r
-    }\r
-    params.loadInline = (inlineModel ? inlineModel : "");\r
-    params.script = (script ? _jmolSterilizeScript(script) : "");\r
-    var t = tHeader + _jmolParams() + visitJava + tFooter;\r
-    jmolSetTarget(nameSuffix);\r
-    ready["jmolApplet" + nameSuffix] = false;\r
-    if (_jmol.debugAlert)\r
-      alert(t);\r
-    return _jmolDocumentWrite(t);\r
-  }\r
-}\r
-\r
-function _jmolParams() {\r
- var t = "";\r
- for (var i in _jmol.params)\r
-       if(_jmol.params[i]!="")\r
-                t+="  <param name='"+i+"' value='"+_jmol.params[i]+"' />\n";\r
- return t\r
-}\r
-\r
-function _jmolInitCheck() {\r
-  if (_jmol.initChecked)\r
-    return;\r
-  _jmol.initChecked = true;\r
-  jmolInitialize(defaultdir, defaultjar)\r
-}\r
-\r
-function _jmolCheckBrowser() {\r
-  with (_jmol) {\r
-    if (browserChecked)\r
-      return;\r
-    browserChecked = true;\r
-  \r
-    if (isFullyCompliant)\r
-      return true;\r
-\r
-    if (checkBrowserAction == "redirect")\r
-      location.href = checkBrowserUrlOrMessage;\r
-    else if (checkBrowserAction == "popup")\r
-      _jmolPopup(checkBrowserUrlOrMessage);\r
-    else {\r
-      var msg = checkBrowserUrlOrMessage;\r
-      if (msg == null)\r
-        msg = "Your web browser is not fully compatible with Jmol\n\n" +\r
-              "browser: " + browser +\r
-              "   version: " + browserVersion +\r
-              "   os: " + os +\r
-              "   isBrowserCompliant: " + isBrowserCompliant +\r
-              "   isJavaCompliant: " + isJavaCompliant +\r
-              "\n\n" + ua;\r
-      alert(msg);\r
-    }\r
-  }\r
-  return false;\r
-}\r
-\r
-function jmolSetXHTML(id) {\r
-       _jmol.isXHTML = true\r
-       _jmol.XhtmlElement = null\r
-       _jmol.XhtmlAppendChild = false\r
-       if (id){\r
-               _jmol.XhtmlElement = document.getElementById(id)\r
-               _jmol.XhtmlAppendChild = true\r
-       }\r
-}\r
-\r
-function _jmolDocumentWrite(text) {\r
-       if (_jmol.currentDocument) {\r
-               if (_jmol.isXHTML && !_jmol.XhtmlElement) {\r
-                       var s = document.getElementsByTagName("script")\r
-                       _jmol.XhtmlElement = s.item(s.length - 1)\r
-                       _jmol.XhtmlAppendChild = false\r
-               }\r
-               if (_jmol.XhtmlElement) {\r
-                       _jmolDomDocumentWrite(text)\r
-               } else {\r
-                       _jmol.currentDocument.write(text);\r
-               }\r
-       }\r
-       return text;\r
-}\r
-\r
-function _jmolDomDocumentWrite(data) {\r
-       var pt = 0\r
-       var Ptr = []\r
-       Ptr[0] = 0\r
-       while (Ptr[0] < data.length) {\r
-               var child = _jmolGetDomElement(data, Ptr)\r
-               if (!child)break\r
-               if (_jmol.XhtmlAppendChild)\r
-                       _jmol.XhtmlElement.appendChild(child)\r
-               else\r
-                       _jmol.XhtmlElement.parentNode.insertBefore(child, _jmol.XhtmlElement); \r
-       }\r
-}\r
-function _jmolGetDomElement(data, Ptr, closetag, lvel) {\r
-       var e = document.createElement("span")\r
-       e.innerHTML = data\r
-       Ptr[0] = data.length\r
-       return e\r
-\r
-//unnecessary?\r
-\r
-       closetag || (closetag = "")\r
-       lvel || (lvel = 0)\r
-       var pt0 = Ptr[0]\r
-       var pt = pt0\r
-       while (pt < data.length && data.charAt(pt) != "<") pt++\r
-       if (pt != pt0) {\r
-               var text = data.substring(pt0, pt)\r
-               Ptr[0] = pt\r
-               return document.createTextNode(text)\r
-       }       \r
-       pt0 = ++pt\r
-       var ch\r
-       while (pt < data.length && "\n\r\t >".indexOf(ch = data.charAt(pt)) < 0) pt++\r
-       var tagname = data.substring(pt0, pt)\r
-       var e = (tagname == closetag  || tagname == "/" ? "" \r
-               : document.createElementNS ? document.createElementNS('http://www.w3.org/1999/xhtml', tagname)\r
-               : document.createElement(tagname));\r
-       if (ch == ">") {\r
-               Ptr[0] = ++pt\r
-               return e\r
-       }\r
-       while (pt < data.length && (ch = data.charAt(pt)) != ">") {\r
-               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++\r
-               pt0 = pt\r
-               while (pt < data.length && "\n\r\t =/>".indexOf(ch = data.charAt(pt)) < 0) pt++\r
-               var attrname = data.substring(pt0, pt).toLowerCase()\r
-               if (attrname && ch != "=") \r
-                       e.setAttribute(attrname, "true")\r
-               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++\r
-               if (ch == "/") {\r
-                       Ptr[0] = pt + 2\r
-                       return e\r
-               } else if (ch == "=") {\r
-                       var quote = data.charAt(++pt)\r
-                       pt0 = ++pt\r
-                       while (pt < data.length && (ch = data.charAt(pt)) != quote) pt++\r
-                       var attrvalue = data.substring(pt0, pt)\r
-                       e.setAttribute(attrname, attrvalue)\r
-                       pt++\r
-               }\r
-       }\r
-       Ptr[0] = ++pt\r
-       while (Ptr[0] < data.length) {\r
-               var child = _jmolGetDomElement(data, Ptr, "/" + tagname, lvel+1)\r
-               if (!child)break\r
-               e.appendChild(child)\r
-       }\r
-       return e\r
-}\r
-\r
-function _jmolPopup(url) {\r
-  var popup = window.open(url, "JmolPopup",\r
-                          "left=150,top=150,height=400,width=600," +\r
-                          "directories=yes,location=yes,menubar=yes," +\r
-                          "toolbar=yes," +\r
-                          "resizable=yes,scrollbars=yes,status=yes");\r
-  if (popup.focus)\r
-    poup.focus();\r
-}\r
-\r
-function _jmolReadyCallback(name) {\r
-  if (_jmol.debugAlert)\r
-    alert(name + " is ready");\r
-  _jmol.ready["" + name] = true;\r
-}\r
-\r
-function _jmolSterilizeScript(script) {\r
-  script = script.replace(/'/g, "&#39;");\r
-  if (_jmol.debugAlert)\r
-    alert("script:\n" + script);\r
-  return script;\r
-}\r
-\r
-function _jmolSterilizeInline(model) {\r
-  model = model.replace(/\r|\n|\r\n/g, (model.indexOf("|") >= 0 ? "\\/n" : "|")).replace(/'/g, "&#39;");\r
-  if (_jmol.debugAlert)\r
-    alert("inline model:\n" + model);\r
-  return model;\r
-}\r
-\r
-function _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {\r
-  ++_jmol.radioCount;\r
-  groupName != undefined && groupName != null || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));\r
-  if (!script)\r
-    return "";\r
-  labelHtml != undefined && labelHtml != null || (labelHtml = script.substring(0, 32));\r
-  separatorHtml || (separatorHtml = "")\r
-  var scriptIndex = _jmolAddScript(script);\r
-  var eospan = "</span>"\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" \r
-       + groupName + "' id='"+id+"' type='radio' onclick='_jmolClick(this," +\r
-         scriptIndex + _jmol.targetText + ");return true;' onmouseover='_jmolMouseOver(" +\r
-         scriptIndex + ");return true;' onmouseout='_jmolMouseOut()' " +\r
-        (isChecked ? "checked='true' " : "") + _jmol.radioCssText + " />"\r
-  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {\r
-       t += eospan\r
-       eospan = "";\r
-  }\r
-  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan + separatorHtml;\r
-\r
-  return t;\r
-}\r
-\r
-function _jmolFindApplet(target) {\r
-  // first look for the target in the current window\r
-  var applet = _jmolFindAppletInWindow(_jmol.appletWindow != null ? _jmol.appletWindow : window, target);\r
-  // THEN look for the target in child frames\r
-  if (applet == undefined)\r
-    applet = _jmolSearchFrames(window, target);\r
-  // FINALLY look for the target in sibling frames\r
-  if (applet == undefined)\r
-    applet = _jmolSearchFrames(top, target); // look starting in top frame\r
-  return applet;\r
-}\r
-\r
-function _jmolGetApplet(targetSuffix){\r
- var target = "jmolApplet" + (targetSuffix ? targetSuffix : "0");\r
- var applet = _jmolFindApplet(target);\r
- if (applet) return applet\r
- _jmol.alerted || alert("could not find applet " + target);\r
- _jmol.alerted = true;\r
- return null\r
-}\r
-\r
-function _jmolSearchFrames(win, target) {\r
-  var applet;\r
-  var frames = win.frames;\r
-  if (frames && frames.length) { // look in all the frames below this window\r
-   try{\r
-    for (var i = 0; i < frames.length; ++i) {\r
-      applet = _jmolSearchFrames(frames[i], target);\r
-      if (applet)\r
-        return applet;\r
-    }\r
-   }catch(e) {\r
-       if (_jmol.debugAlert)\r
-               alert("Jmol.js _jmolSearchFrames cannot access " + win.name + ".frame[" + i + "] consider using jmolSetAppletWindow()") \r
-   }\r
-  }\r
-  return applet = _jmolFindAppletInWindow(win, target)\r
-}\r
-\r
-function _jmolFindAppletInWindow(win, target) {\r
-    var doc = win.document;\r
-               if (doc.getElementById(target))\r
-      return doc.getElementById(target);\r
-    else if (doc.applets)\r
-      return doc.applets[target];\r
-    else\r
-      return doc[target]; \r
-}\r
-\r
-function _jmolAddScript(script) {\r
-  if (!script)\r
-    return 0;\r
-  var index = _jmol.scripts.length;\r
-  _jmol.scripts[index] = script;\r
-  return index;\r
-}\r
-\r
-function _jmolClick(elementClicked, scriptIndex, targetSuffix) {\r
-  _jmol.element = elementClicked;\r
-  _jmolScriptExecute(elementClicked, _jmol.scripts[scriptIndex], targetSuffix);\r
-}\r
-\r
-function _jmolMenuSelected(menuObject, targetSuffix) {\r
-  var scriptIndex = menuObject.value;\r
-  if (scriptIndex != undefined) {\r
-    _jmolScriptExecute(menuObject, _jmol.scripts[scriptIndex], targetSuffix);\r
-    return;\r
-  }\r
-  var len = menuObject.length;\r
-  if (typeof len == "number") {\r
-    for (var i = 0; i < len; ++i) {\r
-      if (menuObject[i].selected) {\r
-        _jmolClick(menuObject[i], menuObject[i].value, targetSuffix);\r
-       return;\r
-      }\r
-    }\r
-  }\r
-  alert("?Que? menu selected bug #8734");\r
-}\r
-\r
-\r
-_jmol.checkboxMasters = {};\r
-_jmol.checkboxItems = {};\r
-\r
-function jmolSetCheckboxGroup(chkMaster,chkBox) {\r
-       var id = chkMaster;\r
-       if(typeof(id)=="number")id = "jmolCheckbox" + id;\r
-       chkMaster = document.getElementById(id);\r
-       if (!chkMaster)alert("jmolSetCheckboxGroup: master checkbox not found: " + id);\r
-       var m = _jmol.checkboxMasters[id] = {};\r
-       m.chkMaster = chkMaster;\r
-       m.chkGroup = {};\r
-       for (var i = 1; i < arguments.length; i++){\r
-               var id = arguments[i];\r
-               if(typeof(id)=="number")id = "jmolCheckbox" + id;\r
-               checkboxItem = document.getElementById(id);\r
-               if (!checkboxItem)alert("jmolSetCheckboxGroup: group checkbox not found: " + id);\r
-               m.chkGroup[id] = checkboxItem;\r
-               _jmol.checkboxItems[id] = m;\r
-       }\r
-}\r
-\r
-function _jmolNotifyMaster(m){\r
-       //called when a group item is checked\r
-       var allOn = true;\r
-       var allOff = true;\r
-       for (var chkBox in m.chkGroup){\r
-               if(m.chkGroup[chkBox].checked)\r
-                       allOff = false;\r
-               else\r
-                       allOn = false;\r
-       }\r
-       if (allOn)m.chkMaster.checked = true;   \r
-       if (allOff)m.chkMaster.checked = false;\r
-       if ((allOn || allOff) && _jmol.checkboxItems[m.chkMaster.id])\r
-               _jmolNotifyMaster(_jmol.checkboxItems[m.chkMaster.id])\r
-}\r
-\r
-function _jmolNotifyGroup(m, isOn){\r
-       //called when a master item is checked\r
-       for (var chkBox in m.chkGroup){\r
-               var item = m.chkGroup[chkBox]\r
-               item.checked = isOn;\r
-               if (_jmol.checkboxMasters[item.id])\r
-                       _jmolNotifyGroup(_jmol.checkboxMasters[item.id], isOn)\r
-       }\r
-}\r
-\r
-function _jmolCbClick(ckbox, whenChecked, whenUnchecked, targetSuffix) {\r
-  _jmol.control = ckbox\r
-  _jmolClick(ckbox, ckbox.checked ? whenChecked : whenUnchecked, targetSuffix);\r
-  if(_jmol.checkboxMasters[ckbox.id])\r
-       _jmolNotifyGroup(_jmol.checkboxMasters[ckbox.id], ckbox.checked)\r
-  if(_jmol.checkboxItems[ckbox.id])\r
-       _jmolNotifyMaster(_jmol.checkboxItems[ckbox.id])\r
-}\r
-\r
-function _jmolCbOver(ckbox, whenChecked, whenUnchecked) {\r
-  window.status = _jmol.scripts[ckbox.checked ? whenUnchecked : whenChecked];\r
-}\r
-\r
-function _jmolMouseOver(scriptIndex) {\r
-  window.status = _jmol.scripts[scriptIndex];\r
-}\r
-\r
-function _jmolMouseOut() {\r
-  window.status = " ";\r
-  return true;\r
-}\r
-\r
-function _jmolSetCodebase(codebase) {\r
-  _jmol.codebase = codebase ? codebase : ".";\r
-  if (_jmol.debugAlert)\r
-    alert("jmolCodebase=" + _jmol.codebase);\r
-}\r
-\r
-function _jmolOnloadResetForms() {\r
-  // must be evaluated ONLY once\r
-  _jmol.previousOnloadHandler = window.onload;\r
-  window.onload =\r
-  function() {\r
-    with (_jmol) {\r
-      if (buttonCount+checkboxCount+menuCount+radioCount+radioGroupCount > 0) {\r
-        var forms = document.forms;\r
-        for (var i = forms.length; --i >= 0; )\r
-          forms[i].reset();\r
-      }\r
-      if (previousOnloadHandler)\r
-        previousOnloadHandler();\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////\r
-/////extensions for getProperty/////\r
-////////////////////////////////////\r
-\r
-\r
-function _jmolEvalJSON(s,key){\r
- s=s+""\r
- if(!s)return []\r
- if(s.charAt(0)!="{"){\r
-       if(s.indexOf(" | ")>=0)s=s.replace(/\ \|\ /g, "\n")\r
-       return s\r
- }\r
- var A = eval("("+s+")")\r
- if(!A)return\r
- if(key && A[key])A=A[key]\r
- return A\r
-}\r
-\r
-function _jmolEnumerateObject(A,key){\r
- var sout=""\r
- if(typeof(A) == "string" && A!="null"){\r
-       sout+="\n"+key+"=\""+A+"\""\r
- }else if(!isNaN(A)||A==null){\r
-       sout+="\n"+key+"="+(A+""==""?"null":A)\r
- }else if(A.length){\r
-    sout+=key+"=[]"\r
-    for(var i=0;i<A.length;i++){\r
-       sout+="\n"\r
-       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){\r
-               sout+=_jmolEnumerateObject(A[i],key+"["+i+"]")\r
-       }else{\r
-               sout+=key+"["+i+"]="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])\r
-       }\r
-    }\r
- }else{\r
-    if(key != ""){\r
-       sout+=key+"={}"\r
-       key+="."\r
-    }\r
-    \r
-    for(var i in A){\r
-       sout+="\n"\r
-       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){\r
-               sout+=_jmolEnumerateObject(A[i],key+i)\r
-       }else{\r
-               sout+=key+i+"="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])\r
-       }\r
-    }\r
- } \r
- return sout\r
-}\r
-\r
-\r
-function _jmolSortKey0(a,b){\r
- return (a[0]<b[0]?1:a[0]>b[0]?-1:0)\r
-}\r
-\r
-function _jmolSortMessages(A){\r
- if(!A || typeof(A)!="object")return []\r
- var B = []\r
- for(var i=A.length-1;i>=0;i--)for(var j=0;j<A[i].length;j++)B[B.length]=A[i][j]\r
- if(B.length == 0) return\r
- B=B.sort(_jmolSortKey0)\r
- return B\r
-}\r
-\r
-/////////additional extensions //////////\r
-\r
-\r
-function _jmolDomScriptLoad(URL){\r
- //open(URL) //to debug\r
- _jmol.servercall=URL\r
- var node = document.getElementById("_jmolScriptNode")\r
- if (node && _jmol.browser!="msie"){\r
-    document.getElementsByTagName("HEAD")[0].removeChild(node)\r
-    node=null\r
- }\r
- if (node) {\r
-   node.setAttribute("src",URL)\r
- } else {\r
-   node=document.createElement("script")\r
-   node.setAttribute("id","_jmolScriptNode")\r
-   node.setAttribute("type","text/javascript")\r
-   node.setAttribute("src",URL)\r
-   document.getElementsByTagName("HEAD")[0].appendChild(node)\r
- }\r
-}\r
-\r
-\r
-function _jmolExtractPostData(url){\r
- S=url.split("&POST:")\r
- var s=""\r
- for(var i=1;i<S.length;i++){\r
-       KV=S[i].split("=")\r
-       s+="&POSTKEY"+i+"="+KV[0]\r
-       s+="&POSTVALUE"+i+"="+KV[1]\r
- }\r
- return "&url="+escape(S[0])+s\r
-}\r
-\r
-function _jmolLoadModel(targetSuffix,remoteURL,array,isError,errorMessage){\r
- //called by server, but in client\r
- //overload this function to customize return\r
- _jmol.remoteURL=remoteURL\r
- isError && alert(errorMessage)\r
- jmolLoadInlineScript(array.join("\n"),_jmol.optionalscript,targetSuffix)\r
-}\r
-\r
-//////////user property/status functions/////////\r
-\r
-function jmolGetStatus(strStatus,targetSuffix){\r
- return _jmolSortMessages(jmolGetPropertyAsArray("jmolStatus",strStatus,targetSuffix))\r
-}\r
-\r
-function jmolGetPropertyAsArray(sKey,sValue,targetSuffix) {\r
- return _jmolEvalJSON(jmolGetPropertyAsJSON(sKey,sValue,targetSuffix),sKey)\r
-}\r
-\r
-function jmolGetPropertyAsString(sKey,sValue,targetSuffix) {\r
- var applet = _jmolGetApplet(targetSuffix);\r
- sValue == undefined && (sValue="");\r
- return (applet ? applet.getPropertyAsString(sKey,sValue) + "" : "")\r
-}\r
-\r
-function jmolGetPropertyAsJSON(sKey,sValue,targetSuffix) {\r
- sValue == undefined && (sValue = "")\r
- var applet = _jmolGetApplet(targetSuffix);\r
- try {\r
-  return (applet ? applet.getPropertyAsJSON(sKey,sValue) + "" : "")\r
- } catch(e) {\r
-  return ""\r
- }\r
-}\r
-\r
-function jmolGetPropertyAsJavaObject(sKey,sValue,targetSuffix) {\r
- sValue == undefined && (sValue = "")\r
- var applet = _jmolGetApplet(targetSuffix);\r
- return (applet ? applet.getProperty(sKey,sValue) : null)\r
-}\r
-\r
-\r
-function jmolDecodeJSON(s) {\r
- return _jmolEnumerateObject(_jmolEvalJSON(s),"")\r
-}\r
-\r
-\r
-///////// synchronous scripting ////////\r
-\r
-function jmolScriptWait(script, targetSuffix) {\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var Ret=jmolScriptWaitAsArray(script, targetSuffix)\r
-  var s = ""\r
-  for(var i=Ret.length;--i>=0;)\r
-  for(var j=0;j< Ret[i].length;j++)\r
-       s+=Ret[i][j]+"\n"\r
-  return s\r
-}\r
-\r
-function jmolScriptWaitOutput(script, targetSuffix) {\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var ret = ""\r
-  try{\r
-   if (script) {\r
-    _jmolCheckBrowser();\r
-    var applet=_jmolGetApplet(targetSuffix);\r
-    if (applet) ret += applet.scriptWaitOutput(script);\r
-   }\r
-  }catch(e){\r
-  }\r
- return ret;\r
-}\r
-\r
-function jmolEvaluate(molecularMath, targetSuffix) {\r
-\r
-  //carries out molecular math on a model\r
-\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var result = "" + jmolGetPropertyAsJavaObject("evaluate", molecularMath, targetSuffix);\r
-  var s = result.replace(/\-*\d+/,"")\r
-  if (s == "" && !isNaN(parseInt(result)))return parseInt(result);\r
-  var s = result.replace(/\-*\d*\.\d*/,"")\r
-  if (s == "" && !isNaN(parseFloat(result)))return parseFloat(result);\r
-  return result;\r
-}\r
-\r
-function jmolScriptEcho(script, targetSuffix) {\r
-  // returns a newline-separated list of all echos from a script\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var Ret=jmolScriptWaitAsArray(script, targetSuffix)\r
-  var s = ""\r
-  for(var i=Ret.length;--i>=0;)\r
-  for(var j=Ret[i].length;--j>=0;)\r
-        if (Ret[i][j][1] == "scriptEcho")s+=Ret[i][j][3]+"\n"\r
-  return s.replace(/ \| /g, "\n")\r
-}\r
-\r
-\r
-function jmolScriptMessage(script, targetSuffix) {\r
-  // returns a newline-separated list of all messages from a script, ending with "script completed\n"\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var Ret=jmolScriptWaitAsArray(script, targetSuffix)\r
-  var s = ""\r
-  for(var i=Ret.length;--i>=0;)\r
-  for(var j=Ret[i].length;--j>=0;)\r
-        if (Ret[i][j][1] == "scriptStatus")s+=Ret[i][j][3]+"\n"\r
-  return s.replace(/ \| /g, "\n")\r
-}\r
-\r
-\r
-function jmolScriptWaitAsArray(script, targetSuffix) {\r
- var ret = ""\r
- try{\r
-  jmolGetStatus("scriptEcho,scriptMessage,scriptStatus,scriptError",targetSuffix)\r
-  if (script) {\r
-    _jmolCheckBrowser();\r
-    var applet=_jmolGetApplet(targetSuffix);\r
-    if (applet) ret += applet.scriptWait(script);\r
-    ret = _jmolEvalJSON(ret,"jmolStatus")\r
-    if(typeof ret == "object")\r
-       return ret\r
-  }\r
- }catch(e){\r
- }\r
-  return [[ret]]\r
-}\r
-\r
-\r
-\r
-////////////   save/restore orientation   /////////////\r
-\r
-function jmolSaveOrientation(id, targetSuffix) {  \r
- targetSuffix == undefined && (targetSuffix="0")\r
- return _jmol["savedOrientation"+id] = jmolGetPropertyAsArray("orientationInfo","info",targetSuffix).moveTo\r
-}\r
-\r
-function jmolRestoreOrientation(id, targetSuffix) {\r
- targetSuffix == undefined && (targetSuffix="0")\r
- var s=_jmol["savedOrientation"+id]\r
- if (!s || s == "")return\r
- s=s.replace(/1\.0/,"0")\r
- return jmolScriptWait(s,targetSuffix)\r
-}\r
-\r
-function jmolRestoreOrientationDelayed(id, delay, targetSuffix) {\r
- arguments.length < 2 && (delay=1)\r
- targetSuffix == undefined && (targetSuffix="0")\r
- var s=_jmol["savedOrientation"+id]\r
- if (!s || s == "")return\r
- s=s.replace(/1\.0/,delay)\r
- return jmolScriptWait(s,targetSuffix)\r
-}\r
-\r
-////////////  add parameter /////////////\r
-/*\r
- * for adding callbacks or other parameters. Use:\r
-\r
-   jmolSetDocument(0)\r
-   var s= jmolApplet(....)\r
-   s = jmolAppletAddParam(s,"messageCallback", "myFunctionName")\r
-   document.write(s)\r
-   jmolSetDocument(document) // if you want to then write buttons and such normally\r
\r
- */\r
-\r
-function jmolAppletAddParam(appletCode,name,value){\r
-  return (value == "" ? appletCode : appletCode.replace(/\<param/,"\n<param name='"+name+"' value='"+value+"' />\n<param"))\r
-}\r
-\r
-///////////////auto load Research Consortium for Structural Biology (RCSB) data ///////////\r
-\r
-function jmolLoadAjax_STOLAF_RCSB(fileformat,pdbid,optionalscript,targetSuffix){\r
-\r
- _jmol.thismodel || (_jmol.thismodel = "1crn")\r
- _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")\r
- _jmol.RCSBserver || (_jmol.RCSBserver="http://www.rcsb.org")\r
- _jmol.defaultURL_RCSB || (_jmol.defaultURL_RCSB=_jmol.RCSBserver+"/pdb/files/1CRN.CIF")\r
- fileformat || (fileformat="PDB")\r
- pdbid || (pdbid=prompt("Enter a 4-digit PDB ID:",_jmol.thismodel))\r
- if(!pdbid || pdbid.length != 4)return ""\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- var url=_jmol.defaultURL_RCSB.replace(/1CRN/g,pdbid.toUpperCase())\r
- fileformat=="CIF" || (url=url.replace(/CIF/,fileformat))\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thismodel=pdbid\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.thisurl=url\r
- _jmol.modelArray = []\r
- url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)\r
- _jmolDomScriptLoad(url)\r
- return url\r
-}\r
-\r
-\r
-///////////////auto load NIH CACTVS data -- compound name or SMILES ///////////\r
-\r
-function jmolLoadAjax_STOLAF_NIH(compoundid,optionalscript,targetSuffix){\r
- _jmol.thismodel || (_jmol.thismodel = "aspirin")\r
- _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")\r
- _jmol.defaultURL_NIH || (_jmol.defaultURL_NIH="http://cactus.nci.nih.gov/chemical/structure/FILE/file?format=sdf&get3d=True")\r
- compoundid || (compoundid=prompt("Enter a compound name or a SMILES string:",_jmol.thismodel))\r
- if(!compoundid)return ""\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- var url=_jmol.defaultURL_NIH.replace(/FILE/g,compoundid)\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thismodel=compoundid\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.thisurl=url\r
- _jmol.modelArray = []\r
- url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)\r
- _jmolDomScriptLoad(url)\r
- return url\r
-}\r
-\r
-\r
-/////////////// St. Olaf College AJAX server -- ANY URL ///////////\r
-\r
-function jmolLoadAjax_STOLAF_ANY(url, userid, optionalscript,targetSuffix){\r
- _jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm"\r
- _jmol.thisurlANY || (_jmol.thisurlANY = "http://www.stolaf.edu/depts/chemistry/mo/struc/data/ycp3-1.mol")\r
- url || (url=prompt("Enter any (uncompressed file) URL:", _jmol.thisurlANY))\r
- userid || (userid="0")\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.modelArray = []\r
- _jmol.thisurl = url\r
- url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)\r
- _jmolDomScriptLoad(url)\r
-}\r
-\r
-\r
-/////////////// Mineralogical Society of America (MSA) data /////////\r
-\r
-function jmolLoadAjax_MSA(key,value,optionalscript,targetSuffix){\r
-\r
- _jmol.thiskeyMSA || (_jmol.thiskeyMSA = "mineral")\r
- _jmol.thismodelMSA || (_jmol.thismodelMSA = "quartz")\r
- _jmol.ajaxURL_MSA || (_jmol.ajaxURL_MSA="http://rruff.geo.arizona.edu/AMS/result.php?mineral=quartz&viewing=ajaxjs")\r
- key || (key=prompt("Enter a field:", _jmol.thiskeyMSA))\r
- if(!key)return ""\r
- value || (value=prompt("Enter a "+key+":", _jmol.thismodelMSA))\r
- if(!value)return ""\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- optionalscript == 1 && (optionalscript='load "" {1 1 1}')\r
- var url=_jmol.ajaxURL_MSA.replace(/mineral/g,key).replace(/quartz/g,value)\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thiskeyMSA=key\r
- _jmol.thismodelMSA=value\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.thisurl=url\r
- _jmol.modelArray = []\r
- loadModel=_jmolLoadModel\r
- _jmolDomScriptLoad(url)\r
- return url\r
-}\r
-\r
-\r
-\r
-function jmolLoadAjaxJS(url, userid, optionalscript,targetSuffix){\r
- userid || (userid="0")\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thismodel=userid\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.modelArray = []\r
- _jmol.thisurl = url\r
- url+="&returnFunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix\r
- _jmolDomScriptLoad(url)\r
-}\r
-\r
-\r
-//// in case Jmol library has already been loaded:\r
-\r
-}catch(e){}\r
-\r
-///////////////moving atoms //////////////\r
-\r
-// HIGHLY experimental!!\r
-\r
-function jmolSetAtomCoord(i,x,y,z,targetSuffix){\r
-    _jmolCheckBrowser();\r
-      var applet=_jmolGetApplet(targetSuffix);\r
-      if (applet) applet.getProperty('jmolViewer').setAtomCoord(i,x,y,z)\r
-}\r
-\r
-function jmolSetAtomCoordRelative(i,x,y,z,targetSuffix){\r
-    _jmolCheckBrowser();\r
-      var applet=_jmolGetApplet(targetSuffix);\r
-      if (applet) applet.getProperty('jmolViewer').setAtomCoordRelative(i,x,y,z)\r
-}\r
-\r
-\r
-///////////////applet fake for testing buttons/////////////\r
-\r
-\r
-if(_jmol.useNoApplet){\r
-       jmolApplet = function(w){\r
-               var s="<table style='background-color:black' width="+w+"><tr height="+w+">"\r
-               +"<td align=center valign=center style='background-color:white'>"\r
-               +"Applet would be here"\r
-               +"<p><textarea id=fakeApplet rows=5 cols=50></textarea>"\r
-               +"</td></tr></table>"\r
-               return _jmolDocumentWrite(s)\r
-       }\r
-\r
-       _jmolFindApplet = function(){return jmolApplet0}\r
-\r
-       jmolApplet0 = {\r
-        script: function(script){document.getElementById("fakeApplet").value="\njmolScript:\n"+script}\r
-       ,scriptWait: function(script){document.getElementById("fakeApplet").value="\njmolScriptWait:\n"+script} \r
-       ,loadInline: function(data,script){document.getElementById("fakeApplet").value="\njmolLoadInline data:\n"+data+"\n\nscript:\n"+script}\r
-       }\r
-}\r
-\r
-\r
-///////////////////////////////////////////\r
-\r
-  //  This should no longer be needed, jmolResizeApplet() is better; kept for backwards compatibility\r
-  /*\r
-       Resizes absolutely (pixels) or by percent of window (w or h 0.5 means 50%).\r
-       targetSuffix is optional and defaults to zero (first applet in page).\r
-       Both w and h are optional, but needed if you want to use targetSuffix.\r
-               h defaults to w\r
-               w defaults to 100% of window\r
-       If either w or h is between 0 and 1, then it is taken as percent/100.\r
-       If either w or h is greater than 1, then it is taken as a size (pixels). \r
-       */\r
-function jmolResize(w,h,targetSuffix) {\r
- _jmol.alerted = true;\r
- var percentW = (!w ? 100 : w <= 1  && w > 0 ? w * 100 : 0);\r
- var percentH = (!h ? percentW : h <= 1 && h > 0 ? h * 100 : 0);\r
- if (_jmol.browser=="msie") {\r
-   var width=document.body.clientWidth;\r
-   var height=document.body.clientHeight;\r
- } else {\r
-   var netscapeScrollWidth=15;\r
-   var width=window.innerWidth - netscapeScrollWidth;\r
-   var height=window.innerHeight-netscapeScrollWidth;\r
- }\r
- var applet = _jmolGetApplet(targetSuffix);\r
- if(!applet)return;\r
- applet.style.width = (percentW ? width * percentW/100 : w)+"px";\r
- applet.style.height = (percentH ? height * percentH/100 : (h ? h : w))+"px";\r
- //title=width +  " " + height + " " + (new Date());\r
-}\r
-\r
-// 13 Jun 09 -- makes jmolResize() obsolete  (kept for backwards compatibility)\r
-function jmolResizeApplet(size,targetSuffix) {\r
- // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()]\r
- //  Special case: an empty value for width or height is accepted, meaning no change in that dimension.\r
- _jmol.alerted = true;\r
- var applet = _jmolGetApplet(targetSuffix);\r
- if(!applet)return;\r
- var sz = _jmolGetAppletSize(size, "px");\r
- sz[0] && (applet.style.width = sz[0]);\r
- sz[1] && (applet.style.height = sz[1]);\r
-}\r
-\r
-function _jmolGetAppletSize(size, units) {\r
-       /* Accepts single number or 2-value array, each one can be one of:\r
-          percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.)\r
-          [width, height] array of strings is returned, with units added if specified.\r
-          Percent is relative to container div or element (which should have explicitly set size).\r
-       */\r
-  var width, height;\r
-  if ( (typeof size) == "object" && size != null ) {\r
-    width = size[0]; height = size[1];\r
-  } else {\r
-    width = height = size;\r
-  }\r
-  return [_jmolFixDim(width, units), _jmolFixDim(height, units)];\r
-}\r
-\r
-function _jmolFixDim(x, units) {\r
-  var sx = "" + x;\r
-  return (sx.length == 0 ? (units ? "" : _jmol.allowedJmolSize[2])\r
-       : sx.indexOf("%") == sx.length-1 ? sx \r
-       : (x = parseFloat(x)) <= 1 && x > 0 ? x * 100 + "%"\r
-       : (isNaN(x = Math.floor(x)) ? _jmol.allowedJmolSize[2]\r
-               : x < _jmol.allowedJmolSize[0] ? _jmol.allowedJmolSize[0]\r
-           : x > _jmol.allowedJmolSize[1] ? _jmol.allowedJmolSize[1] \r
-        : x) + (units ? units : ""));\r
-}\r
-\r
-\r
-\r
-\r
+/* Jmol 12.0 script library Jmol.js 9:48 PM 1/31/2011 Bob Hanson
+
+ checkbox heirarchy -- see http://chemapps.stolaf.edu/jmol/docs/examples-11/check.htm
+
+    based on:
+ *
+ * Copyright (C) 2004-2005  Miguel, Jmol Development, www.jmol.org
+ *
+ * Contact: hansonr@stolaf.edu
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ *  02111-1307  USA.
+ */
+
+// for documentation see www.jmol.org/jslibrary
+
+try{if(typeof(_jmol)!="undefined")exit()
+
+// place "?NOAPPLET" on your command line to check applet control action with a textarea
+// place "?JMOLJAR=xxxxx" to use a specific jar file
+
+// bob hanson -- jmolResize(w,h) -- resizes absolutely or by percent (w or h 0.5 means 50%)
+//    angel herraez -- update of jmolResize(w,h,targetSuffix) so it is not tied to first applet
+// bob hanson -- jmolEvaluate -- evaluates molecular math 8:37 AM 2/23/2007
+// bob hanson -- jmolScriptMessage -- returns all "scriptStatus" messages 8:37 AM 2/23/2007
+// bob hanson -- jmolScriptEcho -- returns all "scriptEcho" messages 8:37 AM 2/23/2007
+// bob hanson -- jmolScriptWait -- 11:31 AM 5/2/2006
+// bob hanson -- remove trailing separatorHTML in radio groups -- 12:18 PM 5/6/2006
+// bob hanson -- adds support for dynamic DOM script nodes 7:04 AM 5/19/2006
+// bob hanson -- adds try/catch for wiki - multiple code passes 7:05 AM 5/19/2006
+// bob hanson -- auto-initiates to defaultdir/defaultjar -- change as desired.
+// bob hanson -- adding save/restore orientation w/ and w/o delay 11:49 AM 5/25/2006
+// bob hanson -- adding AjaxJS service 11:16 AM 6/3/2006
+// bob hanson -- fix for iframes not available for finding applet
+// bob hanson -- added applet fake ?NOAPPLET URL flag
+// bob hanson -- added jmolSetCallback(calbackName, funcName) 3:32 PM 6/13/2006
+//                     used PRIOR to jmolApplet() or jmolAppletInline()
+//               added 4th array element in jmolRadioGroup -- title
+//               added <span> and id around link, checkbox, radio, menu
+//               fixing AJAX loads for MSIE/Opera-Mozilla incompatibility
+//            -- renamed Jmol-11.js from Jmol-new.js; JmolApplet.jar from JmolAppletProto.jar
+//              renamed Jmol.js for Jmol 11 distribution
+//            -- modified jmolRestoreOrientation() to be immediate, no 1-second delay
+// bob hanson -- jmolScriptWait always returns a string -- 11:23 AM 9/16/2006
+// bh         -- jmolCommandInput()
+// bh         -- jmolSetTranslation(TF) -- forces translation even if there might be message callback issues
+// bh         -- minor fixes suggested by Angel
+// bh         -- adds jmolSetSyncId() and jmolGetSyncId()
+// bh 3/2008  -- adds jmolAppendInlineScript() and jmolAppendInlineArray()
+// bh 3/2008  -- fixes IE7 bug in relation to jmolLoadInlineArray()
+// bh 6/2008  -- adds jmolSetAppletWindow()
+// Angel H. 6/2008  -- added html <label> tags to checkboxes and radio buttons [in jmolCheckbox() and _jmolRadio() functions]
+// bh 7/2008  -- code fix "for(i..." not "for(var i..."
+// bh 12/2008 -- jmolLoadInline, jmolLoadInlineArray, jmolLoadInlineScript, jmolAppendInlineScript, jmolAppendInlineArray all return error message or null (Jmol 11.7.16)
+// bh 12/2008 -- jmolScriptWaitOutput() -- waits for script to complete and delivers output normally sent to console
+
+// bh 5/2009  -- Support for XHTML using jmolSetXHTML(id)
+// ah & bh 6/2009 -- New jmolResizeApplet() more flexible, similar to jmolApplet() size syntax
+// bh 11/2009 -- care in accessing top.document
+// bh 12/2009 -- added jmolSetParameter(name, value)
+// bh 12/2009 -- added PARAMS=name:value;name:value;name:value... for command line
+// bh 12/2009 -- overhaul of target checking
+// bh 1/2010  -- all _xxxx() methods ALWAYS have complete argument list
+// bh 1/2010  -- adds option to run a JavaScript function from any Jmol control. 
+//               This is accomplished by passing an array rather than a script:
+//               jmolHref([myfunc,"my param 1", "my param 2"], "testing")
+//               function myfunc(jmolControlObject, [myfunc,"my param 1", "my param 2"], target){...}
+//               and allows much more flexibility with responding to controls
+// bh 4/2010  -- added jmolSetMemoryMb(nMb)
+// ah 1/2011  -- wider detection of browsers; more browsers now use the object tag instead of the applet tag; 
+//               fix of object tag (removed classid) accounts for change of behavior in Chrome
+// bh 3/2011  -- added jmolLoadAjax_STOLAF_NIH
+
+var defaultdir = "."
+var defaultjar = "JmolApplet.jar"
+
+
+// Note added 12:41 PM 9/21/2008 by Bob Hanson, hansonr@stolaf.edu:
+
+// JMOLJAR=xxxxx.jar on the URL for this page will override
+// the JAR file specified in the jmolInitialize() call.
+
+// The idea is that it can be very useful to test a web page with different JAR files
+// Or for an expert user to substitute a signed applet for an unsigned one
+// so as to use a broader range of models or to create JPEG files, for example.
+
+// If the JAR file is not in the current directory (has any sort of "/" in its name)
+// then the user is presented with a warning and asked whether it is OK to change Jar files.
+// The default action, if the user just presses "OK" is to NOT allow the change. 
+// The user must type the word "yes" in the prompt box for the change to be approved.
+
+// If you don't want people to be able to switch in their own JAR file on your page,
+// simply set this next line to read "var allowJMOLJAR = false".
+
+
+var undefined; // for IE 5 ... wherein undefined is undefined
+
+////////////////////////////////////////////////////////////////
+// Basic Scripting infrastruture
+////////////////////////////////////////////////////////////////
+
+function jmolInitialize(codebaseDirectory, fileNameOrUseSignedApplet) {
+  if (_jmol.initialized)
+    return;
+  _jmol.initialized = true;
+  if(_jmol.jmoljar) {
+    var f = _jmol.jmoljar;
+    if (f.indexOf("/") >= 0) {
+      alert ("This web page URL is requesting that the applet used be " + f + ". This is a possible security risk, particularly if the applet is signed, because signed applets can read and write files on your local machine or network.")
+      var ok = prompt("Do you want to use applet " + f + "? ","yes or no")
+      if (ok == "yes") {
+        codebaseDirectory = f.substring(0, f.lastIndexOf("/"));
+        fileNameOrUseSignedApplet = f.substring(f.lastIndexOf("/") + 1);
+      } else {
+       _jmolGetJarFilename(fileNameOrUseSignedApplet);
+        alert("The web page URL was ignored. Continuing using " + _jmol.archivePath + ' in directory "' + codebaseDirectory + '"');
+      }
+    } else {
+      fileNameOrUseSignedApplet = f;
+    }
+  }
+  _jmolSetCodebase(codebaseDirectory);
+  _jmolGetJarFilename(fileNameOrUseSignedApplet);
+  _jmolOnloadResetForms();
+}
+
+function jmolSetTranslation(TF) {
+  _jmol.params.doTranslate = ''+TF;
+}
+
+function _jmolGetJarFilename(fileNameOrFlag) {
+  _jmol.archivePath =
+    (typeof(fileNameOrFlag) == "string"  ? fileNameOrFlag : (fileNameOrFlag ?  "JmolAppletSigned" : "JmolApplet") + "0.jar");
+}
+
+function jmolSetDocument(doc) {
+  _jmol.currentDocument = doc;
+}
+
+function jmolSetAppletColor(boxbgcolor, boxfgcolor, progresscolor) {
+  _jmolInitCheck();
+  _jmol.params.boxbgcolor = boxbgcolor;
+  if (boxfgcolor)
+    _jmol.params.boxfgcolor = boxfgcolor
+  else if (boxbgcolor == "white" || boxbgcolor == "#FFFFFF")
+    _jmol.params.boxfgcolor = "black";
+  else
+    _jmol.params.boxfgcolor = "white";
+  if (progresscolor)
+    _jmol.params.progresscolor = progresscolor;
+  if (_jmol.debugAlert)
+    alert(" boxbgcolor=" + _jmol.params.boxbgcolor +
+          " boxfgcolor=" + _jmol.params.boxfgcolor +
+          " progresscolor=" + _jmol.params.progresscolor);
+}
+
+function jmolSetAppletWindow(w) {
+  _jmol.appletWindow = w;
+}
+
+function jmolApplet(size, script, nameSuffix) {
+  _jmolInitCheck();
+  return _jmolApplet(size, null, script, nameSuffix);
+}
+
+////////////////////////////////////////////////////////////////
+// Basic controls
+////////////////////////////////////////////////////////////////
+
+// undefined means it wasn't there; null means it was explicitly listed as null (so as to skip it)
+
+function jmolButton(script, label, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolButton" + _jmol.buttonCount);
+  label != undefined && label != null || (label = script.substring(0, 32));
+  ++_jmol.buttonCount;
+  var scriptIndex = _jmolAddScript(script);
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='button' name='" + id + "' id='" + id +
+          "' value='" + label +
+          "' onclick='_jmolClick(this," + scriptIndex + _jmol.targetText +
+          ")' onmouseover='_jmolMouseOver(" + scriptIndex +
+          ");return true' onmouseout='_jmolMouseOut()' " +
+          _jmol.buttonCssText + " /></span>";
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolCheckbox(scriptWhenChecked, scriptWhenUnchecked,
+                      labelHtml, isChecked, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolCheckbox" + _jmol.checkboxCount);
+  ++_jmol.checkboxCount;
+  if (scriptWhenChecked == undefined || scriptWhenChecked == null ||
+      scriptWhenUnchecked == undefined || scriptWhenUnchecked == null) {
+    alert("jmolCheckbox requires two scripts");
+    return;
+  }
+  if (labelHtml == undefined || labelHtml == null) {
+    alert("jmolCheckbox requires a label");
+    return;
+  }
+  var indexChecked = _jmolAddScript(scriptWhenChecked);
+  var indexUnchecked = _jmolAddScript(scriptWhenUnchecked);
+  var eospan = "</span>"
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='checkbox' name='" + id + "' id='" + id +
+          "' onclick='_jmolCbClick(this," +
+          indexChecked + "," + indexUnchecked + _jmol.targetText +
+          ")' onmouseover='_jmolCbOver(this," + indexChecked + "," +
+          indexUnchecked +
+          ");return true' onmouseout='_jmolMouseOut()' " +
+         (isChecked ? "checked='true' " : "")+ _jmol.checkboxCssText + " />" 
+  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {
+       t += eospan
+       eospan = "";
+  }
+  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan;
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolStartNewRadioGroup() {
+  ++_jmol.radioGroupCount;
+}
+
+function jmolRadioGroup(arrayOfRadioButtons, separatorHtml, groupName, id, title) {
+  /*
+
+    array: [radio1,radio2,radio3...]
+    where radioN = ["script","label",isSelected,"id","title"]
+
+  */
+
+  _jmolInitCheck();
+  var type = typeof arrayOfRadioButtons;
+  if (type != "object" || type == null || ! arrayOfRadioButtons.length) {
+    alert("invalid arrayOfRadioButtons");
+    return;
+  }
+  separatorHtml != undefined && separatorHtml != null || (separatorHtml = "&nbsp; ");
+  var len = arrayOfRadioButtons.length;
+  jmolStartNewRadioGroup();
+  groupName || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));
+  var t = "<span id='"+(id ? id : groupName)+"'>";
+  for (var i = 0; i < len; ++i) {
+    if (i == len - 1)
+      separatorHtml = "";
+    var radio = arrayOfRadioButtons[i];
+    type = typeof radio;
+    if (type == "object") {
+      t += _jmolRadio(radio[0], radio[1], radio[2], separatorHtml, groupName, (radio.length > 3 ? radio[3]: (id ? id : groupName)+"_"+i), (radio.length > 4 ? radio[4] : 0), title);
+    } else {
+      t += _jmolRadio(radio, null, null, separatorHtml, groupName, (id ? id : groupName)+"_"+i, title);
+    }
+  }
+  t+="</span>"
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+
+function jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {
+  _jmolInitCheck();
+  if (_jmol.radioGroupCount == 0)
+    ++_jmol.radioGroupCount;
+  var t = _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, (id ? id : groupName + "_" + _jmol.radioCount), title ? title : 0);
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolLink(script, label, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolLink" + _jmol.linkCount);
+  label != undefined && label != null || (label = script.substring(0, 32));
+  ++_jmol.linkCount;
+  var scriptIndex = _jmolAddScript(script);
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><a name='" + id + "' id='" + id + 
+          "' href='javascript:_jmolClick(this," + scriptIndex + _jmol.targetText + ");' onmouseover='_jmolMouseOver(" + scriptIndex +
+          ");return true;' onmouseout='_jmolMouseOut()' " +
+          _jmol.linkCssText + ">" + label + "</a></span>";
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolCommandInput(label, size, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolCmd" + _jmol.cmdCount);
+  label != undefined && label != null || (label = "Execute");
+  size != undefined && !isNaN(size) || (size = 60);
+  ++_jmol.cmdCount;
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" + id + "' id='" + id + 
+          "' size='"+size+"' onkeypress='_jmolCommandKeyPress(event,\""+id+"\"" + _jmol.targetText + ")'><input type=button value = '"+label+"' onclick='jmolScript(document.getElementById(\""+id+"\").value" + _jmol.targetText + ")' /></span>";
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function _jmolCommandKeyPress(e, id, target) {
+       var keycode = (window.event ? window.event.keyCode : e ? e.which : 0);
+       if (keycode == 13) {
+               var inputBox = document.getElementById(id)
+               _jmolScriptExecute(inputBox, inputBox.value, target)
+       }
+}
+
+function _jmolScriptExecute(element,script,target) {
+       if (typeof(script) == "object")
+               script[0](element, script, target)
+       else
+               jmolScript(script, target) 
+}
+
+function jmolMenu(arrayOfMenuItems, size, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolMenu" + _jmol.menuCount);
+  ++_jmol.menuCount;
+  var type = typeof arrayOfMenuItems;
+  if (type != null && type == "object" && arrayOfMenuItems.length) {
+    var len = arrayOfMenuItems.length;
+    if (typeof size != "number" || size == 1)
+      size = null;
+    else if (size < 0)
+      size = len;
+    var sizeText = size ? " size='" + size + "' " : "";
+    var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><select name='" + id + "' id='" + id +
+            "' onChange='_jmolMenuSelected(this" + _jmol.targetText + ")'" +
+            sizeText + _jmol.menuCssText + ">";
+    for (var i = 0; i < len; ++i) {
+      var menuItem = arrayOfMenuItems[i];
+      type = typeof menuItem;
+      var script, text;
+      var isSelected = undefined;
+      if (type == "object" && menuItem != null) {
+        script = menuItem[0];
+        text = menuItem[1];
+        isSelected = menuItem[2];
+      } else {
+        script = text = menuItem;
+      }
+      text != undefined && text != null || (text = script);            
+      if (script=="#optgroup") {
+        t += "<optgroup label='" + text + "'>";          
+         } else if (script=="#optgroupEnd") {
+        t += "</optgroup>";      
+         } else {              
+        var scriptIndex = _jmolAddScript(script);
+        var selectedText = isSelected ? "' selected='true'>" : "'>";
+        t += "<option value='" + scriptIndex + selectedText + text + "</option>";
+      }
+    }
+    t += "</select></span>";
+    if (_jmol.debugAlert)
+      alert(t);
+    return _jmolDocumentWrite(t);
+  }
+}
+
+function jmolHtml(html) {
+  return _jmolDocumentWrite(html);
+}
+
+function jmolBr() {
+  return _jmolDocumentWrite("<br />");
+}
+
+////////////////////////////////////////////////////////////////
+// advanced scripting functions
+////////////////////////////////////////////////////////////////
+
+function jmolDebugAlert(enableAlerts) {
+  _jmol.debugAlert = (enableAlerts == undefined || enableAlerts)
+}
+
+function jmolAppletInline(size, inlineModel, script, nameSuffix) {
+  _jmolInitCheck();
+  return _jmolApplet(size, _jmolSterilizeInline(inlineModel),
+                     script, nameSuffix);
+}
+
+function jmolSetTarget(targetSuffix) {
+  _jmol.targetSuffix = targetSuffix;
+  _jmol.targetText = targetSuffix ? ",\"" + targetSuffix + "\"" : ",0";
+}
+
+function jmolScript(script, targetSuffix) {
+  if (script) {
+    _jmolCheckBrowser();
+    if (targetSuffix == "all") {
+      with (_jmol) {
+       for (var i = 0; i < appletSuffixes.length; ++i) {
+         var applet = _jmolGetApplet(appletSuffixes[i]);
+          if (applet) applet.script(script);
+        }
+      }
+    } else {
+      var applet=_jmolGetApplet(targetSuffix);
+      if (applet) applet.script(script);
+    }
+  }
+}
+
+function jmolLoadInline(model, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  if (typeof(model) == "string")
+    return applet.loadInlineString(model, "", false);
+  else
+    return applet.loadInlineArray(model, "", false);
+}
+
+
+function jmolLoadInlineScript(model, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  return applet.loadInlineString(model, script, false);
+}
+
+
+function jmolLoadInlineArray(ModelArray, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  script || (script="")
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  try {
+    return applet.loadInlineArray(ModelArray, script, false);
+  } catch (err) {
+    //IE 7 bug
+    return applet.loadInlineString(ModelArray.join("\n"), script, false);
+  }
+}
+
+function jmolAppendInlineArray(ModelArray, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  script || (script="")
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  try {
+    return applet.loadInlineArray(ModelArray, script, true);
+  } catch (err) {
+    //IE 7 bug
+    return applet.loadInlineString(ModelArray.join("\n"), script, true);
+  }
+}
+
+function jmolAppendInlineScript(model, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  return applet.loadInlineString(model, script, true);
+}
+
+function jmolCheckBrowser(action, urlOrMessage, nowOrLater) {
+  if (typeof action == "string") {
+    action = action.toLowerCase();
+    action == "alert" || action == "redirect" || action == "popup" || (action = null);
+  }
+  if (typeof action != "string")
+    alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +
+          "action must be 'alert', 'redirect', or 'popup'");
+  else {
+    if (typeof urlOrMessage != "string")
+      alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +
+            "urlOrMessage must be a string");
+    else {
+      _jmol.checkBrowserAction = action;
+      _jmol.checkBrowserUrlOrMessage = urlOrMessage;
+    }
+  }
+  if (typeof nowOrLater == "string" && nowOrLater.toLowerCase() == "now")
+    _jmolCheckBrowser();
+}
+
+////////////////////////////////////////////////////////////////
+// Cascading Style Sheet Class support
+////////////////////////////////////////////////////////////////
+
+function jmolSetAppletCssClass(appletCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.appletCssClass = appletCssClass;
+    _jmol.appletCssText = appletCssClass ? "class='" + appletCssClass + "' " : "";
+  }
+}
+
+function jmolSetButtonCssClass(buttonCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.buttonCssClass = buttonCssClass;
+    _jmol.buttonCssText = buttonCssClass ? "class='" + buttonCssClass + "' " : "";
+  }
+}
+
+function jmolSetCheckboxCssClass(checkboxCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.checkboxCssClass = checkboxCssClass;
+    _jmol.checkboxCssText = checkboxCssClass ? "class='" + checkboxCssClass + "' " : "";
+  }
+}
+
+function jmolSetRadioCssClass(radioCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.radioCssClass = radioCssClass;
+    _jmol.radioCssText = radioCssClass ? "class='" + radioCssClass + "' " : "";
+  }
+}
+
+function jmolSetLinkCssClass(linkCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.linkCssClass = linkCssClass;
+    _jmol.linkCssText = linkCssClass ? "class='" + linkCssClass + "' " : "";
+  }
+}
+
+function jmolSetMenuCssClass(menuCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.menuCssClass = menuCssClass;
+    _jmol.menuCssText = menuCssClass ? "class='" + menuCssClass + "' " : "";
+  }
+}
+
+////////////////////////////////////////////////////////////////
+// functions for INTERNAL USE ONLY which are subject to change
+// use at your own risk ... you have been WARNED!
+////////////////////////////////////////////////////////////////
+var _jmol = {
+  currentDocument: document,
+
+  debugAlert: false,
+  
+  codebase: "",
+  modelbase: ".",
+  
+  appletCount: 0,
+  appletSuffixes: [],
+  appletWindow: null,
+  allowedJmolSize: [25, 2048, 300],   // min, max, default (pixels)
+         /*  By setting the _jmol.allowedJmolSize[] variable in the webpage 
+             before calling jmolApplet(), limits for applet size can be overriden.
+                   2048 standard for GeoWall (http://geowall.geo.lsa.umich.edu/home.html)
+         */  
+  buttonCount: 0,
+  checkboxCount: 0,
+  linkCount: 0,
+  cmdCount: 0,
+  menuCount: 0,
+  radioCount: 0,
+  radioGroupCount: 0,
+  
+  appletCssClass: null,
+  appletCssText: "",
+  buttonCssClass: null,
+  buttonCssText: "",
+  checkboxCssClass: null,
+  checkboxCssText: "",
+  java_arguments: "-Xmx512m",
+  radioCssClass: null,
+  radioCssText: "",
+  linkCssClass: null,
+  linkCssText: "",
+  menuCssClass: null,
+  menuCssText: "",
+  
+  targetSuffix: 0,
+  targetText: ",0",
+  scripts: [""],
+  params: {
+       syncId: ("" + Math.random()).substring(3),
+       progressbar: "true",
+       progresscolor: "blue",
+       boxbgcolor: "black",
+       boxfgcolor: "white",
+       boxmessage: "Downloading JmolApplet ..."
+  },
+  ua: navigator.userAgent.toLowerCase(),
+  // uaVersion: parseFloat(navigator.appVersion),  // not used
+  
+  os: "unknown",
+  browser: "unknown",
+  browserVersion: 0,
+  hasGetElementById: !!document.getElementById,
+  isJavaEnabled: navigator.javaEnabled(),
+  // isNetscape47Win: false,  // not used, N4.7 is no longer supported even for detection
+  useIEObject: false,
+  useHtml4Object: false,
+  
+  windowsClassId: "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93",
+  windowsCabUrl:
+   "http://java.sun.com/update/1.6.0/jinstall-6u22-windows-i586.cab",
+
+  isBrowserCompliant: false,
+  isJavaCompliant: false,
+  isFullyCompliant: false,
+
+  initialized: false,
+  initChecked: false,
+  
+  browserChecked: false,
+  checkBrowserAction: "alert",
+  checkBrowserUrlOrMessage: null,
+
+  archivePath: null, // JmolApplet0.jar OR JmolAppletSigned0.jar
+
+  previousOnloadHandler: null,
+
+  jmoljar: null,  
+  useNoApplet: false,
+
+  ready: {}
+}
+
+with (_jmol) {
+  function _jmolTestUA(candidate) {
+    var ua = _jmol.ua;
+    var index = ua.indexOf(candidate);
+    if (index < 0)
+      return false;
+    _jmol.browser = candidate;
+    _jmol.browserVersion = parseFloat(ua.substring(index+candidate.length+1));
+    return true;
+  }
+  
+  function _jmolTestOS(candidate) {
+    if (_jmol.ua.indexOf(candidate) < 0)
+      return false;
+    _jmol.os = candidate;
+    return true;
+  }
+  
+  _jmolTestUA("konqueror") ||
+  _jmolTestUA("webkit") ||
+  _jmolTestUA("omniweb") ||
+  _jmolTestUA("opera") ||
+  _jmolTestUA("webtv") ||
+  _jmolTestUA("icab") ||
+  _jmolTestUA("msie") ||
+  (_jmol.ua.indexOf("compatible") < 0 && _jmolTestUA("mozilla")); //Netscape, Mozilla, Seamonkey, Firefox and anything assimilated
+  
+  _jmolTestOS("linux") ||
+  _jmolTestOS("unix") ||
+  _jmolTestOS("mac") ||
+  _jmolTestOS("win");
+
+  /* not used:
+       isNetscape47Win = (os == "win" && browser == "mozilla" &&
+                     browserVersion >= 4.78 && browserVersion <= 4.8);
+       */
+
+  if (os == "win") {
+    isBrowserCompliant = hasGetElementById;
+  } else if (os == "mac") { // mac is the problem child :-(
+    if (browser == "mozilla" && browserVersion >= 5) {
+      // miguel 2004 11 17
+      // checking the plugins array does not work because
+      // Netscape 7.2 OS X still has Java 1.3.1 listed even though
+      // javaplugin.sf.net is installed to upgrade to 1.4.2
+      eval("try {var v = java.lang.System.getProperty('java.version');" +
+           " _jmol.isBrowserCompliant = v >= '1.4.2';" +
+           " } catch (e) { }");
+    } else if (browser == "opera" && browserVersion <= 7.54) {
+      isBrowserCompliant = false;
+    } else {
+      isBrowserCompliant = hasGetElementById &&
+        !((browser == "msie") ||
+          (browser == "webkit" && browserVersion < 125.12));
+    }
+  } else if (os == "linux" || os == "unix") {
+    if (browser == "konqueror" && browserVersion <= 3.3)
+      isBrowserCompliant = false;
+    else
+      isBrowserCompliant = hasGetElementById;
+  } else { // other OS
+    isBrowserCompliant = hasGetElementById;
+  }
+
+  // possibly more checks in the future for this
+  isJavaCompliant = isJavaEnabled;
+
+  isFullyCompliant = isBrowserCompliant && isJavaCompliant;
+
+  useIEObject = (os == "win" && browser == "msie" && browserVersion >= 5.5);
+  useHtml4Object =
+   (browser == "mozilla" && browserVersion >= 5) ||
+   (browser == "opera" && browserVersion >= 8) ||
+   (browser == "webkit" && browserVersion >= 412.2);
+ try {
+  if (top.location.search.indexOf("JMOLJAR=")>=0)
+    jmoljar = top.location.search.split("JMOLJAR=")[1].split("&")[0];
+ } catch(e) {
+  // can't access top.location
+ }
+ try {
+  useNoApplet = (top.location.search.indexOf("NOAPPLET")>=0);
+ } catch(e) {
+  // can't access top.document
+ }
+}
+
+function jmolSetMemoryMb(nMb) {
+  _jmol.java_arguments = "-Xmx" + Math.round(nMb) + "m"
+}
+
+function jmolSetParameter(name,value) {
+  _jmol.params[name] = value
+}
+
+function jmolSetCallback(callbackName,funcName) {
+  _jmol.params[callbackName] = funcName
+}
+
+ try {
+// note this is done FIRST, so it cannot override a setting done by the developer
+  if (top.location.search.indexOf("PARAMS=")>=0) {
+    var pars = unescape(top.location.search.split("PARAMS=")[1].split("&")[0]).split(";");
+    for (var i = 0; i < pars.length; i++) {
+      var p = pars[i].split(":");
+      jmolSetParameter(p[0],p[1]);
+    }
+  }
+ } catch(e) {
+  // can't access top.location
+ }
+
+function jmolSetSyncId(n) {
+  return _jmol.params["syncId"] = n
+}
+
+function jmolGetSyncId() {
+  return _jmol.params["syncId"]
+}
+
+function jmolSetLogLevel(n) {
+  _jmol.params.logLevel = ''+n;
+}
+
+       /*  AngelH, mar2007:
+               By (re)setting these variables in the webpage before calling jmolApplet(), 
+               a custom message can be provided (e.g. localized for user's language) when no Java is installed.
+       */
+if (noJavaMsg==undefined) var noJavaMsg = 
+        "You do not have Java applets enabled in your web browser, or your browser is blocking this applet.<br />\n" +
+        "Check the warning message from your browser and/or enable Java applets in<br />\n" +
+        "your web browser preferences, or install the Java Runtime Environment from <a href='http://www.java.com'>www.java.com</a><br />";
+if (noJavaMsg2==undefined) var noJavaMsg2 = 
+        "You do not have the<br />\n" +
+        "Java Runtime Environment<br />\n" +
+        "installed for applet support.<br />\n" +
+        "Visit <a href='http://www.java.com'>www.java.com</a>";
+function _jmolApplet(size, inlineModel, script, nameSuffix) {
+       /*  AngelH, mar2007
+               Fixed percent / pixel business, to avoid browser errors:
+               put "px" where needed, avoid where not.
+
+           Bob Hanson, 1/2010
+               Fixed inline escape changing returns to |               
+       */
+  with (_jmol) {
+    nameSuffix == undefined && (nameSuffix = appletCount);
+    appletSuffixes.push(nameSuffix);
+    ++appletCount;
+    script || (script = "select *");
+    var sz = _jmolGetAppletSize(size);
+    var widthAndHeight = " width='" + sz[0] + "' height='" + sz[1] + "' ";
+    var tHeader, tFooter;
+    codebase || jmolInitialize(".");
+    if (useIEObject || useHtml4Object) {
+      params.archive = archivePath;
+      params.mayscript = 'true';
+      params.codebase = codebase;
+      params.code = 'JmolApplet';
+      tHeader = 
+        "<object name='jmolApplet" + nameSuffix +
+        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +
+                               widthAndHeight + "\n";
+      tFooter = "</object>";
+    }
+    if (java_arguments)
+      params.java_arguments = java_arguments;
+    if (useIEObject) { // use MSFT IE6 object tag with .cab file reference
+      tHeader += " classid='" + windowsClassId + "'\n" +
+      (windowsCabUrl ? " codebase='" + windowsCabUrl + "'\n" : "") + ">\n";
+    } else if (useHtml4Object) { // use HTML4 object tag
+      tHeader += " type='application/x-java-applet'\n>\n";
+                               /*      " classid='java:JmolApplet'\n" +        AH removed this
+                                 Chromium Issue 62076:         Java Applets using an <object> with a classid paramater don't load.
+                                       http://code.google.com/p/chromium/issues/detail?id=62076
+                                       They say this is the correct behavior according to the spec, and there's no indication at this point 
+                                       that WebKit will be changing the handling, so eventually Safari will acquire this behavior too.
+                                       Removing the classid parameter seems to be well tolerated by all browsers (even IE!).
+                               */
+    } else { // use applet tag
+      tHeader = 
+        "<applet name='jmolApplet" + nameSuffix +
+        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +
+                               widthAndHeight + "\n" +
+        " code='JmolApplet'" +
+        " archive='" + archivePath + "' codebase='" + codebase + "'\n" +
+        " mayscript='true'>\n";
+      tFooter = "</applet>";
+    }
+    var visitJava;
+    if (useIEObject || useHtml4Object) {
+               var szX = "width:" + sz[0]
+               if ( szX.indexOf("%")==-1 ) szX+="px" 
+               var szY = "height:" + sz[1]
+               if ( szY.indexOf("%")==-1 ) szY+="px" 
+      visitJava =
+        "<p style='background-color:yellow; color:black; " +
+               szX + ";" + szY + ";" +
+        // why doesn't this vertical-align work?
+       "text-align:center;vertical-align:middle;'>\n" +
+               noJavaMsg +
+        "</p>";
+    } else {
+      visitJava =
+        "<table bgcolor='yellow'><tr>" +
+        "<td align='center' valign='middle' " + widthAndHeight + "><font color='black'>\n" +
+               noJavaMsg2 +
+        "</font></td></tr></table>";
+    }
+    params.loadInline = (inlineModel ? inlineModel : "");
+    params.script = (script ? _jmolSterilizeScript(script) : "");
+    var t = tHeader + _jmolParams() + visitJava + tFooter;
+    jmolSetTarget(nameSuffix);
+    ready["jmolApplet" + nameSuffix] = false;
+    if (_jmol.debugAlert)
+      alert(t);
+    return _jmolDocumentWrite(t);
+  }
+}
+
+function _jmolParams() {
+ var t = "";
+ for (var i in _jmol.params)
+       if(_jmol.params[i]!="")
+                t+="  <param name='"+i+"' value='"+_jmol.params[i]+"' />\n";
+ return t
+}
+
+function _jmolInitCheck() {
+  if (_jmol.initChecked)
+    return;
+  _jmol.initChecked = true;
+  jmolInitialize(defaultdir, defaultjar)
+}
+
+function _jmolCheckBrowser() {
+  with (_jmol) {
+    if (browserChecked)
+      return;
+    browserChecked = true;
+  
+    if (isFullyCompliant)
+      return true;
+
+    if (checkBrowserAction == "redirect")
+      location.href = checkBrowserUrlOrMessage;
+    else if (checkBrowserAction == "popup")
+      _jmolPopup(checkBrowserUrlOrMessage);
+    else {
+      var msg = checkBrowserUrlOrMessage;
+      if (msg == null)
+        msg = "Your web browser is not fully compatible with Jmol\n\n" +
+              "browser: " + browser +
+              "   version: " + browserVersion +
+              "   os: " + os +
+              "   isBrowserCompliant: " + isBrowserCompliant +
+              "   isJavaCompliant: " + isJavaCompliant +
+              "\n\n" + ua;
+      alert(msg);
+    }
+  }
+  return false;
+}
+
+function jmolSetXHTML(id) {
+       _jmol.isXHTML = true
+       _jmol.XhtmlElement = null
+       _jmol.XhtmlAppendChild = false
+       if (id){
+               _jmol.XhtmlElement = document.getElementById(id)
+               _jmol.XhtmlAppendChild = true
+       }
+}
+
+function _jmolDocumentWrite(text) {
+       if (_jmol.currentDocument) {
+               if (_jmol.isXHTML && !_jmol.XhtmlElement) {
+                       var s = document.getElementsByTagName("script")
+                       _jmol.XhtmlElement = s.item(s.length - 1)
+                       _jmol.XhtmlAppendChild = false
+               }
+               if (_jmol.XhtmlElement) {
+                       _jmolDomDocumentWrite(text)
+               } else {
+                       _jmol.currentDocument.write(text);
+               }
+       }
+       return text;
+}
+
+function _jmolDomDocumentWrite(data) {
+       var pt = 0
+       var Ptr = []
+       Ptr[0] = 0
+       while (Ptr[0] < data.length) {
+               var child = _jmolGetDomElement(data, Ptr)
+               if (!child)break
+               if (_jmol.XhtmlAppendChild)
+                       _jmol.XhtmlElement.appendChild(child)
+               else
+                       _jmol.XhtmlElement.parentNode.insertBefore(child, _jmol.XhtmlElement); 
+       }
+}
+function _jmolGetDomElement(data, Ptr, closetag, lvel) {
+       var e = document.createElement("span")
+       e.innerHTML = data
+       Ptr[0] = data.length
+       return e
+
+//unnecessary?
+
+       closetag || (closetag = "")
+       lvel || (lvel = 0)
+       var pt0 = Ptr[0]
+       var pt = pt0
+       while (pt < data.length && data.charAt(pt) != "<") pt++
+       if (pt != pt0) {
+               var text = data.substring(pt0, pt)
+               Ptr[0] = pt
+               return document.createTextNode(text)
+       }       
+       pt0 = ++pt
+       var ch
+       while (pt < data.length && "\n\r\t >".indexOf(ch = data.charAt(pt)) < 0) pt++
+       var tagname = data.substring(pt0, pt)
+       var e = (tagname == closetag  || tagname == "/" ? "" 
+               : document.createElementNS ? document.createElementNS('http://www.w3.org/1999/xhtml', tagname)
+               : document.createElement(tagname));
+       if (ch == ">") {
+               Ptr[0] = ++pt
+               return e
+       }
+       while (pt < data.length && (ch = data.charAt(pt)) != ">") {
+               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++
+               pt0 = pt
+               while (pt < data.length && "\n\r\t =/>".indexOf(ch = data.charAt(pt)) < 0) pt++
+               var attrname = data.substring(pt0, pt).toLowerCase()
+               if (attrname && ch != "=") 
+                       e.setAttribute(attrname, "true")
+               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++
+               if (ch == "/") {
+                       Ptr[0] = pt + 2
+                       return e
+               } else if (ch == "=") {
+                       var quote = data.charAt(++pt)
+                       pt0 = ++pt
+                       while (pt < data.length && (ch = data.charAt(pt)) != quote) pt++
+                       var attrvalue = data.substring(pt0, pt)
+                       e.setAttribute(attrname, attrvalue)
+                       pt++
+               }
+       }
+       Ptr[0] = ++pt
+       while (Ptr[0] < data.length) {
+               var child = _jmolGetDomElement(data, Ptr, "/" + tagname, lvel+1)
+               if (!child)break
+               e.appendChild(child)
+       }
+       return e
+}
+
+function _jmolPopup(url) {
+  var popup = window.open(url, "JmolPopup",
+                          "left=150,top=150,height=400,width=600," +
+                          "directories=yes,location=yes,menubar=yes," +
+                          "toolbar=yes," +
+                          "resizable=yes,scrollbars=yes,status=yes");
+  if (popup.focus)
+    poup.focus();
+}
+
+function _jmolReadyCallback(name) {
+  if (_jmol.debugAlert)
+    alert(name + " is ready");
+  _jmol.ready["" + name] = true;
+}
+
+function _jmolSterilizeScript(script) {
+  script = script.replace(/'/g, "&#39;");
+  if (_jmol.debugAlert)
+    alert("script:\n" + script);
+  return script;
+}
+
+function _jmolSterilizeInline(model) {
+  model = model.replace(/\r|\n|\r\n/g, (model.indexOf("|") >= 0 ? "\\/n" : "|")).replace(/'/g, "&#39;");
+  if (_jmol.debugAlert)
+    alert("inline model:\n" + model);
+  return model;
+}
+
+function _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {
+  ++_jmol.radioCount;
+  groupName != undefined && groupName != null || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));
+  if (!script)
+    return "";
+  labelHtml != undefined && labelHtml != null || (labelHtml = script.substring(0, 32));
+  separatorHtml || (separatorHtml = "")
+  var scriptIndex = _jmolAddScript(script);
+  var eospan = "</span>"
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" 
+       + groupName + "' id='"+id+"' type='radio' onclick='_jmolClick(this," +
+         scriptIndex + _jmol.targetText + ");return true;' onmouseover='_jmolMouseOver(" +
+         scriptIndex + ");return true;' onmouseout='_jmolMouseOut()' " +
+        (isChecked ? "checked='true' " : "") + _jmol.radioCssText + " />"
+  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {
+       t += eospan
+       eospan = "";
+  }
+  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan + separatorHtml;
+
+  return t;
+}
+
+function _jmolFindApplet(target) {
+  // first look for the target in the current window
+  var applet = _jmolFindAppletInWindow(_jmol.appletWindow != null ? _jmol.appletWindow : window, target);
+  // THEN look for the target in child frames
+  if (applet == undefined)
+    applet = _jmolSearchFrames(window, target);
+  // FINALLY look for the target in sibling frames
+  if (applet == undefined)
+    applet = _jmolSearchFrames(top, target); // look starting in top frame
+  return applet;
+}
+
+function _jmolGetApplet(targetSuffix){
+ var target = "jmolApplet" + (targetSuffix ? targetSuffix : "0");
+ var applet = _jmolFindApplet(target);
+ if (applet) return applet
+ _jmol.alerted || alert("could not find applet " + target);
+ _jmol.alerted = true;
+ return null
+}
+
+function _jmolSearchFrames(win, target) {
+  var applet;
+  var frames = win.frames;
+  if (frames && frames.length) { // look in all the frames below this window
+   try{
+    for (var i = 0; i < frames.length; ++i) {
+      applet = _jmolSearchFrames(frames[i], target);
+      if (applet)
+        return applet;
+    }
+   }catch(e) {
+       if (_jmol.debugAlert)
+               alert("Jmol.js _jmolSearchFrames cannot access " + win.name + ".frame[" + i + "] consider using jmolSetAppletWindow()") 
+   }
+  }
+  return applet = _jmolFindAppletInWindow(win, target)
+}
+
+function _jmolFindAppletInWindow(win, target) {
+    var doc = win.document;
+               if (doc.getElementById(target))
+      return doc.getElementById(target);
+    else if (doc.applets)
+      return doc.applets[target];
+    else
+      return doc[target]; 
+}
+
+function _jmolAddScript(script) {
+  if (!script)
+    return 0;
+  var index = _jmol.scripts.length;
+  _jmol.scripts[index] = script;
+  return index;
+}
+
+function _jmolClick(elementClicked, scriptIndex, targetSuffix) {
+  _jmol.element = elementClicked;
+  _jmolScriptExecute(elementClicked, _jmol.scripts[scriptIndex], targetSuffix);
+}
+
+function _jmolMenuSelected(menuObject, targetSuffix) {
+  var scriptIndex = menuObject.value;
+  if (scriptIndex != undefined) {
+    _jmolScriptExecute(menuObject, _jmol.scripts[scriptIndex], targetSuffix);
+    return;
+  }
+  var len = menuObject.length;
+  if (typeof len == "number") {
+    for (var i = 0; i < len; ++i) {
+      if (menuObject[i].selected) {
+        _jmolClick(menuObject[i], menuObject[i].value, targetSuffix);
+       return;
+      }
+    }
+  }
+  alert("?Que? menu selected bug #8734");
+}
+
+
+_jmol.checkboxMasters = {};
+_jmol.checkboxItems = {};
+
+function jmolSetCheckboxGroup(chkMaster,chkBox) {
+       var id = chkMaster;
+       if(typeof(id)=="number")id = "jmolCheckbox" + id;
+       chkMaster = document.getElementById(id);
+       if (!chkMaster)alert("jmolSetCheckboxGroup: master checkbox not found: " + id);
+       var m = _jmol.checkboxMasters[id] = {};
+       m.chkMaster = chkMaster;
+       m.chkGroup = {};
+       for (var i = 1; i < arguments.length; i++){
+               var id = arguments[i];
+               if(typeof(id)=="number")id = "jmolCheckbox" + id;
+               checkboxItem = document.getElementById(id);
+               if (!checkboxItem)alert("jmolSetCheckboxGroup: group checkbox not found: " + id);
+               m.chkGroup[id] = checkboxItem;
+               _jmol.checkboxItems[id] = m;
+       }
+}
+
+function _jmolNotifyMaster(m){
+       //called when a group item is checked
+       var allOn = true;
+       var allOff = true;
+       for (var chkBox in m.chkGroup){
+               if(m.chkGroup[chkBox].checked)
+                       allOff = false;
+               else
+                       allOn = false;
+       }
+       if (allOn)m.chkMaster.checked = true;   
+       if (allOff)m.chkMaster.checked = false;
+       if ((allOn || allOff) && _jmol.checkboxItems[m.chkMaster.id])
+               _jmolNotifyMaster(_jmol.checkboxItems[m.chkMaster.id])
+}
+
+function _jmolNotifyGroup(m, isOn){
+       //called when a master item is checked
+       for (var chkBox in m.chkGroup){
+               var item = m.chkGroup[chkBox]
+               item.checked = isOn;
+               if (_jmol.checkboxMasters[item.id])
+                       _jmolNotifyGroup(_jmol.checkboxMasters[item.id], isOn)
+       }
+}
+
+function _jmolCbClick(ckbox, whenChecked, whenUnchecked, targetSuffix) {
+  _jmol.control = ckbox
+  _jmolClick(ckbox, ckbox.checked ? whenChecked : whenUnchecked, targetSuffix);
+  if(_jmol.checkboxMasters[ckbox.id])
+       _jmolNotifyGroup(_jmol.checkboxMasters[ckbox.id], ckbox.checked)
+  if(_jmol.checkboxItems[ckbox.id])
+       _jmolNotifyMaster(_jmol.checkboxItems[ckbox.id])
+}
+
+function _jmolCbOver(ckbox, whenChecked, whenUnchecked) {
+  window.status = _jmol.scripts[ckbox.checked ? whenUnchecked : whenChecked];
+}
+
+function _jmolMouseOver(scriptIndex) {
+  window.status = _jmol.scripts[scriptIndex];
+}
+
+function _jmolMouseOut() {
+  window.status = " ";
+  return true;
+}
+
+function _jmolSetCodebase(codebase) {
+  _jmol.codebase = codebase ? codebase : ".";
+  if (_jmol.debugAlert)
+    alert("jmolCodebase=" + _jmol.codebase);
+}
+
+function _jmolOnloadResetForms() {
+  // must be evaluated ONLY once
+  _jmol.previousOnloadHandler = window.onload;
+  window.onload =
+  function() {
+    with (_jmol) {
+      if (buttonCount+checkboxCount+menuCount+radioCount+radioGroupCount > 0) {
+        var forms = document.forms;
+        for (var i = forms.length; --i >= 0; )
+          forms[i].reset();
+      }
+      if (previousOnloadHandler)
+        previousOnloadHandler();
+    }
+  }
+}
+
+////////////////////////////////////
+/////extensions for getProperty/////
+////////////////////////////////////
+
+
+function _jmolEvalJSON(s,key){
+ s=s+""
+ if(!s)return []
+ if(s.charAt(0)!="{"){
+       if(s.indexOf(" | ")>=0)s=s.replace(/\ \|\ /g, "\n")
+       return s
+ }
+ var A = eval("("+s+")")
+ if(!A)return
+ if(key && A[key])A=A[key]
+ return A
+}
+
+function _jmolEnumerateObject(A,key){
+ var sout=""
+ if(typeof(A) == "string" && A!="null"){
+       sout+="\n"+key+"=\""+A+"\""
+ }else if(!isNaN(A)||A==null){
+       sout+="\n"+key+"="+(A+""==""?"null":A)
+ }else if(A.length){
+    sout+=key+"=[]"
+    for(var i=0;i<A.length;i++){
+       sout+="\n"
+       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){
+               sout+=_jmolEnumerateObject(A[i],key+"["+i+"]")
+       }else{
+               sout+=key+"["+i+"]="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])
+       }
+    }
+ }else{
+    if(key != ""){
+       sout+=key+"={}"
+       key+="."
+    }
+    
+    for(var i in A){
+       sout+="\n"
+       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){
+               sout+=_jmolEnumerateObject(A[i],key+i)
+       }else{
+               sout+=key+i+"="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])
+       }
+    }
+ } 
+ return sout
+}
+
+
+function _jmolSortKey0(a,b){
+ return (a[0]<b[0]?1:a[0]>b[0]?-1:0)
+}
+
+function _jmolSortMessages(A){
+ if(!A || typeof(A)!="object")return []
+ var B = []
+ for(var i=A.length-1;i>=0;i--)for(var j=0;j<A[i].length;j++)B[B.length]=A[i][j]
+ if(B.length == 0) return
+ B=B.sort(_jmolSortKey0)
+ return B
+}
+
+/////////additional extensions //////////
+
+
+function _jmolDomScriptLoad(URL){
+ //open(URL) //to debug
+ _jmol.servercall=URL
+ var node = document.getElementById("_jmolScriptNode")
+ if (node && _jmol.browser!="msie"){
+    document.getElementsByTagName("HEAD")[0].removeChild(node)
+    node=null
+ }
+ if (node) {
+   node.setAttribute("src",URL)
+ } else {
+   node=document.createElement("script")
+   node.setAttribute("id","_jmolScriptNode")
+   node.setAttribute("type","text/javascript")
+   node.setAttribute("src",URL)
+   document.getElementsByTagName("HEAD")[0].appendChild(node)
+ }
+}
+
+
+function _jmolExtractPostData(url){
+ S=url.split("&POST:")
+ var s=""
+ for(var i=1;i<S.length;i++){
+       KV=S[i].split("=")
+       s+="&POSTKEY"+i+"="+KV[0]
+       s+="&POSTVALUE"+i+"="+KV[1]
+ }
+ return "&url="+escape(S[0])+s
+}
+
+function _jmolLoadModel(targetSuffix,remoteURL,array,isError,errorMessage){
+ //called by server, but in client
+ //overload this function to customize return
+ _jmol.remoteURL=remoteURL
+ isError && alert(errorMessage)
+ jmolLoadInlineScript(array.join("\n"),_jmol.optionalscript,targetSuffix)
+}
+
+//////////user property/status functions/////////
+
+function jmolGetStatus(strStatus,targetSuffix){
+ return _jmolSortMessages(jmolGetPropertyAsArray("jmolStatus",strStatus,targetSuffix))
+}
+
+function jmolGetPropertyAsArray(sKey,sValue,targetSuffix) {
+ return _jmolEvalJSON(jmolGetPropertyAsJSON(sKey,sValue,targetSuffix),sKey)
+}
+
+function jmolGetPropertyAsString(sKey,sValue,targetSuffix) {
+ var applet = _jmolGetApplet(targetSuffix);
+ sValue == undefined && (sValue="");
+ return (applet ? applet.getPropertyAsString(sKey,sValue) + "" : "")
+}
+
+function jmolGetPropertyAsJSON(sKey,sValue,targetSuffix) {
+ sValue == undefined && (sValue = "")
+ var applet = _jmolGetApplet(targetSuffix);
+ try {
+  return (applet ? applet.getPropertyAsJSON(sKey,sValue) + "" : "")
+ } catch(e) {
+  return ""
+ }
+}
+
+function jmolGetPropertyAsJavaObject(sKey,sValue,targetSuffix) {
+ sValue == undefined && (sValue = "")
+ var applet = _jmolGetApplet(targetSuffix);
+ return (applet ? applet.getProperty(sKey,sValue) : null)
+}
+
+
+function jmolDecodeJSON(s) {
+ return _jmolEnumerateObject(_jmolEvalJSON(s),"")
+}
+
+
+///////// synchronous scripting ////////
+
+function jmolScriptWait(script, targetSuffix) {
+  targetSuffix == undefined && (targetSuffix="0")
+  var Ret=jmolScriptWaitAsArray(script, targetSuffix)
+  var s = ""
+  for(var i=Ret.length;--i>=0;)
+  for(var j=0;j< Ret[i].length;j++)
+       s+=Ret[i][j]+"\n"
+  return s
+}
+
+function jmolScriptWaitOutput(script, targetSuffix) {
+  targetSuffix == undefined && (targetSuffix="0")
+  var ret = ""
+  try{
+   if (script) {
+    _jmolCheckBrowser();
+    var applet=_jmolGetApplet(targetSuffix);
+    if (applet) ret += applet.scriptWaitOutput(script);
+   }
+  }catch(e){
+  }
+ return ret;
+}
+
+function jmolEvaluate(molecularMath, targetSuffix) {
+
+  //carries out molecular math on a model
+
+  targetSuffix == undefined && (targetSuffix="0")
+  var result = "" + jmolGetPropertyAsJavaObject("evaluate", molecularMath, targetSuffix);
+  var s = result.replace(/\-*\d+/,"")
+  if (s == "" && !isNaN(parseInt(result)))return parseInt(result);
+  var s = result.replace(/\-*\d*\.\d*/,"")
+  if (s == "" && !isNaN(parseFloat(result)))return parseFloat(result);
+  return result;
+}
+
+function jmolScriptEcho(script, targetSuffix) {
+  // returns a newline-separated list of all echos from a script
+  targetSuffix == undefined && (targetSuffix="0")
+  var Ret=jmolScriptWaitAsArray(script, targetSuffix)
+  var s = ""
+  for(var i=Ret.length;--i>=0;)
+  for(var j=Ret[i].length;--j>=0;)
+        if (Ret[i][j][1] == "scriptEcho")s+=Ret[i][j][3]+"\n"
+  return s.replace(/ \| /g, "\n")
+}
+
+
+function jmolScriptMessage(script, targetSuffix) {
+  // returns a newline-separated list of all messages from a script, ending with "script completed\n"
+  targetSuffix == undefined && (targetSuffix="0")
+  var Ret=jmolScriptWaitAsArray(script, targetSuffix)
+  var s = ""
+  for(var i=Ret.length;--i>=0;)
+  for(var j=Ret[i].length;--j>=0;)
+        if (Ret[i][j][1] == "scriptStatus")s+=Ret[i][j][3]+"\n"
+  return s.replace(/ \| /g, "\n")
+}
+
+
+function jmolScriptWaitAsArray(script, targetSuffix) {
+ var ret = ""
+ try{
+  jmolGetStatus("scriptEcho,scriptMessage,scriptStatus,scriptError",targetSuffix)
+  if (script) {
+    _jmolCheckBrowser();
+    var applet=_jmolGetApplet(targetSuffix);
+    if (applet) ret += applet.scriptWait(script);
+    ret = _jmolEvalJSON(ret,"jmolStatus")
+    if(typeof ret == "object")
+       return ret
+  }
+ }catch(e){
+ }
+  return [[ret]]
+}
+
+
+
+////////////   save/restore orientation   /////////////
+
+function jmolSaveOrientation(id, targetSuffix) {  
+ targetSuffix == undefined && (targetSuffix="0")
+ return _jmol["savedOrientation"+id] = jmolGetPropertyAsArray("orientationInfo","info",targetSuffix).moveTo
+}
+
+function jmolRestoreOrientation(id, targetSuffix) {
+ targetSuffix == undefined && (targetSuffix="0")
+ var s=_jmol["savedOrientation"+id]
+ if (!s || s == "")return
+ s=s.replace(/1\.0/,"0")
+ return jmolScriptWait(s,targetSuffix)
+}
+
+function jmolRestoreOrientationDelayed(id, delay, targetSuffix) {
+ arguments.length < 2 && (delay=1)
+ targetSuffix == undefined && (targetSuffix="0")
+ var s=_jmol["savedOrientation"+id]
+ if (!s || s == "")return
+ s=s.replace(/1\.0/,delay)
+ return jmolScriptWait(s,targetSuffix)
+}
+
+////////////  add parameter /////////////
+/*
+ * for adding callbacks or other parameters. Use:
+
+   jmolSetDocument(0)
+   var s= jmolApplet(....)
+   s = jmolAppletAddParam(s,"messageCallback", "myFunctionName")
+   document.write(s)
+   jmolSetDocument(document) // if you want to then write buttons and such normally
+ */
+
+function jmolAppletAddParam(appletCode,name,value){
+  return (value == "" ? appletCode : appletCode.replace(/\<param/,"\n<param name='"+name+"' value='"+value+"' />\n<param"))
+}
+
+///////////////auto load Research Consortium for Structural Biology (RCSB) data ///////////
+
+function jmolLoadAjax_STOLAF_RCSB(fileformat,pdbid,optionalscript,targetSuffix){
+
+ _jmol.thismodel || (_jmol.thismodel = "1crn")
+ _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")
+ _jmol.RCSBserver || (_jmol.RCSBserver="http://www.rcsb.org")
+ _jmol.defaultURL_RCSB || (_jmol.defaultURL_RCSB=_jmol.RCSBserver+"/pdb/files/1CRN.CIF")
+ fileformat || (fileformat="PDB")
+ pdbid || (pdbid=prompt("Enter a 4-digit PDB ID:",_jmol.thismodel))
+ if(!pdbid || pdbid.length != 4)return ""
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ var url=_jmol.defaultURL_RCSB.replace(/1CRN/g,pdbid.toUpperCase())
+ fileformat=="CIF" || (url=url.replace(/CIF/,fileformat))
+ _jmol.optionalscript=optionalscript
+ _jmol.thismodel=pdbid
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.thisurl=url
+ _jmol.modelArray = []
+ url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)
+ _jmolDomScriptLoad(url)
+ return url
+}
+
+
+///////////////auto load NIH CACTVS data -- compound name or SMILES ///////////
+
+function jmolLoadAjax_STOLAF_NIH(compoundid,optionalscript,targetSuffix){
+ _jmol.thismodel || (_jmol.thismodel = "aspirin")
+ _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")
+ _jmol.defaultURL_NIH || (_jmol.defaultURL_NIH="http://cactus.nci.nih.gov/chemical/structure/FILE/file?format=sdf&get3d=True")
+ compoundid || (compoundid=prompt("Enter a compound name or a SMILES string:",_jmol.thismodel))
+ if(!compoundid)return ""
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ var url=_jmol.defaultURL_NIH.replace(/FILE/g,compoundid)
+ _jmol.optionalscript=optionalscript
+ _jmol.thismodel=compoundid
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.thisurl=url
+ _jmol.modelArray = []
+ url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)
+ _jmolDomScriptLoad(url)
+ return url
+}
+
+
+/////////////// St. Olaf College AJAX server -- ANY URL ///////////
+
+function jmolLoadAjax_STOLAF_ANY(url, userid, optionalscript,targetSuffix){
+ _jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm"
+ _jmol.thisurlANY || (_jmol.thisurlANY = "http://www.stolaf.edu/depts/chemistry/mo/struc/data/ycp3-1.mol")
+ url || (url=prompt("Enter any (uncompressed file) URL:", _jmol.thisurlANY))
+ userid || (userid="0")
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ _jmol.optionalscript=optionalscript
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.modelArray = []
+ _jmol.thisurl = url
+ url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)
+ _jmolDomScriptLoad(url)
+}
+
+
+/////////////// Mineralogical Society of America (MSA) data /////////
+
+function jmolLoadAjax_MSA(key,value,optionalscript,targetSuffix){
+
+ _jmol.thiskeyMSA || (_jmol.thiskeyMSA = "mineral")
+ _jmol.thismodelMSA || (_jmol.thismodelMSA = "quartz")
+ _jmol.ajaxURL_MSA || (_jmol.ajaxURL_MSA="http://rruff.geo.arizona.edu/AMS/result.php?mineral=quartz&viewing=ajaxjs")
+ key || (key=prompt("Enter a field:", _jmol.thiskeyMSA))
+ if(!key)return ""
+ value || (value=prompt("Enter a "+key+":", _jmol.thismodelMSA))
+ if(!value)return ""
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ optionalscript == 1 && (optionalscript='load "" {1 1 1}')
+ var url=_jmol.ajaxURL_MSA.replace(/mineral/g,key).replace(/quartz/g,value)
+ _jmol.optionalscript=optionalscript
+ _jmol.thiskeyMSA=key
+ _jmol.thismodelMSA=value
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.thisurl=url
+ _jmol.modelArray = []
+ loadModel=_jmolLoadModel
+ _jmolDomScriptLoad(url)
+ return url
+}
+
+
+
+function jmolLoadAjaxJS(url, userid, optionalscript,targetSuffix){
+ userid || (userid="0")
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ _jmol.optionalscript=optionalscript
+ _jmol.thismodel=userid
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.modelArray = []
+ _jmol.thisurl = url
+ url+="&returnFunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix
+ _jmolDomScriptLoad(url)
+}
+
+
+//// in case Jmol library has already been loaded:
+
+}catch(e){}
+
+///////////////moving atoms //////////////
+
+// HIGHLY experimental!!
+
+function jmolSetAtomCoord(i,x,y,z,targetSuffix){
+    _jmolCheckBrowser();
+      var applet=_jmolGetApplet(targetSuffix);
+      if (applet) applet.getProperty('jmolViewer').setAtomCoord(i,x,y,z)
+}
+
+function jmolSetAtomCoordRelative(i,x,y,z,targetSuffix){
+    _jmolCheckBrowser();
+      var applet=_jmolGetApplet(targetSuffix);
+      if (applet) applet.getProperty('jmolViewer').setAtomCoordRelative(i,x,y,z)
+}
+
+
+///////////////applet fake for testing buttons/////////////
+
+
+if(_jmol.useNoApplet){
+       jmolApplet = function(w){
+               var s="<table style='background-color:black' width="+w+"><tr height="+w+">"
+               +"<td align=center valign=center style='background-color:white'>"
+               +"Applet would be here"
+               +"<p><textarea id=fakeApplet rows=5 cols=50></textarea>"
+               +"</td></tr></table>"
+               return _jmolDocumentWrite(s)
+       }
+
+       _jmolFindApplet = function(){return jmolApplet0}
+
+       jmolApplet0 = {
+        script: function(script){document.getElementById("fakeApplet").value="\njmolScript:\n"+script}
+       ,scriptWait: function(script){document.getElementById("fakeApplet").value="\njmolScriptWait:\n"+script} 
+       ,loadInline: function(data,script){document.getElementById("fakeApplet").value="\njmolLoadInline data:\n"+data+"\n\nscript:\n"+script}
+       }
+}
+
+
+///////////////////////////////////////////
+
+  //  This should no longer be needed, jmolResizeApplet() is better; kept for backwards compatibility
+  /*
+       Resizes absolutely (pixels) or by percent of window (w or h 0.5 means 50%).
+       targetSuffix is optional and defaults to zero (first applet in page).
+       Both w and h are optional, but needed if you want to use targetSuffix.
+               h defaults to w
+               w defaults to 100% of window
+       If either w or h is between 0 and 1, then it is taken as percent/100.
+       If either w or h is greater than 1, then it is taken as a size (pixels). 
+       */
+function jmolResize(w,h,targetSuffix) {
+ _jmol.alerted = true;
+ var percentW = (!w ? 100 : w <= 1  && w > 0 ? w * 100 : 0);
+ var percentH = (!h ? percentW : h <= 1 && h > 0 ? h * 100 : 0);
+ if (_jmol.browser=="msie") {
+   var width=document.body.clientWidth;
+   var height=document.body.clientHeight;
+ } else {
+   var netscapeScrollWidth=15;
+   var width=window.innerWidth - netscapeScrollWidth;
+   var height=window.innerHeight-netscapeScrollWidth;
+ }
+ var applet = _jmolGetApplet(targetSuffix);
+ if(!applet)return;
+ applet.style.width = (percentW ? width * percentW/100 : w)+"px";
+ applet.style.height = (percentH ? height * percentH/100 : (h ? h : w))+"px";
+ //title=width +  " " + height + " " + (new Date());
+}
+
+// 13 Jun 09 -- makes jmolResize() obsolete  (kept for backwards compatibility)
+function jmolResizeApplet(size,targetSuffix) {
+ // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()]
+ //  Special case: an empty value for width or height is accepted, meaning no change in that dimension.
+ _jmol.alerted = true;
+ var applet = _jmolGetApplet(targetSuffix);
+ if(!applet)return;
+ var sz = _jmolGetAppletSize(size, "px");
+ sz[0] && (applet.style.width = sz[0]);
+ sz[1] && (applet.style.height = sz[1]);
+}
+
+function _jmolGetAppletSize(size, units) {
+       /* Accepts single number or 2-value array, each one can be one of:
+          percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.)
+          [width, height] array of strings is returned, with units added if specified.
+          Percent is relative to container div or element (which should have explicitly set size).
+       */
+  var width, height;
+  if ( (typeof size) == "object" && size != null ) {
+    width = size[0]; height = size[1];
+  } else {
+    width = height = size;
+  }
+  return [_jmolFixDim(width, units), _jmolFixDim(height, units)];
+}
+
+function _jmolFixDim(x, units) {
+  var sx = "" + x;
+  return (sx.length == 0 ? (units ? "" : _jmol.allowedJmolSize[2])
+       : sx.indexOf("%") == sx.length-1 ? sx 
+       : (x = parseFloat(x)) <= 1 && x > 0 ? x * 100 + "%"
+       : (isNaN(x = Math.floor(x)) ? _jmol.allowedJmolSize[2]
+               : x < _jmol.allowedJmolSize[0] ? _jmol.allowedJmolSize[0]
+           : x > _jmol.allowedJmolSize[1] ? _jmol.allowedJmolSize[1] 
+        : x) + (units ? units : ""));
+}
+
+
+
+
index 53698a4..72c062d 100755 (executable)
@@ -1,60 +1,60 @@
->FER_CAPAA Ferredoxin\r
------------------------------------------------------------ASYKVKLITPDGP\r
-IEFDCPDDVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV\r
-TIETHKEAELVG-\r
->FER_CAPAN Ferredoxin, chloroplast precursor\r
-MA------SVSATMISTSFMPRKPAVTSL-KPIPNVGE--ALFGLKS-A--NGGKVTCMASYKVKLITPDGP\r
-IEFDCPDNVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV\r
-TIETHKEAELVG-\r
->FER1_SOLLC Ferredoxin-1, chloroplast precursor\r
-MA------SISGTMISTSFLPRKPAVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPEGP\r
-IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGSVDQSDGNFLDEDQEAAGFVLTCVAYPKGDV\r
-TIETHKEEELTA-\r
->Q93XJ9_SOLTU Ferredoxin I precursor\r
-MA------SISGTMISTSFLPRKPVVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPDGP\r
-IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGTVDQSDGKFLDDDQEAAGFVLTCVAYPKCDV\r
-TIETHKEEELTA-\r
->FER1_PEA Ferredoxin-1, chloroplast precursor\r
-MATT---PALYGTAVSTSFLRTQPMPMSV-TTTKAFSN--GFLGLKT-SLKRGDLAVAMASYKVKLVTPDGT\r
-QEFECPSDVYILDHAEEVGIDLPYSCRAGSCSSCAGKVVGGEVDQSDGSFLDDEQIEAGFVLTCVAYPTSDV\r
-VIETHKEEDLTA-\r
->Q7XA98_TRIPR Ferredoxin I\r
-MATT---PALYGTAVSTSFMRRQPVPMSV-ATTTTTKAFPSGFGLKSVSTKRGDLAVAMATYKVKLITPEGP\r
-QEFDCPDDVYILDHAEEVGIELPYSCRAGSCSSCAGKVVNGNVNQEDGSFLDDEQIEGGWVLTCVAFPTSDV\r
-TIETHKEEELTA-\r
->FER1_MESCR Ferredoxin-1, chloroplast precursor\r
-MAAT--TAALSGATMSTAFAPK--TPPMTAALPTNVGR--ALFGLKS-SASR-GRVTAMAAYKVTLVTPEGK\r
-QELECPDDVYILDAAEEAGIDLPYSCRAGSCSSCAGKVTSGSVNQDDGSFLDDDQIKEGWVLTCVAYPTGDV\r
-TIETHKEEELTA-\r
->FER1_SPIOL Ferredoxin-1, chloroplast precursor\r
-MAAT--TTTMMG--MATTFVPKPQAPPMMAALPSNTGR--SLFGLKT-GSR--GGRMTMAAYKVTLVTPTGN\r
-VEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLDDDQIDEGWVLTCAAYPVSDV\r
-TIETHKEEELTA-\r
->FER3_RAPSA Ferredoxin, leaf L-A\r
------------------------------------------------------------ATYKVKFITPEGE\r
-QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDDQIAEGFVLTCAAYPTSDV\r
-TIETHREEDMV--\r
->FER1_ARATH Ferredoxin-1, chloroplast precursor\r
-MAST----ALSSAIVGTSFIRRSPAPISLRSLPSANTQ--SLFGLKS-GTARGGRVTAMATYKVKFITPEGE\r
-LEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDEQIGEGFVLTCAAYPTSDV\r
-TIETHKEEDIV--\r
->FER_BRANA Ferredoxin\r
------------------------------------------------------------ATYKVKFITPEGE\r
-QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGFVDQSDESFLDDDQIAEGFVLTCAAYPTSDV\r
-TIETHKEEELV--\r
->FER2_ARATH Ferredoxin-2, chloroplast precursor\r
-MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE\r
-QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDDEQMSEGYVLTCVAYPTSDV\r
-VIETHKEEAIM--\r
->Q93Z60_ARATH At1g10960/T19D16_12\r
-MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE\r
-QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDD-------------------\r
--------------\r
->FER1_MAIZE Ferredoxin-1, chloroplast precursor\r
-MATVLGSPRAPAFFFSSSSLRAAPAPTAV--ALPAAKV--GIMGRSA-SSRR--RLRAQATYNVKLITPEGE\r
-VELQVPDDVYILDQAEEDGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSYLDDGQIADGWVLTCHAYPTSDV\r
-VIETHKEEELTGA\r
->O80429_MAIZE Ferredoxin\r
-MAAT---------ALSMSILR---APPPCFSSPLRLRV--AVAKPLA-APMRRQLLRAQATYNVKLITPEGE\r
-VELQVPDDVYILDFAEEEGIDLPFSCRAGSCSSCAGKVVSGSVDQSDQSFLNDNQVADGWVLTCAAYPTSDV\r
-VIETHKEDDLL--\r
+>FER_CAPAA Ferredoxin
+-----------------------------------------------------------ASYKVKLITPDGP
+IEFDCPDDVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV
+TIETHKEAELVG-
+>FER_CAPAN Ferredoxin, chloroplast precursor
+MA------SVSATMISTSFMPRKPAVTSL-KPIPNVGE--ALFGLKS-A--NGGKVTCMASYKVKLITPDGP
+IEFDCPDNVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV
+TIETHKEAELVG-
+>FER1_SOLLC Ferredoxin-1, chloroplast precursor
+MA------SISGTMISTSFLPRKPAVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPEGP
+IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGSVDQSDGNFLDEDQEAAGFVLTCVAYPKGDV
+TIETHKEEELTA-
+>Q93XJ9_SOLTU Ferredoxin I precursor
+MA------SISGTMISTSFLPRKPVVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPDGP
+IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGTVDQSDGKFLDDDQEAAGFVLTCVAYPKCDV
+TIETHKEEELTA-
+>FER1_PEA Ferredoxin-1, chloroplast precursor
+MATT---PALYGTAVSTSFLRTQPMPMSV-TTTKAFSN--GFLGLKT-SLKRGDLAVAMASYKVKLVTPDGT
+QEFECPSDVYILDHAEEVGIDLPYSCRAGSCSSCAGKVVGGEVDQSDGSFLDDEQIEAGFVLTCVAYPTSDV
+VIETHKEEDLTA-
+>Q7XA98_TRIPR Ferredoxin I
+MATT---PALYGTAVSTSFMRRQPVPMSV-ATTTTTKAFPSGFGLKSVSTKRGDLAVAMATYKVKLITPEGP
+QEFDCPDDVYILDHAEEVGIELPYSCRAGSCSSCAGKVVNGNVNQEDGSFLDDEQIEGGWVLTCVAFPTSDV
+TIETHKEEELTA-
+>FER1_MESCR Ferredoxin-1, chloroplast precursor
+MAAT--TAALSGATMSTAFAPK--TPPMTAALPTNVGR--ALFGLKS-SASR-GRVTAMAAYKVTLVTPEGK
+QELECPDDVYILDAAEEAGIDLPYSCRAGSCSSCAGKVTSGSVNQDDGSFLDDDQIKEGWVLTCVAYPTGDV
+TIETHKEEELTA-
+>FER1_SPIOL Ferredoxin-1, chloroplast precursor
+MAAT--TTTMMG--MATTFVPKPQAPPMMAALPSNTGR--SLFGLKT-GSR--GGRMTMAAYKVTLVTPTGN
+VEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLDDDQIDEGWVLTCAAYPVSDV
+TIETHKEEELTA-
+>FER3_RAPSA Ferredoxin, leaf L-A
+-----------------------------------------------------------ATYKVKFITPEGE
+QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDDQIAEGFVLTCAAYPTSDV
+TIETHREEDMV--
+>FER1_ARATH Ferredoxin-1, chloroplast precursor
+MAST----ALSSAIVGTSFIRRSPAPISLRSLPSANTQ--SLFGLKS-GTARGGRVTAMATYKVKFITPEGE
+LEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDEQIGEGFVLTCAAYPTSDV
+TIETHKEEDIV--
+>FER_BRANA Ferredoxin
+-----------------------------------------------------------ATYKVKFITPEGE
+QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGFVDQSDESFLDDDQIAEGFVLTCAAYPTSDV
+TIETHKEEELV--
+>FER2_ARATH Ferredoxin-2, chloroplast precursor
+MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE
+QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDDEQMSEGYVLTCVAYPTSDV
+VIETHKEEAIM--
+>Q93Z60_ARATH At1g10960/T19D16_12
+MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE
+QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDD-------------------
+-------------
+>FER1_MAIZE Ferredoxin-1, chloroplast precursor
+MATVLGSPRAPAFFFSSSSLRAAPAPTAV--ALPAAKV--GIMGRSA-SSRR--RLRAQATYNVKLITPEGE
+VELQVPDDVYILDQAEEDGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSYLDDGQIADGWVLTCHAYPTSDV
+VIETHKEEELTGA
+>O80429_MAIZE Ferredoxin
+MAAT---------ALSMSILR---APPPCFSSPLRLRV--AVAKPLA-APMRRQLLRAQATYNVKLITPEGE
+VELQVPDDVYILDFAEEEGIDLPFSCRAGSCSSCAGKVVSGSVDQSDQSFLNDNQVADGWVLTCAAYPTSDV
+VIETHKEDDLL--
index 69d17a5..7a40768 100755 (executable)
-HEADER    OXIDOREDUCTASE/ELECTRON TRANSPORT       08-MAY-00   1GAQ \r
-ATOM      2  CA  GLU A  19      20.491  30.713  36.290  1.00 74.29           C  \r
-ATOM     11  CA  SER A  20      24.056  29.774  37.264  1.00 72.09           C  \r
-ATOM     17  CA  LYS A  21      27.517  31.289  37.563  1.00 70.09           C  \r
-ATOM     26  CA  LYS A  22      28.794  27.865  36.481  1.00 68.64           C  \r
-ATOM     35  CA  GLN A  23      29.484  26.806  32.884  1.00 70.46           C  \r
-ATOM     44  CA  GLU A  24      26.420  25.175  31.360  1.00 72.08           C  \r
-ATOM     53  CA  GLU A  25      26.736  26.049  27.683  1.00 70.43           C  \r
-ATOM     62  CA  GLY A  26      28.299  22.912  26.233  1.00 63.14           C  \r
-ATOM     66  CA  VAL A  27      26.863  20.704  28.982  1.00 54.50           C  \r
-ATOM     73  CA  VAL A  28      25.030  17.390  28.655  1.00 48.32           C  \r
-ATOM     80  CA  THR A  29      23.728  14.677  30.991  1.00 44.86           C  \r
-ATOM     87  CA  ASN A  30      22.327  11.164  30.703  1.00 45.42           C  \r
-ATOM     95  CA  LEU A  31      23.332  10.459  27.102  1.00 45.42           C  \r
-ATOM    103  CA  TYR A  32      23.549   6.898  28.380  1.00 45.88           C  \r
-ATOM    115  CA  LYS A  33      21.656   5.321  31.262  1.00 47.27           C  \r
-ATOM    124  CA  PRO A  34      21.991   2.046  33.248  1.00 48.99           C  \r
-ATOM    131  CA  LYS A  35      19.339   0.560  30.970  1.00 52.75           C  \r
-ATOM    140  CA  GLU A  36      21.580   0.855  27.886  1.00 53.33           C  \r
-ATOM    149  CA  PRO A  37      25.154   2.015  28.678  1.00 47.54           C  \r
-ATOM    156  CA  TYR A  38      27.929   2.872  26.249  1.00 41.98           C  \r
-ATOM    168  CA  VAL A  39      30.355  -0.017  25.909  1.00 41.48           C  \r
-ATOM    175  CA  GLY A  40      33.823   1.485  25.966  1.00 37.59           C  \r
-ATOM    179  CA  ARG A  41      37.165  -0.277  26.122  1.00 39.77           C  \r
-ATOM    190  CA  CYS A  42      40.148  -0.029  28.442  1.00 36.51           C  \r
-ATOM    196  CA  LEU A  43      43.095   1.441  26.554  1.00 36.13           C  \r
-ATOM    204  CA  LEU A  44      45.231   2.023  29.649  1.00 33.55           C  \r
-ATOM    212  CA  ASN A  45      45.140   1.026  33.307  1.00 27.79           C  \r
-ATOM    220  CA  THR A  46      48.056   1.800  35.617  1.00 28.75           C  \r
-ATOM    227  CA  LYS A  47      48.542   1.776  39.388  1.00 30.31           C  \r
-ATOM    236  CA  ILE A  48      49.564   5.317  40.376  1.00 31.32           C  \r
-ATOM    244  CA  THR A  49      50.339   4.682  44.059  1.00 37.62           C  \r
-ATOM    251  CA  GLY A  50      53.585   3.317  45.460  1.00 44.49           C  \r
-ATOM    255  CA  ASP A  51      53.706  -0.448  46.087  1.00 52.89           C  \r
-ATOM    263  CA  ASP A  52      53.910   0.545  49.751  1.00 55.23           C  \r
-ATOM    271  CA  ALA A  53      50.816   2.767  50.056  1.00 53.34           C  \r
-ATOM    276  CA  PRO A  54      47.904   1.940  52.405  1.00 50.60           C  \r
-ATOM    283  CA  GLY A  55      45.420   1.579  49.561  1.00 50.35           C  \r
-ATOM    287  CA  GLU A  56      46.098   1.286  45.836  1.00 42.53           C  \r
-ATOM    296  CA  THR A  57      44.534   3.816  43.480  1.00 41.14           C  \r
-ATOM    303  CA  TRP A  58      44.540   3.423  39.708  1.00 35.60           C  \r
-ATOM    317  CA  HIS A  59      44.468   5.853  36.796  1.00 31.89           C  \r
-ATOM    327  CA  MET A  60      42.658   4.227  33.866  1.00 31.65           C  \r
-ATOM    335  CA  VAL A  61      41.716   5.345  30.350  1.00 30.43           C  \r
-ATOM    342  CA  PHE A  62      38.669   4.172  28.360  1.00 34.36           C  \r
-ATOM    353  CA  SER A  63      37.657   4.908  24.772  1.00 34.69           C  \r
-ATOM    359  CA  THR A  64      34.448   6.828  23.951  1.00 36.96           C  \r
-ATOM    366  CA  GLU A  65      34.691   7.644  20.254  1.00 40.08           C  \r
-ATOM    375  CA  GLY A  66      33.742  11.183  21.285  1.00 40.22           C  \r
-ATOM    379  CA  LYS A  67      30.272   9.763  22.003  1.00 41.93           C  \r
-ATOM    388  CA  ILE A  68      30.279  11.116  25.577  1.00 41.52           C  \r
-ATOM    396  CA  PRO A  69      30.791  14.926  25.537  1.00 42.35           C  \r
-ATOM    403  CA  TYR A  70      31.228  15.232  29.299  1.00 39.84           C  \r
-ATOM    415  CA  ARG A  71      32.639  18.451  30.768  1.00 44.14           C  \r
-ATOM    426  CA  GLU A  72      35.122  19.278  33.515  1.00 43.82           C  \r
-ATOM    435  CA  GLY A  73      33.472  18.458  36.835  1.00 41.97           C  \r
-ATOM    439  CA  GLN A  74      30.929  15.874  35.657  1.00 37.19           C  \r
-ATOM    448  CA  SER A  75      31.285  12.124  36.138  1.00 38.28           C  \r
-ATOM    454  CA  ILE A  76      30.458   8.792  34.539  1.00 36.84           C  \r
-ATOM    462  CA  GLY A  77      28.983   5.620  35.918  1.00 35.39           C  \r
-ATOM    466  CA  VAL A  78      30.311   2.108  35.530  1.00 32.05           C  \r
-ATOM    473  CA  ILE A  79      28.458  -1.201  35.591  1.00 32.67           C  \r
-ATOM    481  CA  ALA A  80      30.745  -4.018  36.644  1.00 35.36           C  \r
-ATOM    486  CA  ASP A  81      30.359  -7.373  34.872  1.00 38.72           C  \r
-ATOM    494  CA  GLY A  82      28.308 -10.332  36.110  1.00 45.79           C  \r
-ATOM    498  CA  VAL A  83      25.820 -10.242  39.001  1.00 52.24           C  \r
-ATOM    505  CA  ASP A  84      25.838 -10.250  42.834  1.00 60.54           C  \r
-ATOM    513  CA  LYS A  85      25.014 -13.158  45.196  1.00 66.72           C  \r
-ATOM    522  CA  ASN A  86      21.414 -13.062  43.904  1.00 67.37           C  \r
-ATOM    530  CA  GLY A  87      21.724 -13.423  40.136  1.00 64.74           C  \r
-ATOM    534  CA  LYS A  88      20.971  -9.733  39.570  1.00 61.12           C  \r
-ATOM    543  CA  PRO A  89      23.054  -7.201  37.561  1.00 54.68           C  \r
-ATOM    550  CA  HIS A  90      25.224  -4.957  39.755  1.00 44.44           C  \r
-ATOM    560  CA  LYS A  91      23.940  -1.433  40.260  1.00 40.48           C  \r
-ATOM    569  CA  VAL A  92      25.803   1.546  38.843  1.00 38.45           C  \r
-ATOM    576  CA  ARG A  93      28.709   2.986  40.828  1.00 38.93           C  \r
-ATOM    587  CA  LEU A  94      29.778   6.584  40.096  1.00 34.37           C  \r
-ATOM    595  CA  TYR A  95      33.309   7.878  39.513  1.00 30.27           C  \r
-ATOM    607  CA  SER A  96      34.425  11.475  39.057  1.00 29.44           C  \r
-ATOM    613  CA  ILE A  97      36.029  12.090  35.662  1.00 27.61           C  \r
-ATOM    621  CA  ALA A  98      39.769  12.693  36.069  1.00 31.12           C  \r
-ATOM    626  CA  SER A  99      40.393  13.712  32.475  1.00 32.42           C  \r
-ATOM    632  CA  SER A 100      39.566  17.142  31.059  1.00 36.14           C  \r
-ATOM    638  CA  ALA A 101      37.097  17.367  28.154  1.00 41.07           C  \r
-ATOM    643  CA  ILE A 102      39.764  16.549  25.527  1.00 47.65           C  \r
-ATOM    651  CA  GLY A 103      41.172  13.692  27.599  1.00 46.77           C  \r
-ATOM    655  CA  ASP A 104      44.730  12.612  28.289  1.00 43.82           C  \r
-ATOM    663  CA  PHE A 105      45.115  12.065  24.522  1.00 41.52           C  \r
-ATOM    674  CA  GLY A 106      43.862  15.455  23.328  1.00 41.66           C  \r
-ATOM    678  CA  ASP A 107      41.355  13.883  20.926  1.00 40.90           C  \r
-ATOM    686  CA  SER A 108      38.132  14.250  22.954  1.00 42.95           C  \r
-ATOM    692  CA  LYS A 109      37.967  10.535  22.224  1.00 44.74           C  \r
-ATOM    701  CA  THR A 110      38.731   9.184  25.704  1.00 41.09           C  \r
-ATOM    708  CA  VAL A 111      37.728   9.519  29.374  1.00 39.03           C  \r
-ATOM    715  CA  SER A 112      39.912   8.705  32.399  1.00 37.17           C  \r
-ATOM    721  CA  LEU A 113      39.098   7.476  35.935  1.00 32.10           C  \r
-ATOM    729  CA  CYS A 114      40.964   7.578  39.261  1.00 30.65           C  \r
-ATOM    735  CA  VAL A 115      39.724   4.459  41.060  1.00 33.45           C  \r
-ATOM    742  CA  LYS A 116      40.668   3.524  44.628  1.00 34.75           C  \r
-ATOM    751  CA  ARG A 117      40.376  -0.250  45.123  1.00 32.85           C  \r
-ATOM    762  CA  LEU A 118      38.137  -1.094  48.077  1.00 30.50           C  \r
-ATOM    770  CA  ILE A 119      39.376  -3.752  50.459  1.00 34.34           C  \r
-ATOM    778  CA  TYR A 120      38.699  -4.266  54.125  1.00 31.39           C  \r
-ATOM    790  CA  THR A 121      38.264  -7.086  56.567  1.00 28.83           C  \r
-ATOM    797  CA  ASN A 122      34.792  -7.477  58.109  1.00 26.51           C  \r
-ATOM    805  CA  ASP A 123      33.626  -8.382  61.634  1.00 31.58           C  \r
-ATOM    813  CA  ALA A 124      34.191 -12.077  60.901  1.00 27.84           C  \r
-ATOM    818  CA  GLY A 125      37.759 -11.844  59.728  1.00 32.39           C  \r
-ATOM    822  CA  GLU A 126      36.809 -12.146  56.073  1.00 35.82           C  \r
-ATOM    831  CA  ILE A 127      38.655  -9.932  53.598  1.00 38.42           C  \r
-ATOM    839  CA  VAL A 128      36.025  -8.261  51.421  1.00 33.73           C  \r
-ATOM    846  CA  LYS A 129      36.482  -6.484  48.090  1.00 31.87           C  \r
-ATOM    855  CA  GLY A 130      34.363  -3.680  46.686  1.00 26.91           C  \r
-ATOM    859  CA  VAL A 131      32.680  -5.051  43.569  1.00 27.89           C  \r
-ATOM    866  CA  CYS A 132      33.074  -2.246  41.018  1.00 28.46           C  \r
-ATOM    872  CA  SER A 133      36.266  -0.553  42.213  1.00 31.33           C  \r
-ATOM    878  CA  ASN A 134      37.861  -3.983  41.984  1.00 30.29           C  \r
-ATOM    886  CA  PHE A 135      36.318  -4.795  38.623  1.00 31.48           C  \r
-ATOM    897  CA  LEU A 136      37.926  -1.553  37.520  1.00 27.81           C  \r
-ATOM    905  CA  CYS A 137      41.417  -1.976  38.955  1.00 25.91           C  \r
-ATOM    911  CA  ASP A 138      41.605  -5.419  37.338  1.00 30.22           C  \r
-ATOM    919  CA  LEU A 139      40.462  -4.306  33.874  1.00 32.69           C  \r
-ATOM    927  CA  GLN A 140      42.851  -5.511  31.186  1.00 36.80           C  \r
-ATOM    936  CA  PRO A 141      43.380  -3.220  28.170  1.00 36.16           C  \r
-ATOM    943  CA  GLY A 142      40.864  -4.420  25.586  1.00 31.10           C  \r
-ATOM    947  CA  ASP A 143      38.129  -5.298  28.055  1.00 30.62           C  \r
-ATOM    955  CA  ASN A 144      34.690  -3.847  27.645  1.00 33.52           C  \r
-ATOM    963  CA  VAL A 145      33.430  -1.522  30.361  1.00 37.08           C  \r
-ATOM    970  CA  GLN A 146      29.817  -0.374  30.523  1.00 37.65           C  \r
-ATOM    979  CA  ILE A 147      29.547   3.413  31.045  1.00 30.95           C  \r
-ATOM    987  CA  THR A 148      26.637   5.791  31.832  1.00 29.95           C  \r
-ATOM    994  CA  GLY A 149      26.297   9.581  31.843  1.00 32.81           C  \r
-ATOM    998  CA  PRO A 150      27.785  12.148  31.800  1.00 34.98           C  \r
-ATOM   1005  CA  VAL A 151      26.376  12.668  35.275  1.00 36.53           C  \r
-ATOM   1012  CA  GLY A 152      26.196  15.756  37.474  1.00 43.09           C  \r
-ATOM   1016  CA  LYS A 153      26.048  19.528  37.068  1.00 48.37           C  \r
-ATOM   1025  CA  GLU A 154      26.921  20.540  40.633  1.00 49.70           C  \r
-ATOM   1034  CA  MET A 155      30.710  20.266  40.235  1.00 47.30           C  \r
-ATOM   1042  CA  LEU A 156      30.882  22.020  36.869  1.00 50.36           C  \r
-ATOM   1050  CA  MET A 157      33.362  24.883  36.404  1.00 55.29           C  \r
-ATOM   1058  CA  PRO A 158      32.521  28.612  36.605  1.00 54.88           C  \r
-ATOM   1065  CA  LYS A 159      32.291  30.776  33.464  1.00 54.92           C  \r
-ATOM   1074  CA  ASP A 160      34.497  33.503  34.939  1.00 57.22           C  \r
-ATOM   1082  CA  PRO A 161      38.055  32.687  33.759  1.00 58.62           C  \r
-ATOM   1089  CA  ASN A 162      39.524  35.240  36.163  1.00 60.44           C  \r
-ATOM   1097  CA  ALA A 163      37.814  33.910  39.279  1.00 55.80           C  \r
-ATOM   1102  CA  THR A 164      39.596  32.487  42.316  1.00 51.04           C  \r
-ATOM   1109  CA  ILE A 165      38.966  28.771  42.756  1.00 50.26           C  \r
-ATOM   1117  CA  ILE A 166      39.774  26.773  45.885  1.00 47.54           C  \r
-ATOM   1125  CA  MET A 167      39.883  23.014  45.324  1.00 46.38           C  \r
-ATOM   1133  CA  LEU A 168      39.700  20.963  48.522  1.00 42.18           C  \r
-ATOM   1141  CA  ALA A 169      40.377  17.316  47.770  1.00 36.41           C  \r
-ATOM   1146  CA  THR A 170      41.005  14.086  49.622  1.00 32.98           C  \r
-ATOM   1153  CA  GLY A 171      42.027  10.802  48.014  1.00 31.36           C  \r
-ATOM   1157  CA  THR A 172      40.386  10.037  44.680  1.00 30.48           C  \r
-ATOM   1164  CA  GLY A 173      38.640  13.335  45.359  1.00 33.99           C  \r
-ATOM   1168  CA  ILE A 174      41.418  15.036  43.394  1.00 35.66           C  \r
-ATOM   1176  CA  ALA A 175      39.758  13.585  40.300  1.00 36.00           C  \r
-ATOM   1181  CA  PRO A 176      37.445  16.385  39.155  1.00 39.41           C  \r
-ATOM   1188  CA  PHE A 177      40.109  18.971  39.976  1.00 43.21           C  \r
-ATOM   1199  CA  ARG A 178      42.726  17.119  37.955  1.00 41.09           C  \r
-ATOM   1210  CA  SER A 179      40.235  17.536  35.124  1.00 39.92           C  \r
-ATOM   1216  CA  PHE A 180      39.808  21.204  36.009  1.00 39.23           C  \r
-ATOM   1227  CA  LEU A 181      43.528  21.949  35.995  1.00 39.50           C  \r
-ATOM   1235  CA  TRP A 182      44.305  20.081  32.770  1.00 41.47           C  \r
-ATOM   1249  CA  LYS A 183      42.141  22.654  30.972  1.00 48.08           C  \r
-ATOM   1258  CA  MET A 184      43.477  25.547  33.062  1.00 52.79           C  \r
-ATOM   1266  CA  PHE A 185      47.102  25.043  32.014  1.00 57.35           C  \r
-ATOM   1277  CA  PHE A 186      48.075  21.921  30.051  1.00 55.98           C  \r
-ATOM   1288  CA  GLU A 187      45.758  23.173  27.297  1.00 54.44           C  \r
-ATOM   1297  CA  LYS A 188      44.908  26.236  25.196  1.00 51.29           C  \r
-ATOM   1306  CA  HIS A 189      41.395  27.080  24.003  1.00 51.35           C  \r
-ATOM   1316  CA  ASP A 190      40.108  29.972  21.873  1.00 54.30           C  \r
-ATOM   1324  CA  ASP A 191      37.199  30.481  24.249  1.00 53.95           C  \r
-ATOM   1332  CA  TYR A 192      38.816  29.937  27.634  1.00 50.68           C  \r
-ATOM   1344  CA  LYS A 193      41.916  31.388  29.230  1.00 51.00           C  \r
-ATOM   1353  CA  PHE A 194      42.322  30.967  32.956  1.00 52.09           C  \r
-ATOM   1364  CA  ASN A 195      43.672  34.234  34.312  1.00 56.46           C  \r
-ATOM   1372  CA  GLY A 196      42.616  34.078  37.969  1.00 57.17           C  \r
-ATOM   1376  CA  LEU A 197      43.874  31.920  40.843  1.00 57.92           C  \r
-ATOM   1384  CA  GLY A 198      43.549  28.151  41.086  1.00 56.67           C  \r
-ATOM   1388  CA  TRP A 199      44.258  26.886  44.592  1.00 51.55           C  \r
-ATOM   1402  CA  LEU A 200      44.411  23.170  45.379  1.00 49.17           C  \r
-ATOM   1410  CA  PHE A 201      44.558  21.335  48.709  1.00 48.60           C  \r
-ATOM   1421  CA  LEU A 202      45.122  17.570  48.598  1.00 45.34           C  \r
-ATOM   1429  CA  GLY A 203      44.885  15.480  51.742  1.00 48.55           C  \r
-ATOM   1433  CA  VAL A 204      46.225  11.936  51.755  1.00 50.23           C  \r
-ATOM   1440  CA  PRO A 205      47.942   9.740  54.365  1.00 51.51           C  \r
-ATOM   1447  CA  THR A 206      51.284   9.148  52.648  1.00 50.21           C  \r
-ATOM   1454  CA  SER A 207      53.551  10.483  49.894  1.00 49.38           C  \r
-ATOM   1460  CA  SER A 208      53.267   7.061  48.259  1.00 43.49           C  \r
-ATOM   1466  CA  SER A 209      49.588   8.049  48.093  1.00 42.57           C  \r
-ATOM   1472  CA  LEU A 210      49.990  11.424  46.364  1.00 42.65           C  \r
-ATOM   1480  CA  LEU A 211      48.121  11.446  43.035  1.00 39.33           C  \r
-ATOM   1488  CA  TYR A 212      49.516  13.214  39.935  1.00 40.89           C  \r
-ATOM   1500  CA  LYS A 213      52.128  15.234  41.873  1.00 45.88           C  \r
-ATOM   1509  CA  GLU A 214      54.518  15.406  38.899  1.00 53.22           C  \r
-ATOM   1518  CA  GLU A 215      51.680  16.911  36.889  1.00 55.16           C  \r
-ATOM   1527  CA  PHE A 216      50.757  19.475  39.514  1.00 60.55           C  \r
-ATOM   1538  CA  GLY A 217      54.488  20.153  39.524  1.00 66.64           C  \r
-ATOM   1542  CA  LYS A 218      54.575  21.110  35.850  1.00 68.86           C  \r
-ATOM   1551  CA  MET A 219      51.398  23.159  36.265  1.00 66.97           C  \r
-ATOM   1559  CA  LYS A 220      53.138  25.090  39.061  1.00 65.97           C  \r
-ATOM   1568  CA  GLU A 221      55.654  26.250  36.459  1.00 70.02           C  \r
-ATOM   1577  CA  ARG A 222      53.584  26.507  33.294  1.00 73.48           C  \r
-ATOM   1588  CA  ALA A 223      52.005  29.449  35.175  1.00 76.21           C  \r
-ATOM   1593  CA  PRO A 224      53.272  29.877  38.804  1.00 79.25           C  \r
-ATOM   1600  CA  GLU A 225      51.296  33.124  39.020  1.00 81.84           C  \r
-ATOM   1609  CA  ASN A 226      47.873  31.528  38.622  1.00 78.84           C  \r
-ATOM   1617  CA  PHE A 227      48.418  28.176  40.350  1.00 75.28           C  \r
-ATOM   1628  CA  ARG A 228      49.090  27.305  43.996  1.00 72.05           C  \r
-ATOM   1639  CA  VAL A 229      49.165  23.724  45.323  1.00 68.82           C  \r
-ATOM   1646  CA  ASP A 230      49.258  22.581  48.958  1.00 66.54           C  \r
-ATOM   1654  CA  TYR A 231      49.605  18.943  49.968  1.00 60.31           C  \r
-ATOM   1666  CA  ALA A 232      48.551  17.560  53.332  1.00 57.39           C  \r
-ATOM   1671  CA  VAL A 233      50.260  14.228  53.945  1.00 57.14           C  \r
-ATOM   1678  CA  SER A 234      48.465  13.579  57.244  1.00 60.81           C  \r
-ATOM   1684  CA  ARG A 235      50.959  11.010  58.514  1.00 60.74           C  \r
-ATOM   1695  CA  GLU A 236      54.268  12.594  57.481  1.00 59.17           C  \r
-ATOM   1704  CA  GLN A 237      53.494  16.197  58.450  1.00 59.62           C  \r
-ATOM   1713  CA  THR A 238      52.590  18.236  61.521  1.00 63.18           C  \r
-ATOM   1720  CA  ASN A 239      52.019  21.937  62.188  1.00 66.71           C  \r
-ATOM   1728  CA  ALA A 240      52.096  23.767  65.537  1.00 70.06           C  \r
-ATOM   1733  CA  ALA A 241      51.302  21.400  68.410  1.00 72.44           C  \r
-ATOM   1738  CA  GLY A 242      52.383  18.324  66.438  1.00 72.38           C  \r
-ATOM   1742  CA  GLU A 243      48.826  18.169  65.110  1.00 69.71           C  \r
-ATOM   1751  CA  ARG A 244      48.674  15.776  62.148  1.00 67.21           C  \r
-ATOM   1762  CA  MET A 245      48.712  17.796  58.933  1.00 64.20           C  \r
-ATOM   1770  CA  TYR A 246      45.246  17.082  57.556  1.00 60.65           C  \r
-ATOM   1782  CA  ILE A 247      43.617  18.437  54.409  1.00 62.98           C  \r
-ATOM   1790  CA  GLN A 248      42.035  21.001  56.761  1.00 64.64           C  \r
-ATOM   1799  CA  THR A 249      45.057  21.461  59.009  1.00 63.37           C  \r
-ATOM   1806  CA  ARG A 250      46.891  22.664  55.903  1.00 62.47           C  \r
-ATOM   1817  CA  MET A 251      44.123  25.201  55.251  1.00 63.35           C  \r
-ATOM   1825  CA  ALA A 252      44.571  26.305  58.854  1.00 65.73           C  \r
-ATOM   1830  CA  GLU A 253      47.973  27.809  58.076  1.00 65.97           C  \r
-ATOM   1839  CA  TYR A 254      46.267  30.063  55.517  1.00 65.83           C  \r
-ATOM   1851  CA  LYS A 255      42.991  30.559  57.379  1.00 70.30           C  \r
-ATOM   1860  CA  GLU A 256      43.578  34.326  57.320  1.00 73.73           C  \r
-ATOM   1869  CA  GLU A 257      44.189  34.738  53.593  1.00 71.52           C  \r
-ATOM   1878  CA  LEU A 258      41.459  32.202  52.893  1.00 73.38           C  \r
-ATOM   1886  CA  TRP A 259      38.790  34.074  54.853  1.00 76.72           C  \r
-ATOM   1900  CA  GLU A 260      39.721  37.275  53.006  1.00 78.61           C  \r
-ATOM   1909  CA  LEU A 261      38.580  35.553  49.815  1.00 75.71           C  \r
-ATOM   1917  CA  LEU A 262      35.391  33.881  51.047  1.00 73.74           C  \r
-ATOM   1925  CA  LYS A 263      33.562  37.165  50.535  1.00 73.64           C  \r
-ATOM   1934  CA  LYS A 264      34.299  38.143  46.954  1.00 72.48           C  \r
-ATOM   1943  CA  ASP A 265      31.954  37.554  43.993  1.00 69.65           C  \r
-ATOM   1951  CA  ASN A 266      34.660  35.649  42.106  1.00 65.06           C  \r
-ATOM   1959  CA  THR A 267      35.835  33.117  44.683  1.00 58.24           C  \r
-ATOM   1966  CA  TYR A 268      34.459  29.646  43.909  1.00 51.04           C  \r
-ATOM   1978  CA  VAL A 269      35.192  26.827  46.382  1.00 44.95           C  \r
-ATOM   1985  CA  TYR A 270      35.012  23.150  45.368  1.00 44.96           C  \r
-ATOM   1997  CA  MET A 271      35.162  20.122  47.656  1.00 41.72           C  \r
-ATOM   2005  CA  CYS A 272      35.314  16.468  46.632  1.00 37.19           C  \r
-ATOM   2011  CA  GLY A 273      36.343  13.080  47.951  1.00 37.65           C  \r
-ATOM   2015  CA  LEU A 274      36.040  10.886  51.020  1.00 39.39           C  \r
-ATOM   2023  CA  LYS A 275      33.076  12.283  52.955  1.00 44.86           C  \r
-ATOM   2032  CA  GLY A 276      34.322  13.183  56.400  1.00 49.16           C  \r
-ATOM   2036  CA  MET A 277      36.932  15.608  55.168  1.00 53.30           C  \r
-ATOM   2044  CA  GLU A 278      33.917  17.921  55.165  1.00 56.74           C  \r
-ATOM   2053  CA  LYS A 279      33.531  18.089  58.947  1.00 59.30           C  \r
-ATOM   2062  CA  GLY A 280      36.982  19.413  59.776  1.00 58.94           C  \r
-ATOM   2066  CA  ILE A 281      36.705  22.048  57.063  1.00 61.43           C  \r
-ATOM   2074  CA  ASP A 282      33.453  23.402  58.515  1.00 67.06           C  \r
-ATOM   2082  CA  ASP A 283      35.050  23.189  61.972  1.00 74.12           C  \r
-ATOM   2090  CA  ILE A 284      37.991  25.422  61.040  1.00 78.49           C  \r
-ATOM   2098  CA  MET A 285      35.456  27.566  59.201  1.00 82.25           C  \r
-ATOM   2106  CA  VAL A 286      32.941  27.959  62.027  1.00 83.44           C  \r
-ATOM   2113  CA  SER A 287      35.610  29.113  64.469  1.00 83.43           C  \r
-ATOM   2119  CA  LEU A 288      36.927  31.601  61.887  1.00 85.53           C  \r
-ATOM   2127  CA  ALA A 289      33.506  33.025  60.970  1.00 86.85           C  \r
-ATOM   2132  CA  GLU A 290      31.841  32.696  64.387  1.00 89.26           C  \r
-ATOM   2141  CA  LYS A 291      34.438  35.312  65.347  1.00 88.73           C  \r
-ATOM   2150  CA  ASP A 292      33.635  37.891  62.652  1.00 88.03           C  \r
-ATOM   2158  CA  GLY A 293      30.219  37.450  61.081  1.00 87.88           C  \r
-ATOM   2162  CA  ILE A 294      27.319  35.051  61.511  1.00 84.61           C  \r
-ATOM   2170  CA  ASP A 295      27.665  31.329  62.188  1.00 82.45           C  \r
-ATOM   2178  CA  TRP A 296      29.539  29.627  59.355  1.00 80.12           C  \r
-ATOM   2192  CA  PHE A 297      26.527  27.452  58.512  1.00 78.99           C  \r
-ATOM   2203  CA  ASP A 298      24.167  30.241  57.486  1.00 76.37           C  \r
-ATOM   2211  CA  TYR A 299      27.074  31.748  55.561  1.00 74.07           C  \r
-ATOM   2223  CA  LYS A 300      27.679  28.620  53.473  1.00 74.31           C  \r
-ATOM   2232  CA  LYS A 301      24.059  29.146  52.464  1.00 75.97           C  \r
-ATOM   2241  CA  GLN A 302      24.921  32.563  51.018  1.00 75.38           C  \r
-ATOM   2250  CA  LEU A 303      27.896  31.099  49.155  1.00 72.10           C  \r
-ATOM   2258  CA  LYS A 304      25.917  28.207  47.690  1.00 72.08           C  \r
-ATOM   2267  CA  ARG A 305      23.595  31.021  46.594  1.00 74.82           C  \r
-ATOM   2278  CA  GLY A 306      26.071  32.136  43.958  1.00 71.84           C  \r
-ATOM   2282  CA  ASP A 307      27.505  28.682  43.220  1.00 67.23           C  \r
-ATOM   2290  CA  GLN A 308      30.620  29.291  45.346  1.00 60.18           C  \r
-ATOM   2299  CA  TRP A 309      30.585  26.177  47.537  1.00 52.25           C  \r
-ATOM   2313  CA  ASN A 310      29.894  22.997  45.597  1.00 45.03           C  \r
-ATOM   2321  CA  VAL A 311      30.327  19.716  47.403  1.00 39.13           C  \r
-ATOM   2328  CA  GLU A 312      30.507  16.190  46.110  1.00 35.17           C  \r
-ATOM   2337  CA  VAL A 313      31.761  13.957  48.861  1.00 30.12           C  \r
-ATOM   2344  CA  TYR A 314      31.112  10.230  49.021  1.00 28.23           C  \r
-ATOM   2358  CA  ALA B   1       2.311  24.702  44.475  1.00 74.17           C  \r
-ATOM   2363  CA  THR B   2       3.590  24.207  48.055  1.00 74.76           C  \r
-ATOM   2370  CA  TYR B   3       3.069  20.876  49.837  1.00 73.52           C  \r
-ATOM   2382  CA  ASN B   4       3.748  19.874  53.435  1.00 75.75           C  \r
-ATOM   2390  CA  VAL B   5       6.618  17.399  53.868  1.00 75.95           C  \r
-ATOM   2397  CA  LYS B   6       7.769  15.523  56.983  1.00 77.70           C  \r
-ATOM   2406  CA  LEU B   7      11.351  14.325  57.458  1.00 78.91           C  \r
-ATOM   2414  CA  ILE B   8      11.807  11.511  59.985  1.00 81.00           C  \r
-ATOM   2422  CA  THR B   9      15.560  12.046  60.247  1.00 87.49           C  \r
-ATOM   2429  CA  PRO B  10      17.662   9.793  62.539  1.00 92.94           C  \r
-ATOM   2436  CA  GLU B  11      18.161  13.147  64.282  1.00 96.61           C  \r
-ATOM   2445  CA  GLY B  12      14.579  14.154  65.041  1.00 97.52           C  \r
-ATOM   2449  CA  GLU B  13      11.602  14.823  62.748  1.00 96.90           C  \r
-ATOM   2458  CA  VAL B  14      11.547  17.892  60.480  1.00 96.63           C  \r
-ATOM   2465  CA  GLU B  15       8.340  19.701  59.440  1.00 94.86           C  \r
-ATOM   2474  CA  LEU B  16       9.471  21.479  56.254  1.00 91.55           C  \r
-ATOM   2482  CA  GLN B  17       7.281  23.141  53.598  1.00 89.75           C  \r
-ATOM   2491  CA  VAL B  18       8.485  22.069  50.145  1.00 87.92           C  \r
-ATOM   2498  CA  PRO B  19       6.906  23.558  46.964  1.00 86.35           C  \r
-ATOM   2505  CA  ASP B  20       5.990  21.744  43.717  1.00 86.29           C  \r
-ATOM   2513  CA  ASP B  21       8.578  22.751  41.083  1.00 83.78           C  \r
-ATOM   2521  CA  VAL B  22      11.385  22.401  43.639  1.00 80.98           C  \r
-ATOM   2528  CA  TYR B  23      13.439  19.280  44.481  1.00 77.04           C  \r
-ATOM   2540  CA  ILE B  24      13.212  18.196  48.120  1.00 76.45           C  \r
-ATOM   2548  CA  LEU B  25      16.959  18.133  48.851  1.00 75.15           C  \r
-ATOM   2556  CA  ASP B  26      17.154  21.745  47.689  1.00 75.80           C  \r
-ATOM   2564  CA  GLN B  27      14.616  22.906  50.280  1.00 76.31           C  \r
-ATOM   2573  CA  ALA B  28      16.562  20.957  52.914  1.00 78.86           C  \r
-ATOM   2578  CA  GLU B  29      19.698  23.011  52.198  1.00 81.51           C  \r
-ATOM   2587  CA  GLU B  30      17.491  26.106  52.510  1.00 83.25           C  \r
-ATOM   2596  CA  ASP B  31      15.857  25.933  55.935  1.00 81.92           C  \r
-ATOM   2604  CA  GLY B  32      19.280  24.859  57.151  1.00 79.08           C  \r
-ATOM   2608  CA  ILE B  33      18.621  21.130  57.157  1.00 76.93           C  \r
-ATOM   2616  CA  ASP B  34      21.528  18.731  56.618  1.00 73.53           C  \r
-ATOM   2624  CA  LEU B  35      20.738  15.738  54.421  1.00 67.74           C  \r
-ATOM   2632  CA  PRO B  36      23.138  13.391  52.547  1.00 65.90           C  \r
-ATOM   2639  CA  TYR B  37      23.916  14.226  48.912  1.00 64.85           C  \r
-ATOM   2651  CA  SER B  38      26.659  13.373  46.412  1.00 62.58           C  \r
-ATOM   2657  CA  CYS B  39      26.193  13.603  42.652  1.00 60.99           C  \r
-ATOM   2663  CA  ARG B  40      22.908  15.441  43.251  1.00 58.35           C  \r
-ATOM   2674  CA  ALA B  41      21.699  14.108  39.886  1.00 56.38           C  \r
-ATOM   2679  CA  GLY B  42      19.886  10.955  40.991  1.00 56.66           C  \r
-ATOM   2683  CA  SER B  43      22.465   8.336  40.010  1.00 58.55           C  \r
-ATOM   2689  CA  CYS B  44      23.548   7.052  43.447  1.00 56.27           C  \r
-ATOM   2695  CA  SER B  45      22.057   5.987  46.791  1.00 58.20           C  \r
-ATOM   2701  CA  SER B  46      23.574   8.773  48.890  1.00 59.13           C  \r
-ATOM   2707  CA  CYS B  47      20.220  10.475  49.517  1.00 65.64           C  \r
-ATOM   2713  CA  ALA B  48      17.911   7.436  49.610  1.00 69.71           C  \r
-ATOM   2718  CA  GLY B  49      14.733   7.635  51.681  1.00 73.09           C  \r
-ATOM   2722  CA  LYS B  50      11.712   5.340  52.183  1.00 73.77           C  \r
-ATOM   2731  CA  VAL B  51       8.551   7.412  51.568  1.00 76.51           C  \r
-ATOM   2738  CA  VAL B  52       5.237   7.081  53.429  1.00 78.85           C  \r
-ATOM   2745  CA  SER B  53       2.180   9.376  53.647  1.00 79.57           C  \r
-ATOM   2751  CA  GLY B  54       2.118  10.991  50.218  1.00 76.32           C  \r
-ATOM   2755  CA  SER B  55       3.577  10.944  46.726  1.00 76.31           C  \r
-ATOM   2761  CA  VAL B  56       6.436  12.592  44.828  1.00 77.50           C  \r
-ATOM   2768  CA  ASP B  57       7.691  12.960  41.243  1.00 76.83           C  \r
-ATOM   2776  CA  GLN B  58      11.150  11.483  40.555  1.00 76.66           C  \r
-ATOM   2785  CA  SER B  59      10.976  10.827  36.792  1.00 80.19           C  \r
-ATOM   2791  CA  ASP B  60      14.688  11.644  36.510  1.00 83.51           C  \r
-ATOM   2799  CA  GLN B  61      15.175   8.137  37.916  1.00 85.74           C  \r
-ATOM   2808  CA  SER B  62      18.644   7.080  36.699  1.00 85.85           C  \r
-ATOM   2814  CA  TYR B  63      19.324   5.049  39.852  1.00 84.49           C  \r
-ATOM   2826  CA  LEU B  64      15.683   4.296  40.629  1.00 89.06           C  \r
-ATOM   2834  CA  ASP B  65      15.356   0.604  39.742  1.00 92.21           C  \r
-ATOM   2842  CA  ASP B  66      12.421  -1.791  39.331  1.00 92.35           C  \r
-ATOM   2850  CA  GLY B  67      10.747  -2.542  42.659  1.00 89.07           C  \r
-ATOM   2854  CA  GLN B  68      12.336   0.632  44.010  1.00 88.41           C  \r
-ATOM   2863  CA  ILE B  69       9.483   2.828  42.742  1.00 86.11           C  \r
-ATOM   2871  CA  ALA B  70       7.060   0.441  44.446  1.00 81.10           C  \r
-ATOM   2876  CA  ASP B  71       8.985  -0.310  47.648  1.00 76.82           C  \r
-ATOM   2884  CA  GLY B  72       8.653   3.423  48.186  1.00 73.00           C  \r
-ATOM   2888  CA  TRP B  73      12.342   4.386  48.095  1.00 67.93           C  \r
-ATOM   2902  CA  VAL B  74      13.052   8.007  47.136  1.00 63.84           C  \r
-ATOM   2909  CA  LEU B  75      16.093   9.940  45.892  1.00 58.37           C  \r
-ATOM   2917  CA  THR B  76      15.524  13.198  47.826  1.00 55.82           C  \r
-ATOM   2924  CA  CYS B  77      17.941  15.109  45.556  1.00 58.23           C  \r
-ATOM   2930  CA  HIS B  78      15.777  14.389  42.513  1.00 64.55           C  \r
-ATOM   2940  CA  ALA B  79      12.108  14.429  43.512  1.00 68.40           C  \r
-ATOM   2945  CA  TYR B  80       9.442  17.152  43.581  1.00 69.69           C  \r
-ATOM   2957  CA  PRO B  81       6.414  16.584  45.842  1.00 71.39           C  \r
-ATOM   2964  CA  THR B  82       3.015  16.014  44.179  1.00 73.67           C  \r
-ATOM   2971  CA  SER B  83       1.278  15.771  47.557  1.00 76.90           C  \r
-ATOM   2977  CA  ASP B  84       1.940  16.119  51.289  1.00 75.20           C  \r
-ATOM   2985  CA  VAL B  85       4.840  13.765  52.050  1.00 71.37           C  \r
-ATOM   2992  CA  VAL B  86       6.363  11.824  54.956  1.00 70.12           C  \r
-ATOM   2999  CA  ILE B  87       9.770  10.300  54.188  1.00 74.18           C  \r
-ATOM   3007  CA  GLU B  88      12.211   8.403  56.410  1.00 78.53           C  \r
-ATOM   3012  CA  THR B  89      15.541   9.964  55.407  1.00 79.79           C  \r
-ATOM   3019  CA  HIS B  90      19.062   8.538  55.881  1.00 79.40           C  \r
-ATOM   3029  CA  LYS B  91      17.584   5.099  55.099  1.00 84.52           C  \r
-ATOM   3038  CA  GLU B  92      20.016   2.596  53.549  1.00 91.64           C  \r
-ATOM   3047  CA  GLU B  93      20.192  -0.858  51.981  1.00 98.97           C  \r
-ATOM   3056  CA  GLU B  94      23.321  -2.924  51.298  1.00106.32           C  \r
-ATOM   3065  CA  LEU B  95      22.104  -6.552  51.453  1.00111.32           C  \r
-ATOM   3073  CA  THR B  96      18.778  -8.417  51.866  1.00116.01           C  \r
-ATOM   3080  CA  GLY B  97      18.877 -11.302  49.394  1.00116.63           C  \r
-ATOM   3084  CA  ALA B  98      22.056  -9.833  47.910  1.00116.02           C  \r
-ATOM   3091  CA  GLU C  19      26.080  -2.480  15.294  1.00 73.96           C  \r
-ATOM   3100  CA  SER C  20      23.405   0.198  14.956  1.00 67.27           C  \r
-ATOM   3106  CA  LYS C  21      22.937   3.927  15.380  1.00 59.27           C  \r
-ATOM   3115  CA  LYS C  22      19.198   3.481  15.874  1.00 58.42           C  \r
-ATOM   3124  CA  GLN C  23      17.251   3.141  19.137  1.00 59.89           C  \r
-ATOM   3133  CA  GLU C  24      17.931  -0.276  20.610  1.00 62.66           C  \r
-ATOM   3142  CA  GLU C  25      16.850  -0.453  24.226  1.00 64.27           C  \r
-ATOM   3151  CA  GLY C  26      13.211  -0.817  25.116  1.00 61.78           C  \r
-ATOM   3155  CA  VAL C  27      12.703  -2.073  21.582  1.00 58.37           C  \r
-ATOM   3162  CA  VAL C  28      10.779  -5.347  21.485  1.00 54.17           C  \r
-ATOM   3169  CA  THR C  29       9.481  -7.339  18.549  1.00 52.79           C  \r
-ATOM   3176  CA  ASN C  30       6.670  -9.775  17.786  1.00 51.30           C  \r
-ATOM   3184  CA  LEU C  31       4.863  -9.997  21.112  1.00 51.05           C  \r
-ATOM   3192  CA  TYR C  32       1.766 -11.297  19.327  1.00 50.51           C  \r
-ATOM   3204  CA  LYS C  33       1.373 -13.532  16.266  1.00 49.49           C  \r
-ATOM   3213  CA  PRO C  34      -1.609 -14.150  13.925  1.00 50.98           C  \r
-ATOM   3220  CA  LYS C  35      -2.450 -17.248  16.011  1.00 55.46           C  \r
-ATOM   3229  CA  GLU C  36      -2.977 -15.400  19.288  1.00 53.79           C  \r
-ATOM   3238  CA  PRO C  37      -3.251 -11.638  18.607  1.00 49.32           C  \r
-ATOM   3245  CA  TYR C  38      -3.674  -9.050  21.318  1.00 46.76           C  \r
-ATOM   3257  CA  VAL C  39      -7.276  -7.947  21.418  1.00 43.68           C  \r
-ATOM   3264  CA  GLY C  40      -7.415  -4.194  21.922  1.00 41.62           C  \r
-ATOM   3268  CA  ARG C  41     -10.273  -1.719  21.954  1.00 40.07           C  \r
-ATOM   3279  CA  CYS C  42     -11.026   1.064  19.477  1.00 36.37           C  \r
-ATOM   3285  CA  LEU C  43     -11.330   4.206  21.583  1.00 31.09           C  \r
-ATOM   3293  CA  LEU C  44     -11.337   6.671  18.673  1.00 28.46           C  \r
-ATOM   3301  CA  ASN C  45     -11.792   6.653  14.923  1.00 26.74           C  \r
-ATOM   3309  CA  THR C  46     -11.954   9.920  13.013  1.00 25.29           C  \r
-ATOM   3316  CA  LYS C  47     -11.667  10.775   9.352  1.00 21.50           C  \r
-ATOM   3325  CA  ILE C  48      -8.895  13.355   9.121  1.00 19.33           C  \r
-ATOM   3333  CA  THR C  49      -9.125  14.281   5.442  1.00 20.38           C  \r
-ATOM   3340  CA  GLY C  50     -11.630  16.676   3.855  1.00 20.12           C  \r
-ATOM   3344  CA  ASP C  51     -14.895  15.345   2.412  1.00 21.75           C  \r
-ATOM   3352  CA  ASP C  52     -13.889  16.693  -0.999  1.00 21.19           C  \r
-ATOM   3360  CA  ALA C  53     -10.651  14.683  -0.749  1.00 21.06           C  \r
-ATOM   3365  CA  PRO C  54     -10.036  11.974  -3.413  1.00 21.39           C  \r
-ATOM   3372  CA  GLY C  55      -9.982   9.067  -0.977  1.00 24.42           C  \r
-ATOM   3376  CA  GLU C  56     -10.374   9.298   2.857  1.00 22.08           C  \r
-ATOM   3385  CA  THR C  57      -7.723   8.611   5.517  1.00 20.31           C  \r
-ATOM   3392  CA  TRP C  58      -8.541   7.849   9.162  1.00 19.33           C  \r
-ATOM   3406  CA  HIS C  59      -6.758   8.520  12.438  1.00 22.68           C  \r
-ATOM   3416  CA  MET C  60      -7.645   5.951  15.108  1.00 27.16           C  \r
-ATOM   3424  CA  VAL C  61      -6.672   5.224  18.723  1.00 29.32           C  \r
-ATOM   3431  CA  PHE C  62      -6.669   1.704  20.220  1.00 34.23           C  \r
-ATOM   3442  CA  SER C  63      -6.102   0.643  23.847  1.00 37.05           C  \r
-ATOM   3448  CA  THR C  64      -3.096  -1.517  24.798  1.00 41.86           C  \r
-ATOM   3455  CA  GLU C  65      -3.169  -1.652  28.621  1.00 48.33           C  \r
-ATOM   3464  CA  GLY C  66       0.537  -0.885  28.318  1.00 52.45           C  \r
-ATOM   3468  CA  LYS C  67       0.955  -4.385  26.891  1.00 54.14           C  \r
-ATOM   3477  CA  ILE C  68       2.429  -3.211  23.570  1.00 51.52           C  \r
-ATOM   3485  CA  PRO C  69       5.602  -1.279  24.487  1.00 49.85           C  \r
-ATOM   3492  CA  TYR C  70       6.523  -0.180  20.967  1.00 44.48           C  \r
-ATOM   3504  CA  ARG C  71       9.185   2.353  19.993  1.00 40.96           C  \r
-ATOM   3515  CA  GLU C  72       8.727   5.317  17.688  1.00 33.49           C  \r
-ATOM   3524  CA  GLY C  73       8.913   3.876  14.164  1.00 30.16           C  \r
-ATOM   3528  CA  GLN C  74       7.423   0.399  14.427  1.00 31.26           C  \r
-ATOM   3537  CA  SER C  75       4.187  -0.913  12.966  1.00 33.65           C  \r
-ATOM   3543  CA  ILE C  76       1.454  -3.212  14.278  1.00 33.75           C  \r
-ATOM   3551  CA  GLY C  77      -0.295  -5.923  12.356  1.00 34.32           C  \r
-ATOM   3555  CA  VAL C  78      -4.060  -6.111  12.164  1.00 36.67           C  \r
-ATOM   3562  CA  ILE C  79      -6.137  -9.230  11.507  1.00 41.91           C  \r
-ATOM   3570  CA  ALA C  80      -9.427  -8.086  10.024  1.00 44.06           C  \r
-ATOM   3575  CA  ASP C  81     -12.530  -9.927  11.224  1.00 47.03           C  \r
-ATOM   3583  CA  GLY C  82     -13.972 -12.487   8.829  1.00 53.52           C  \r
-ATOM   3587  CA  VAL C  83     -12.521 -14.951   6.324  1.00 62.57           C  \r
-ATOM   3594  CA  ASP C  84     -11.856 -14.200   2.630  1.00 71.97           C  \r
-ATOM   3602  CA  LYS C  85     -12.935 -17.403   0.861  1.00 76.86           C  \r
-ATOM   3611  CA  ASN C  86     -13.690 -18.960   4.253  1.00 76.52           C  \r
-ATOM   3619  CA  GLY C  87     -10.006 -19.837   4.066  1.00 76.22           C  \r
-ATOM   3623  CA  LYS C  88      -8.802 -19.138   7.616  1.00 71.60           C  \r
-ATOM   3632  CA  PRO C  89      -8.651 -15.577   8.944  1.00 64.14           C  \r
-ATOM   3639  CA  HIS C  90      -7.547 -12.649   6.805  1.00 52.35           C  \r
-ATOM   3649  CA  LYS C  91      -3.753 -12.529   6.474  1.00 46.81           C  \r
-ATOM   3658  CA  VAL C  92      -2.180  -9.868   8.686  1.00 43.48           C  \r
-ATOM   3665  CA  ARG C  93      -1.491  -6.414   7.232  1.00 36.99           C  \r
-ATOM   3676  CA  LEU C  94       0.983  -3.882   8.601  1.00 32.95           C  \r
-ATOM   3684  CA  TYR C  95       0.340  -0.239   9.510  1.00 24.84           C  \r
-ATOM   3696  CA  SER C  96       3.003   2.101  10.803  1.00 23.32           C  \r
-ATOM   3702  CA  ILE C  97       2.244   3.502  14.236  1.00 24.12           C  \r
-ATOM   3710  CA  ALA C  98       1.243   7.179  13.932  1.00 22.32           C  \r
-ATOM   3715  CA  SER C  99       1.572   7.636  17.676  1.00 25.69           C  \r
-ATOM   3721  CA  SER C 100       4.752   7.924  19.726  1.00 28.83           C  \r
-ATOM   3727  CA  ALA C 101       5.741   5.521  22.508  1.00 35.61           C  \r
-ATOM   3732  CA  ILE C 102       3.906   7.635  25.079  1.00 38.39           C  \r
-ATOM   3740  CA  GLY C 103       0.899   7.826  22.742  1.00 31.93           C  \r
-ATOM   3744  CA  ASP C 104      -1.803  10.384  21.986  1.00 28.77           C  \r
-ATOM   3752  CA  PHE C 105      -3.050  10.293  25.607  1.00 37.05           C  \r
-ATOM   3763  CA  GLY C 106       0.503  10.389  26.967  1.00 39.36           C  \r
-ATOM   3767  CA  ASP C 107      -0.221   7.437  29.266  1.00 41.44           C  \r
-ATOM   3775  CA  SER C 108       1.566   4.766  27.217  1.00 42.18           C  \r
-ATOM   3781  CA  LYS C 109      -1.747   2.877  27.156  1.00 42.45           C  \r
-ATOM   3790  CA  THR C 110      -2.698   3.586  23.515  1.00 38.10           C  \r
-ATOM   3797  CA  VAL C 111      -1.603   2.971  19.906  1.00 32.79           C  \r
-ATOM   3804  CA  SER C 112      -2.671   5.020  16.872  1.00 29.60           C  \r
-ATOM   3810  CA  LEU C 113      -2.713   4.324  13.126  1.00 25.68           C  \r
-ATOM   3818  CA  CYS C 114      -3.142   6.498   9.999  1.00 24.23           C  \r
-ATOM   3824  CA  VAL C 115      -5.345   4.496   7.641  1.00 22.80           C  \r
-ATOM   3831  CA  LYS C 116      -6.221   5.196   4.015  1.00 22.11           C  \r
-ATOM   3840  CA  ARG C 117      -9.458   3.521   2.955  1.00 25.68           C  \r
-ATOM   3851  CA  LEU C 118      -8.447   1.440  -0.100  1.00 28.80           C  \r
-ATOM   3859  CA  ILE C 119     -11.140   1.661  -2.792  1.00 31.75           C  \r
-ATOM   3867  CA  TYR C 120     -10.086   0.716  -6.312  1.00 32.93           C  \r
-ATOM   3879  CA  THR C 121     -11.388  -0.733  -9.598  1.00 36.84           C  \r
-ATOM   3886  CA  ASN C 122     -10.258  -4.257 -10.546  1.00 36.90           C  \r
-ATOM   3894  CA  ASP C 123      -9.574  -5.562 -14.056  1.00 45.45           C  \r
-ATOM   3902  CA  ALA C 124     -13.196  -6.758 -14.269  1.00 44.66           C  \r
-ATOM   3907  CA  GLY C 125     -14.207  -3.102 -14.023  1.00 45.49           C  \r
-ATOM   3911  CA  GLU C 126     -16.059  -3.511 -10.722  1.00 45.54           C  \r
-ATOM   3920  CA  ILE C 127     -15.507  -1.321  -7.638  1.00 39.70           C  \r
-ATOM   3928  CA  VAL C 128     -13.846  -3.171  -4.762  1.00 38.09           C  \r
-ATOM   3935  CA  LYS C 129     -12.759  -2.512  -1.198  1.00 33.77           C  \r
-ATOM   3944  CA  GLY C 130      -9.566  -3.363   0.599  1.00 31.98           C  \r
-ATOM   3948  CA  VAL C 131     -10.443  -5.797   3.385  1.00 33.16           C  \r
-ATOM   3955  CA  CYS C 132      -8.241  -4.645   6.257  1.00 29.97           C  \r
-ATOM   3961  CA  SER C 133      -8.238  -0.898   5.607  1.00 30.67           C  \r
-ATOM   3967  CA  ASN C 134     -12.022  -0.902   5.268  1.00 30.35           C  \r
-ATOM   3975  CA  PHE C 135     -12.375  -2.946   8.424  1.00 29.86           C  \r
-ATOM   3986  CA  LEU C 136     -10.223  -0.334  10.195  1.00 29.42           C  \r
-ATOM   3994  CA  CYS C 137     -11.779   2.834   8.813  1.00 32.27           C  \r
-ATOM   4000  CA  ASP C 138     -15.116   1.280   9.724  1.00 34.29           C  \r
-ATOM   4008  CA  LEU C 139     -14.287   0.699  13.399  1.00 37.51           C  \r
-ATOM   4016  CA  GLN C 140     -16.635   2.170  16.028  1.00 43.76           C  \r
-ATOM   4025  CA  PRO C 141     -15.630   3.032  19.581  1.00 42.77           C  \r
-ATOM   4032  CA  GLY C 142     -16.082  -0.210  21.478  1.00 42.83           C  \r
-ATOM   4036  CA  ASP C 143     -15.117  -2.625  18.696  1.00 40.91           C  \r
-ATOM   4044  CA  ASN C 144     -12.182  -4.947  19.288  1.00 45.66           C  \r
-ATOM   4052  CA  VAL C 145      -9.056  -5.146  17.145  1.00 46.95           C  \r
-ATOM   4059  CA  GLN C 146      -6.707  -8.107  16.606  1.00 48.69           C  \r
-ATOM   4068  CA  ILE C 147      -3.249  -6.538  17.123  1.00 46.84           C  \r
-ATOM   4076  CA  THR C 148      -0.010  -8.392  16.264  1.00 46.26           C  \r
-ATOM   4083  CA  GLY C 149       3.543  -7.117  16.634  1.00 45.60           C  \r
-ATOM   4087  CA  PRO C 150       5.248  -4.818  17.394  1.00 44.97           C  \r
-ATOM   4094  CA  VAL C 151       7.423  -5.293  14.321  1.00 44.50           C  \r
-ATOM   4101  CA  GLY C 152      10.289  -3.716  12.438  1.00 45.33           C  \r
-ATOM   4105  CA  LYS C 153      13.599  -2.161  13.435  1.00 48.64           C  \r
-ATOM   4114  CA  GLU C 154      14.166  -0.437  10.074  1.00 48.20           C  \r
-ATOM   4123  CA  MET C 155      12.437   2.888  10.737  1.00 41.77           C  \r
-ATOM   4131  CA  LEU C 156      13.839   3.081  14.267  1.00 38.27           C  \r
-ATOM   4139  CA  MET C 157      15.076   6.540  15.308  1.00 34.29           C  \r
-ATOM   4147  CA  PRO C 158      18.782   7.419  15.339  1.00 34.05           C  \r
-ATOM   4154  CA  LYS C 159      20.262   7.521  18.845  1.00 35.82           C  \r
-ATOM   4163  CA  ASP C 160      22.076  10.792  18.273  1.00 35.95           C  \r
-ATOM   4171  CA  PRO C 161      19.683  13.401  19.809  1.00 35.63           C  \r
-ATOM   4178  CA  ASN C 162      21.563  15.948  17.758  1.00 33.92           C  \r
-ATOM   4186  CA  ALA C 163      21.028  14.172  14.487  1.00 30.82           C  \r
-ATOM   4191  CA  THR C 164      19.693  15.722  11.305  1.00 25.18           C  \r
-ATOM   4198  CA  ILE C 165      16.617  13.601  10.636  1.00 19.91           C  \r
-ATOM   4206  CA  ILE C 166      15.351  13.978   7.060  1.00 13.76           C  \r
-ATOM   4214  CA  MET C 167      11.843  12.550   6.703  1.00 14.98           C  \r
-ATOM   4222  CA  LEU C 168      10.385  11.831   3.251  1.00 16.64           C  \r
-ATOM   4230  CA  ALA C 169       6.747  10.808   3.007  1.00 15.85           C  \r
-ATOM   4235  CA  THR C 170       3.765  10.346   0.737  1.00 14.23           C  \r
-ATOM   4242  CA  GLY C 171       0.255   9.724   2.035  1.00 13.78           C  \r
-ATOM   4246  CA  THR C 172      -0.103   7.560   5.139  1.00 17.62           C  \r
-ATOM   4253  CA  GLY C 173       3.646   7.343   4.821  1.00 17.20           C  \r
-ATOM   4257  CA  ILE C 174       3.469  10.213   7.270  1.00 15.91           C  \r
-ATOM   4265  CA  ALA C 175       2.586   7.783  10.110  1.00 15.63           C  \r
-ATOM   4270  CA  PRO C 176       6.023   6.933  11.582  1.00 17.04           C  \r
-ATOM   4277  CA  PHE C 177       7.215  10.514  11.327  1.00 18.21           C  \r
-ATOM   4288  CA  ARG C 178       4.268  11.745  13.359  1.00 22.35           C  \r
-ATOM   4299  CA  SER C 179       5.563   9.289  15.983  1.00 25.22           C  \r
-ATOM   4305  CA  PHE C 180       9.139  10.593  15.614  1.00 25.98           C  \r
-ATOM   4316  CA  LEU C 181       7.925  14.180  15.767  1.00 29.12           C  \r
-ATOM   4324  CA  TRP C 182       5.625  13.641  18.714  1.00 31.35           C  \r
-ATOM   4338  CA  LYS C 183       8.488  12.385  20.871  1.00 30.92           C  \r
-ATOM   4347  CA  MET C 184      10.841  15.050  19.503  1.00 24.85           C  \r
-ATOM   4355  CA  PHE C 185       8.741  18.202  20.114  1.00 22.97           C  \r
-ATOM   4366  CA  PHE C 186       5.604  17.337  22.076  1.00 27.77           C  \r
-ATOM   4377  CA  GLU C 187       7.117  15.432  25.009  1.00 37.71           C  \r
-ATOM   4386  CA  LYS C 188       9.542  15.977  27.878  1.00 53.59           C  \r
-ATOM   4395  CA  HIS C 189      12.355  13.416  28.180  1.00 63.67           C  \r
-ATOM   4405  CA  ASP C 190      15.318  13.181  30.569  1.00 66.93           C  \r
-ATOM   4413  CA  ASP C 191      17.480  11.106  28.238  1.00 59.79           C  \r
-ATOM   4421  CA  TYR C 192      16.190  12.725  25.047  1.00 51.96           C  \r
-ATOM   4433  CA  LYS C 193      16.700  16.406  24.324  1.00 47.01           C  \r
-ATOM   4442  CA  PHE C 194      16.580  16.471  20.530  1.00 39.85           C  \r
-ATOM   4453  CA  ASN C 195      18.572  19.494  19.409  1.00 37.52           C  \r
-ATOM   4461  CA  GLY C 196      19.361  18.548  15.845  1.00 32.08           C  \r
-ATOM   4465  CA  LEU C 197      17.310  19.266  12.766  1.00 28.26           C  \r
-ATOM   4473  CA  GLY C 198      14.051  17.526  11.928  1.00 25.05           C  \r
-ATOM   4477  CA  TRP C 199      13.211  18.137   8.269  1.00 19.81           C  \r
-ATOM   4491  CA  LEU C 200       9.908  16.742   7.059  1.00 13.86           C  \r
-ATOM   4499  CA  PHE C 201       8.855  16.521   3.429  1.00 14.83           C  \r
-ATOM   4510  CA  LEU C 202       5.288  15.361   2.717  1.00 16.12           C  \r
-ATOM   4518  CA  GLY C 203       3.701  14.731  -0.681  1.00 13.79           C  \r
-ATOM   4522  CA  VAL C 204      -0.051  14.414  -1.182  1.00 11.75           C  \r
-ATOM   4529  CA  PRO C 205      -2.113  15.264  -4.308  1.00 14.66           C  \r
-ATOM   4536  CA  THR C 206      -4.553  17.737  -2.778  1.00 16.37           C  \r
-ATOM   4543  CA  SER C 207      -4.756  20.169   0.120  1.00 18.01           C  \r
-ATOM   4549  CA  SER C 208      -7.780  18.225   1.280  1.00 17.59           C  \r
-ATOM   4555  CA  SER C 209      -5.452  15.198   1.550  1.00 16.19           C  \r
-ATOM   4561  CA  LEU C 210      -2.972  16.940   3.860  1.00 14.22           C  \r
-ATOM   4569  CA  LEU C 211      -2.255  14.980   7.059  1.00 14.43           C  \r
-ATOM   4577  CA  TYR C 212      -1.624  16.449  10.549  1.00 18.94           C  \r
-ATOM   4589  CA  LYS C 213      -0.818  19.896   9.150  1.00 22.61           C  \r
-ATOM   4598  CA  GLU C 214      -2.039  21.572  12.352  1.00 25.73           C  \r
-ATOM   4607  CA  GLU C 215       0.152  19.413  14.514  1.00 19.23           C  \r
-ATOM   4616  CA  PHE C 216       3.216  20.178  12.439  1.00 17.80           C  \r
-ATOM   4627  CA  GLY C 217       2.478  23.890  12.512  1.00 19.90           C  \r
-ATOM   4631  CA  LYS C 218       2.578  24.001  16.294  1.00 25.54           C  \r
-ATOM   4640  CA  MET C 219       5.810  22.021  16.188  1.00 26.79           C  \r
-ATOM   4648  CA  LYS C 220       7.224  24.606  13.819  1.00 31.85           C  \r
-ATOM   4657  CA  GLU C 221       6.071  27.341  16.219  1.00 38.62           C  \r
-ATOM   4666  CA  ARG C 222       7.760  25.760  19.233  1.00 39.10           C  \r
-ATOM   4677  CA  ALA C 223      11.124  24.971  17.668  1.00 35.43           C  \r
-ATOM   4682  CA  PRO C 224      11.696  27.100  14.528  1.00 32.99           C  \r
-ATOM   4689  CA  GLU C 225      15.425  26.331  14.360  1.00 33.87           C  \r
-ATOM   4698  CA  ASN C 226      15.038  22.591  14.986  1.00 30.46           C  \r
-ATOM   4706  CA  PHE C 227      12.088  21.755  12.732  1.00 24.98           C  \r
-ATOM   4717  CA  ARG C 228      11.351  22.384   9.075  1.00 19.87           C  \r
-ATOM   4728  CA  VAL C 229       8.435  21.010   7.118  1.00 14.21           C  \r
-ATOM   4735  CA  ASP C 230       7.739  21.452   3.398  1.00 12.26           C  \r
-ATOM   4743  CA  TYR C 231       4.627  20.147   1.722  1.00 14.42           C  \r
-ATOM   4755  CA  ALA C 232       4.334  19.003  -1.872  1.00  9.99           C  \r
-ATOM   4760  CA  VAL C 233       0.778  19.232  -3.168  1.00 10.49           C  \r
-ATOM   4767  CA  SER C 234       1.043  17.769  -6.694  1.00 19.00           C  \r
-ATOM   4773  CA  ARG C 235      -2.240  19.042  -8.206  1.00 23.13           C  \r
-ATOM   4784  CA  GLU C 236      -2.069  22.459  -6.578  1.00 17.58           C  \r
-ATOM   4793  CA  GLN C 237       1.546  23.511  -6.623  1.00 15.89           C  \r
-ATOM   4802  CA  THR C 238       4.202  24.018  -9.275  1.00 17.86           C  \r
-ATOM   4809  CA  ASN C 239       7.922  24.800  -9.182  1.00 15.15           C  \r
-ATOM   4817  CA  ALA C 240       9.558  27.791 -10.892  1.00 21.51           C  \r
-ATOM   4822  CA  ALA C 241       9.475  25.887 -14.174  1.00 24.05           C  \r
-ATOM   4827  CA  GLY C 242       5.741  25.110 -13.938  1.00 26.25           C  \r
-ATOM   4831  CA  GLU C 243       5.999  21.359 -13.153  1.00 25.92           C  \r
-ATOM   4840  CA  ARG C 244       3.679  19.536 -10.704  1.00 24.04           C  \r
-ATOM   4851  CA  MET C 245       5.076  19.643  -7.174  1.00 18.58           C  \r
-ATOM   4859  CA  TYR C 246       5.784  16.047  -6.100  1.00 14.16           C  \r
-ATOM   4871  CA  ILE C 247       7.910  15.343  -3.034  1.00 16.78           C  \r
-ATOM   4879  CA  GLN C 248      11.089  15.070  -5.120  1.00 18.72           C  \r
-ATOM   4888  CA  THR C 249      10.168  18.255  -6.921  1.00 20.93           C  \r
-ATOM   4895  CA  ARG C 250       9.962  20.031  -3.567  1.00 19.25           C  \r
-ATOM   4906  CA  MET C 251      13.275  18.471  -2.561  1.00 19.40           C  \r
-ATOM   4914  CA  ALA C 252      14.910  19.812  -5.760  1.00 20.48           C  \r
-ATOM   4919  CA  GLU C 253      14.456  23.418  -4.569  1.00 18.19           C  \r
-ATOM   4928  CA  TYR C 254      16.804  22.515  -1.673  1.00 17.80           C  \r
-ATOM   4940  CA  LYS C 255      19.038  20.415  -3.902  1.00 20.66           C  \r
-ATOM   4949  CA  GLU C 256      22.452  21.603  -2.682  1.00 16.05           C  \r
-ATOM   4958  CA  GLU C 257      21.544  21.914   0.993  1.00 15.89           C  \r
-ATOM   4967  CA  LEU C 258      20.377  18.297   0.919  1.00 20.74           C  \r
-ATOM   4975  CA  TRP C 259      23.388  16.939  -0.965  1.00 23.45           C  \r
-ATOM   4989  CA  GLU C 260      25.645  18.669   1.563  1.00 24.08           C  \r
-ATOM   4998  CA  LEU C 261      23.573  17.378   4.477  1.00 24.74           C  \r
-ATOM   5006  CA  LEU C 262      24.020  13.928   2.938  1.00 26.14           C  \r
-ATOM   5014  CA  LYS C 263      27.792  14.091   3.402  1.00 25.40           C  \r
-ATOM   5023  CA  LYS C 264      27.457  14.521   7.176  1.00 31.47           C  \r
-ATOM   5032  CA  ASP C 265      27.877  11.474   9.425  1.00 35.31           C  \r
-ATOM   5040  CA  ASN C 266      24.934  12.482  11.620  1.00 29.63           C  \r
-ATOM   5048  CA  THR C 267      22.321  12.795   8.832  1.00 28.00           C  \r
-ATOM   5055  CA  TYR C 268      19.556  10.160   8.808  1.00 27.00           C  \r
-ATOM   5067  CA  VAL C 269      17.143   9.903   5.884  1.00 24.65           C  \r
-ATOM   5074  CA  TYR C 270      13.890   8.016   6.276  1.00 23.37           C  \r
-ATOM   5086  CA  MET C 271      11.373   7.327   3.518  1.00 18.93           C  \r
-ATOM   5094  CA  CYS C 272       7.834   6.074   4.043  1.00 18.24           C  \r
-ATOM   5100  CA  GLY C 273       4.784   5.874   1.826  1.00 22.39           C  \r
-ATOM   5104  CA  LEU C 274       3.837   4.483  -1.568  1.00 26.95           C  \r
-ATOM   5112  CA  LYS C 275       6.305   2.384  -3.532  1.00 32.36           C  \r
-ATOM   5121  CA  GLY C 276       7.741   4.199  -6.514  1.00 37.46           C  \r
-ATOM   5125  CA  MET C 277       7.714   7.455  -4.608  1.00 28.76           C  \r
-ATOM   5133  CA  GLU C 278      11.430   6.639  -4.425  1.00 32.22           C  \r
-ATOM   5142  CA  LYS C 279      12.017   6.321  -8.153  1.00 29.94           C  \r
-ATOM   5151  CA  GLY C 280      11.317  10.057  -8.293  1.00 24.18           C  \r
-ATOM   5155  CA  ILE C 281      13.766  10.673  -5.460  1.00 23.68           C  \r
-ATOM   5163  CA  ASP C 282      16.431   8.365  -6.934  1.00 26.58           C  \r
-ATOM   5171  CA  ASP C 283      16.211  10.530 -10.054  1.00 28.70           C  \r
-ATOM   5179  CA  ILE C 284      17.089  13.937  -8.538  1.00 27.28           C  \r
-ATOM   5187  CA  MET C 285      19.706  12.222  -6.388  1.00 27.45           C  \r
-ATOM   5195  CA  VAL C 286      21.377  10.712  -9.470  1.00 30.74           C  \r
-ATOM   5202  CA  SER C 287      21.619  14.159 -11.061  1.00 32.14           C  \r
-ATOM   5208  CA  LEU C 288      23.240  15.463  -7.873  1.00 34.20           C  \r
-ATOM   5216  CA  ALA C 289      25.801  12.653  -7.874  1.00 40.16           C  \r
-ATOM   5221  CA  GLU C 290      26.837  12.825 -11.536  1.00 41.84           C  \r
-ATOM   5230  CA  LYS C 291      27.855  16.387 -10.793  1.00 43.17           C  \r
-ATOM   5239  CA  ASP C 292      30.299  15.115  -8.139  1.00 41.84           C  \r
-ATOM   5247  CA  GLY C 293      31.237  12.232 -10.420  1.00 46.12           C  \r
-ATOM   5251  CA  ILE C 294      30.053   9.669  -7.864  1.00 45.54           C  \r
-ATOM   5259  CA  ASP C 295      27.399   6.998  -8.480  1.00 41.14           C  \r
-ATOM   5267  CA  TRP C 296      24.222   7.605  -6.479  1.00 30.67           C  \r
-ATOM   5281  CA  PHE C 297      23.381   3.910  -6.151  1.00 31.97           C  \r
-ATOM   5292  CA  ASP C 298      26.856   2.916  -4.907  1.00 38.12           C  \r
-ATOM   5300  CA  TYR C 299      26.671   5.875  -2.540  1.00 39.05           C  \r
-ATOM   5312  CA  LYS C 300      23.196   4.971  -1.294  1.00 41.63           C  \r
-ATOM   5321  CA  LYS C 301      24.542   1.489  -0.577  1.00 43.40           C  \r
-ATOM   5330  CA  GLN C 302      27.207   3.064   1.608  1.00 43.79           C  \r
-ATOM   5339  CA  LEU C 303      24.476   5.181   3.238  1.00 41.51           C  \r
-ATOM   5347  CA  LYS C 304      22.138   2.343   4.264  1.00 45.18           C  \r
-ATOM   5356  CA  ARG C 305      25.322   0.535   5.256  1.00 46.65           C  \r
-ATOM   5367  CA  GLY C 306      25.613   3.181   7.945  1.00 40.29           C  \r
-ATOM   5371  CA  ASP C 307      21.954   3.487   8.940  1.00 41.21           C  \r
-ATOM   5379  CA  GLN C 308      21.463   6.730   7.023  1.00 35.55           C  \r
-ATOM   5388  CA  TRP C 309      18.961   5.674   4.361  1.00 31.22           C  \r
-ATOM   5402  CA  ASN C 310      16.018   3.728   5.752  1.00 31.61           C  \r
-ATOM   5410  CA  VAL C 311      13.120   2.841   3.452  1.00 32.13           C  \r
-ATOM   5417  CA  GLU C 312       9.705   1.332   4.261  1.00 31.51           C  \r
-ATOM   5426  CA  VAL C 313       7.466   1.606   1.209  1.00 26.39           C  \r
-ATOM   5433  CA  TYR C 314       4.403  -0.343   0.111  1.00 25.42           C  \r
+HEADER    OXIDOREDUCTASE/ELECTRON TRANSPORT       08-MAY-00   1GAQ 
+ATOM      2  CA  GLU A  19      20.491  30.713  36.290  1.00 74.29           C  
+ATOM     11  CA  SER A  20      24.056  29.774  37.264  1.00 72.09           C  
+ATOM     17  CA  LYS A  21      27.517  31.289  37.563  1.00 70.09           C  
+ATOM     26  CA  LYS A  22      28.794  27.865  36.481  1.00 68.64           C  
+ATOM     35  CA  GLN A  23      29.484  26.806  32.884  1.00 70.46           C  
+ATOM     44  CA  GLU A  24      26.420  25.175  31.360  1.00 72.08           C  
+ATOM     53  CA  GLU A  25      26.736  26.049  27.683  1.00 70.43           C  
+ATOM     62  CA  GLY A  26      28.299  22.912  26.233  1.00 63.14           C  
+ATOM     66  CA  VAL A  27      26.863  20.704  28.982  1.00 54.50           C  
+ATOM     73  CA  VAL A  28      25.030  17.390  28.655  1.00 48.32           C  
+ATOM     80  CA  THR A  29      23.728  14.677  30.991  1.00 44.86           C  
+ATOM     87  CA  ASN A  30      22.327  11.164  30.703  1.00 45.42           C  
+ATOM     95  CA  LEU A  31      23.332  10.459  27.102  1.00 45.42           C  
+ATOM    103  CA  TYR A  32      23.549   6.898  28.380  1.00 45.88           C  
+ATOM    115  CA  LYS A  33      21.656   5.321  31.262  1.00 47.27           C  
+ATOM    124  CA  PRO A  34      21.991   2.046  33.248  1.00 48.99           C  
+ATOM    131  CA  LYS A  35      19.339   0.560  30.970  1.00 52.75           C  
+ATOM    140  CA  GLU A  36      21.580   0.855  27.886  1.00 53.33           C  
+ATOM    149  CA  PRO A  37      25.154   2.015  28.678  1.00 47.54           C  
+ATOM    156  CA  TYR A  38      27.929   2.872  26.249  1.00 41.98           C  
+ATOM    168  CA  VAL A  39      30.355  -0.017  25.909  1.00 41.48           C  
+ATOM    175  CA  GLY A  40      33.823   1.485  25.966  1.00 37.59           C  
+ATOM    179  CA  ARG A  41      37.165  -0.277  26.122  1.00 39.77           C  
+ATOM    190  CA  CYS A  42      40.148  -0.029  28.442  1.00 36.51           C  
+ATOM    196  CA  LEU A  43      43.095   1.441  26.554  1.00 36.13           C  
+ATOM    204  CA  LEU A  44      45.231   2.023  29.649  1.00 33.55           C  
+ATOM    212  CA  ASN A  45      45.140   1.026  33.307  1.00 27.79           C  
+ATOM    220  CA  THR A  46      48.056   1.800  35.617  1.00 28.75           C  
+ATOM    227  CA  LYS A  47      48.542   1.776  39.388  1.00 30.31           C  
+ATOM    236  CA  ILE A  48      49.564   5.317  40.376  1.00 31.32           C  
+ATOM    244  CA  THR A  49      50.339   4.682  44.059  1.00 37.62           C  
+ATOM    251  CA  GLY A  50      53.585   3.317  45.460  1.00 44.49           C  
+ATOM    255  CA  ASP A  51      53.706  -0.448  46.087  1.00 52.89           C  
+ATOM    263  CA  ASP A  52      53.910   0.545  49.751  1.00 55.23           C  
+ATOM    271  CA  ALA A  53      50.816   2.767  50.056  1.00 53.34           C  
+ATOM    276  CA  PRO A  54      47.904   1.940  52.405  1.00 50.60           C  
+ATOM    283  CA  GLY A  55      45.420   1.579  49.561  1.00 50.35           C  
+ATOM    287  CA  GLU A  56      46.098   1.286  45.836  1.00 42.53           C  
+ATOM    296  CA  THR A  57      44.534   3.816  43.480  1.00 41.14           C  
+ATOM    303  CA  TRP A  58      44.540   3.423  39.708  1.00 35.60           C  
+ATOM    317  CA  HIS A  59      44.468   5.853  36.796  1.00 31.89           C  
+ATOM    327  CA  MET A  60      42.658   4.227  33.866  1.00 31.65           C  
+ATOM    335  CA  VAL A  61      41.716   5.345  30.350  1.00 30.43           C  
+ATOM    342  CA  PHE A  62      38.669   4.172  28.360  1.00 34.36           C  
+ATOM    353  CA  SER A  63      37.657   4.908  24.772  1.00 34.69           C  
+ATOM    359  CA  THR A  64      34.448   6.828  23.951  1.00 36.96           C  
+ATOM    366  CA  GLU A  65      34.691   7.644  20.254  1.00 40.08           C  
+ATOM    375  CA  GLY A  66      33.742  11.183  21.285  1.00 40.22           C  
+ATOM    379  CA  LYS A  67      30.272   9.763  22.003  1.00 41.93           C  
+ATOM    388  CA  ILE A  68      30.279  11.116  25.577  1.00 41.52           C  
+ATOM    396  CA  PRO A  69      30.791  14.926  25.537  1.00 42.35           C  
+ATOM    403  CA  TYR A  70      31.228  15.232  29.299  1.00 39.84           C  
+ATOM    415  CA  ARG A  71      32.639  18.451  30.768  1.00 44.14           C  
+ATOM    426  CA  GLU A  72      35.122  19.278  33.515  1.00 43.82           C  
+ATOM    435  CA  GLY A  73      33.472  18.458  36.835  1.00 41.97           C  
+ATOM    439  CA  GLN A  74      30.929  15.874  35.657  1.00 37.19           C  
+ATOM    448  CA  SER A  75      31.285  12.124  36.138  1.00 38.28           C  
+ATOM    454  CA  ILE A  76      30.458   8.792  34.539  1.00 36.84           C  
+ATOM    462  CA  GLY A  77      28.983   5.620  35.918  1.00 35.39           C  
+ATOM    466  CA  VAL A  78      30.311   2.108  35.530  1.00 32.05           C  
+ATOM    473  CA  ILE A  79      28.458  -1.201  35.591  1.00 32.67           C  
+ATOM    481  CA  ALA A  80      30.745  -4.018  36.644  1.00 35.36           C  
+ATOM    486  CA  ASP A  81      30.359  -7.373  34.872  1.00 38.72           C  
+ATOM    494  CA  GLY A  82      28.308 -10.332  36.110  1.00 45.79           C  
+ATOM    498  CA  VAL A  83      25.820 -10.242  39.001  1.00 52.24           C  
+ATOM    505  CA  ASP A  84      25.838 -10.250  42.834  1.00 60.54           C  
+ATOM    513  CA  LYS A  85      25.014 -13.158  45.196  1.00 66.72           C  
+ATOM    522  CA  ASN A  86      21.414 -13.062  43.904  1.00 67.37           C  
+ATOM    530  CA  GLY A  87      21.724 -13.423  40.136  1.00 64.74           C  
+ATOM    534  CA  LYS A  88      20.971  -9.733  39.570  1.00 61.12           C  
+ATOM    543  CA  PRO A  89      23.054  -7.201  37.561  1.00 54.68           C  
+ATOM    550  CA  HIS A  90      25.224  -4.957  39.755  1.00 44.44           C  
+ATOM    560  CA  LYS A  91      23.940  -1.433  40.260  1.00 40.48           C  
+ATOM    569  CA  VAL A  92      25.803   1.546  38.843  1.00 38.45           C  
+ATOM    576  CA  ARG A  93      28.709   2.986  40.828  1.00 38.93           C  
+ATOM    587  CA  LEU A  94      29.778   6.584  40.096  1.00 34.37           C  
+ATOM    595  CA  TYR A  95      33.309   7.878  39.513  1.00 30.27           C  
+ATOM    607  CA  SER A  96      34.425  11.475  39.057  1.00 29.44           C  
+ATOM    613  CA  ILE A  97      36.029  12.090  35.662  1.00 27.61           C  
+ATOM    621  CA  ALA A  98      39.769  12.693  36.069  1.00 31.12           C  
+ATOM    626  CA  SER A  99      40.393  13.712  32.475  1.00 32.42           C  
+ATOM    632  CA  SER A 100      39.566  17.142  31.059  1.00 36.14           C  
+ATOM    638  CA  ALA A 101      37.097  17.367  28.154  1.00 41.07           C  
+ATOM    643  CA  ILE A 102      39.764  16.549  25.527  1.00 47.65           C  
+ATOM    651  CA  GLY A 103      41.172  13.692  27.599  1.00 46.77           C  
+ATOM    655  CA  ASP A 104      44.730  12.612  28.289  1.00 43.82           C  
+ATOM    663  CA  PHE A 105      45.115  12.065  24.522  1.00 41.52           C  
+ATOM    674  CA  GLY A 106      43.862  15.455  23.328  1.00 41.66           C  
+ATOM    678  CA  ASP A 107      41.355  13.883  20.926  1.00 40.90           C  
+ATOM    686  CA  SER A 108      38.132  14.250  22.954  1.00 42.95           C  
+ATOM    692  CA  LYS A 109      37.967  10.535  22.224  1.00 44.74           C  
+ATOM    701  CA  THR A 110      38.731   9.184  25.704  1.00 41.09           C  
+ATOM    708  CA  VAL A 111      37.728   9.519  29.374  1.00 39.03           C  
+ATOM    715  CA  SER A 112      39.912   8.705  32.399  1.00 37.17           C  
+ATOM    721  CA  LEU A 113      39.098   7.476  35.935  1.00 32.10           C  
+ATOM    729  CA  CYS A 114      40.964   7.578  39.261  1.00 30.65           C  
+ATOM    735  CA  VAL A 115      39.724   4.459  41.060  1.00 33.45           C  
+ATOM    742  CA  LYS A 116      40.668   3.524  44.628  1.00 34.75           C  
+ATOM    751  CA  ARG A 117      40.376  -0.250  45.123  1.00 32.85           C  
+ATOM    762  CA  LEU A 118      38.137  -1.094  48.077  1.00 30.50           C  
+ATOM    770  CA  ILE A 119      39.376  -3.752  50.459  1.00 34.34           C  
+ATOM    778  CA  TYR A 120      38.699  -4.266  54.125  1.00 31.39           C  
+ATOM    790  CA  THR A 121      38.264  -7.086  56.567  1.00 28.83           C  
+ATOM    797  CA  ASN A 122      34.792  -7.477  58.109  1.00 26.51           C  
+ATOM    805  CA  ASP A 123      33.626  -8.382  61.634  1.00 31.58           C  
+ATOM    813  CA  ALA A 124      34.191 -12.077  60.901  1.00 27.84           C  
+ATOM    818  CA  GLY A 125      37.759 -11.844  59.728  1.00 32.39           C  
+ATOM    822  CA  GLU A 126      36.809 -12.146  56.073  1.00 35.82           C  
+ATOM    831  CA  ILE A 127      38.655  -9.932  53.598  1.00 38.42           C  
+ATOM    839  CA  VAL A 128      36.025  -8.261  51.421  1.00 33.73           C  
+ATOM    846  CA  LYS A 129      36.482  -6.484  48.090  1.00 31.87           C  
+ATOM    855  CA  GLY A 130      34.363  -3.680  46.686  1.00 26.91           C  
+ATOM    859  CA  VAL A 131      32.680  -5.051  43.569  1.00 27.89           C  
+ATOM    866  CA  CYS A 132      33.074  -2.246  41.018  1.00 28.46           C  
+ATOM    872  CA  SER A 133      36.266  -0.553  42.213  1.00 31.33           C  
+ATOM    878  CA  ASN A 134      37.861  -3.983  41.984  1.00 30.29           C  
+ATOM    886  CA  PHE A 135      36.318  -4.795  38.623  1.00 31.48           C  
+ATOM    897  CA  LEU A 136      37.926  -1.553  37.520  1.00 27.81           C  
+ATOM    905  CA  CYS A 137      41.417  -1.976  38.955  1.00 25.91           C  
+ATOM    911  CA  ASP A 138      41.605  -5.419  37.338  1.00 30.22           C  
+ATOM    919  CA  LEU A 139      40.462  -4.306  33.874  1.00 32.69           C  
+ATOM    927  CA  GLN A 140      42.851  -5.511  31.186  1.00 36.80           C  
+ATOM    936  CA  PRO A 141      43.380  -3.220  28.170  1.00 36.16           C  
+ATOM    943  CA  GLY A 142      40.864  -4.420  25.586  1.00 31.10           C  
+ATOM    947  CA  ASP A 143      38.129  -5.298  28.055  1.00 30.62           C  
+ATOM    955  CA  ASN A 144      34.690  -3.847  27.645  1.00 33.52           C  
+ATOM    963  CA  VAL A 145      33.430  -1.522  30.361  1.00 37.08           C  
+ATOM    970  CA  GLN A 146      29.817  -0.374  30.523  1.00 37.65           C  
+ATOM    979  CA  ILE A 147      29.547   3.413  31.045  1.00 30.95           C  
+ATOM    987  CA  THR A 148      26.637   5.791  31.832  1.00 29.95           C  
+ATOM    994  CA  GLY A 149      26.297   9.581  31.843  1.00 32.81           C  
+ATOM    998  CA  PRO A 150      27.785  12.148  31.800  1.00 34.98           C  
+ATOM   1005  CA  VAL A 151      26.376  12.668  35.275  1.00 36.53           C  
+ATOM   1012  CA  GLY A 152      26.196  15.756  37.474  1.00 43.09           C  
+ATOM   1016  CA  LYS A 153      26.048  19.528  37.068  1.00 48.37           C  
+ATOM   1025  CA  GLU A 154      26.921  20.540  40.633  1.00 49.70           C  
+ATOM   1034  CA  MET A 155      30.710  20.266  40.235  1.00 47.30           C  
+ATOM   1042  CA  LEU A 156      30.882  22.020  36.869  1.00 50.36           C  
+ATOM   1050  CA  MET A 157      33.362  24.883  36.404  1.00 55.29           C  
+ATOM   1058  CA  PRO A 158      32.521  28.612  36.605  1.00 54.88           C  
+ATOM   1065  CA  LYS A 159      32.291  30.776  33.464  1.00 54.92           C  
+ATOM   1074  CA  ASP A 160      34.497  33.503  34.939  1.00 57.22           C  
+ATOM   1082  CA  PRO A 161      38.055  32.687  33.759  1.00 58.62           C  
+ATOM   1089  CA  ASN A 162      39.524  35.240  36.163  1.00 60.44           C  
+ATOM   1097  CA  ALA A 163      37.814  33.910  39.279  1.00 55.80           C  
+ATOM   1102  CA  THR A 164      39.596  32.487  42.316  1.00 51.04           C  
+ATOM   1109  CA  ILE A 165      38.966  28.771  42.756  1.00 50.26           C  
+ATOM   1117  CA  ILE A 166      39.774  26.773  45.885  1.00 47.54           C  
+ATOM   1125  CA  MET A 167      39.883  23.014  45.324  1.00 46.38           C  
+ATOM   1133  CA  LEU A 168      39.700  20.963  48.522  1.00 42.18           C  
+ATOM   1141  CA  ALA A 169      40.377  17.316  47.770  1.00 36.41           C  
+ATOM   1146  CA  THR A 170      41.005  14.086  49.622  1.00 32.98           C  
+ATOM   1153  CA  GLY A 171      42.027  10.802  48.014  1.00 31.36           C  
+ATOM   1157  CA  THR A 172      40.386  10.037  44.680  1.00 30.48           C  
+ATOM   1164  CA  GLY A 173      38.640  13.335  45.359  1.00 33.99           C  
+ATOM   1168  CA  ILE A 174      41.418  15.036  43.394  1.00 35.66           C  
+ATOM   1176  CA  ALA A 175      39.758  13.585  40.300  1.00 36.00           C  
+ATOM   1181  CA  PRO A 176      37.445  16.385  39.155  1.00 39.41           C  
+ATOM   1188  CA  PHE A 177      40.109  18.971  39.976  1.00 43.21           C  
+ATOM   1199  CA  ARG A 178      42.726  17.119  37.955  1.00 41.09           C  
+ATOM   1210  CA  SER A 179      40.235  17.536  35.124  1.00 39.92           C  
+ATOM   1216  CA  PHE A 180      39.808  21.204  36.009  1.00 39.23           C  
+ATOM   1227  CA  LEU A 181      43.528  21.949  35.995  1.00 39.50           C  
+ATOM   1235  CA  TRP A 182      44.305  20.081  32.770  1.00 41.47           C  
+ATOM   1249  CA  LYS A 183      42.141  22.654  30.972  1.00 48.08           C  
+ATOM   1258  CA  MET A 184      43.477  25.547  33.062  1.00 52.79           C  
+ATOM   1266  CA  PHE A 185      47.102  25.043  32.014  1.00 57.35           C  
+ATOM   1277  CA  PHE A 186      48.075  21.921  30.051  1.00 55.98           C  
+ATOM   1288  CA  GLU A 187      45.758  23.173  27.297  1.00 54.44           C  
+ATOM   1297  CA  LYS A 188      44.908  26.236  25.196  1.00 51.29           C  
+ATOM   1306  CA  HIS A 189      41.395  27.080  24.003  1.00 51.35           C  
+ATOM   1316  CA  ASP A 190      40.108  29.972  21.873  1.00 54.30           C  
+ATOM   1324  CA  ASP A 191      37.199  30.481  24.249  1.00 53.95           C  
+ATOM   1332  CA  TYR A 192      38.816  29.937  27.634  1.00 50.68           C  
+ATOM   1344  CA  LYS A 193      41.916  31.388  29.230  1.00 51.00           C  
+ATOM   1353  CA  PHE A 194      42.322  30.967  32.956  1.00 52.09           C  
+ATOM   1364  CA  ASN A 195      43.672  34.234  34.312  1.00 56.46           C  
+ATOM   1372  CA  GLY A 196      42.616  34.078  37.969  1.00 57.17           C  
+ATOM   1376  CA  LEU A 197      43.874  31.920  40.843  1.00 57.92           C  
+ATOM   1384  CA  GLY A 198      43.549  28.151  41.086  1.00 56.67           C  
+ATOM   1388  CA  TRP A 199      44.258  26.886  44.592  1.00 51.55           C  
+ATOM   1402  CA  LEU A 200      44.411  23.170  45.379  1.00 49.17           C  
+ATOM   1410  CA  PHE A 201      44.558  21.335  48.709  1.00 48.60           C  
+ATOM   1421  CA  LEU A 202      45.122  17.570  48.598  1.00 45.34           C  
+ATOM   1429  CA  GLY A 203      44.885  15.480  51.742  1.00 48.55           C  
+ATOM   1433  CA  VAL A 204      46.225  11.936  51.755  1.00 50.23           C  
+ATOM   1440  CA  PRO A 205      47.942   9.740  54.365  1.00 51.51           C  
+ATOM   1447  CA  THR A 206      51.284   9.148  52.648  1.00 50.21           C  
+ATOM   1454  CA  SER A 207      53.551  10.483  49.894  1.00 49.38           C  
+ATOM   1460  CA  SER A 208      53.267   7.061  48.259  1.00 43.49           C  
+ATOM   1466  CA  SER A 209      49.588   8.049  48.093  1.00 42.57           C  
+ATOM   1472  CA  LEU A 210      49.990  11.424  46.364  1.00 42.65           C  
+ATOM   1480  CA  LEU A 211      48.121  11.446  43.035  1.00 39.33           C  
+ATOM   1488  CA  TYR A 212      49.516  13.214  39.935  1.00 40.89           C  
+ATOM   1500  CA  LYS A 213      52.128  15.234  41.873  1.00 45.88           C  
+ATOM   1509  CA  GLU A 214      54.518  15.406  38.899  1.00 53.22           C  
+ATOM   1518  CA  GLU A 215      51.680  16.911  36.889  1.00 55.16           C  
+ATOM   1527  CA  PHE A 216      50.757  19.475  39.514  1.00 60.55           C  
+ATOM   1538  CA  GLY A 217      54.488  20.153  39.524  1.00 66.64           C  
+ATOM   1542  CA  LYS A 218      54.575  21.110  35.850  1.00 68.86           C  
+ATOM   1551  CA  MET A 219      51.398  23.159  36.265  1.00 66.97           C  
+ATOM   1559  CA  LYS A 220      53.138  25.090  39.061  1.00 65.97           C  
+ATOM   1568  CA  GLU A 221      55.654  26.250  36.459  1.00 70.02           C  
+ATOM   1577  CA  ARG A 222      53.584  26.507  33.294  1.00 73.48           C  
+ATOM   1588  CA  ALA A 223      52.005  29.449  35.175  1.00 76.21           C  
+ATOM   1593  CA  PRO A 224      53.272  29.877  38.804  1.00 79.25           C  
+ATOM   1600  CA  GLU A 225      51.296  33.124  39.020  1.00 81.84           C  
+ATOM   1609  CA  ASN A 226      47.873  31.528  38.622  1.00 78.84           C  
+ATOM   1617  CA  PHE A 227      48.418  28.176  40.350  1.00 75.28           C  
+ATOM   1628  CA  ARG A 228      49.090  27.305  43.996  1.00 72.05           C  
+ATOM   1639  CA  VAL A 229      49.165  23.724  45.323  1.00 68.82           C  
+ATOM   1646  CA  ASP A 230      49.258  22.581  48.958  1.00 66.54           C  
+ATOM   1654  CA  TYR A 231      49.605  18.943  49.968  1.00 60.31           C  
+ATOM   1666  CA  ALA A 232      48.551  17.560  53.332  1.00 57.39           C  
+ATOM   1671  CA  VAL A 233      50.260  14.228  53.945  1.00 57.14           C  
+ATOM   1678  CA  SER A 234      48.465  13.579  57.244  1.00 60.81           C  
+ATOM   1684  CA  ARG A 235      50.959  11.010  58.514  1.00 60.74           C  
+ATOM   1695  CA  GLU A 236      54.268  12.594  57.481  1.00 59.17           C  
+ATOM   1704  CA  GLN A 237      53.494  16.197  58.450  1.00 59.62           C  
+ATOM   1713  CA  THR A 238      52.590  18.236  61.521  1.00 63.18           C  
+ATOM   1720  CA  ASN A 239      52.019  21.937  62.188  1.00 66.71           C  
+ATOM   1728  CA  ALA A 240      52.096  23.767  65.537  1.00 70.06           C  
+ATOM   1733  CA  ALA A 241      51.302  21.400  68.410  1.00 72.44           C  
+ATOM   1738  CA  GLY A 242      52.383  18.324  66.438  1.00 72.38           C  
+ATOM   1742  CA  GLU A 243      48.826  18.169  65.110  1.00 69.71           C  
+ATOM   1751  CA  ARG A 244      48.674  15.776  62.148  1.00 67.21           C  
+ATOM   1762  CA  MET A 245      48.712  17.796  58.933  1.00 64.20           C  
+ATOM   1770  CA  TYR A 246      45.246  17.082  57.556  1.00 60.65           C  
+ATOM   1782  CA  ILE A 247      43.617  18.437  54.409  1.00 62.98           C  
+ATOM   1790  CA  GLN A 248      42.035  21.001  56.761  1.00 64.64           C  
+ATOM   1799  CA  THR A 249      45.057  21.461  59.009  1.00 63.37           C  
+ATOM   1806  CA  ARG A 250      46.891  22.664  55.903  1.00 62.47           C  
+ATOM   1817  CA  MET A 251      44.123  25.201  55.251  1.00 63.35           C  
+ATOM   1825  CA  ALA A 252      44.571  26.305  58.854  1.00 65.73           C  
+ATOM   1830  CA  GLU A 253      47.973  27.809  58.076  1.00 65.97           C  
+ATOM   1839  CA  TYR A 254      46.267  30.063  55.517  1.00 65.83           C  
+ATOM   1851  CA  LYS A 255      42.991  30.559  57.379  1.00 70.30           C  
+ATOM   1860  CA  GLU A 256      43.578  34.326  57.320  1.00 73.73           C  
+ATOM   1869  CA  GLU A 257      44.189  34.738  53.593  1.00 71.52           C  
+ATOM   1878  CA  LEU A 258      41.459  32.202  52.893  1.00 73.38           C  
+ATOM   1886  CA  TRP A 259      38.790  34.074  54.853  1.00 76.72           C  
+ATOM   1900  CA  GLU A 260      39.721  37.275  53.006  1.00 78.61           C  
+ATOM   1909  CA  LEU A 261      38.580  35.553  49.815  1.00 75.71           C  
+ATOM   1917  CA  LEU A 262      35.391  33.881  51.047  1.00 73.74           C  
+ATOM   1925  CA  LYS A 263      33.562  37.165  50.535  1.00 73.64           C  
+ATOM   1934  CA  LYS A 264      34.299  38.143  46.954  1.00 72.48           C  
+ATOM   1943  CA  ASP A 265      31.954  37.554  43.993  1.00 69.65           C  
+ATOM   1951  CA  ASN A 266      34.660  35.649  42.106  1.00 65.06           C  
+ATOM   1959  CA  THR A 267      35.835  33.117  44.683  1.00 58.24           C  
+ATOM   1966  CA  TYR A 268      34.459  29.646  43.909  1.00 51.04           C  
+ATOM   1978  CA  VAL A 269      35.192  26.827  46.382  1.00 44.95           C  
+ATOM   1985  CA  TYR A 270      35.012  23.150  45.368  1.00 44.96           C  
+ATOM   1997  CA  MET A 271      35.162  20.122  47.656  1.00 41.72           C  
+ATOM   2005  CA  CYS A 272      35.314  16.468  46.632  1.00 37.19           C  
+ATOM   2011  CA  GLY A 273      36.343  13.080  47.951  1.00 37.65           C  
+ATOM   2015  CA  LEU A 274      36.040  10.886  51.020  1.00 39.39           C  
+ATOM   2023  CA  LYS A 275      33.076  12.283  52.955  1.00 44.86           C  
+ATOM   2032  CA  GLY A 276      34.322  13.183  56.400  1.00 49.16           C  
+ATOM   2036  CA  MET A 277      36.932  15.608  55.168  1.00 53.30           C  
+ATOM   2044  CA  GLU A 278      33.917  17.921  55.165  1.00 56.74           C  
+ATOM   2053  CA  LYS A 279      33.531  18.089  58.947  1.00 59.30           C  
+ATOM   2062  CA  GLY A 280      36.982  19.413  59.776  1.00 58.94           C  
+ATOM   2066  CA  ILE A 281      36.705  22.048  57.063  1.00 61.43           C  
+ATOM   2074  CA  ASP A 282      33.453  23.402  58.515  1.00 67.06           C  
+ATOM   2082  CA  ASP A 283      35.050  23.189  61.972  1.00 74.12           C  
+ATOM   2090  CA  ILE A 284      37.991  25.422  61.040  1.00 78.49           C  
+ATOM   2098  CA  MET A 285      35.456  27.566  59.201  1.00 82.25           C  
+ATOM   2106  CA  VAL A 286      32.941  27.959  62.027  1.00 83.44           C  
+ATOM   2113  CA  SER A 287      35.610  29.113  64.469  1.00 83.43           C  
+ATOM   2119  CA  LEU A 288      36.927  31.601  61.887  1.00 85.53           C  
+ATOM   2127  CA  ALA A 289      33.506  33.025  60.970  1.00 86.85           C  
+ATOM   2132  CA  GLU A 290      31.841  32.696  64.387  1.00 89.26           C  
+ATOM   2141  CA  LYS A 291      34.438  35.312  65.347  1.00 88.73           C  
+ATOM   2150  CA  ASP A 292      33.635  37.891  62.652  1.00 88.03           C  
+ATOM   2158  CA  GLY A 293      30.219  37.450  61.081  1.00 87.88           C  
+ATOM   2162  CA  ILE A 294      27.319  35.051  61.511  1.00 84.61           C  
+ATOM   2170  CA  ASP A 295      27.665  31.329  62.188  1.00 82.45           C  
+ATOM   2178  CA  TRP A 296      29.539  29.627  59.355  1.00 80.12           C  
+ATOM   2192  CA  PHE A 297      26.527  27.452  58.512  1.00 78.99           C  
+ATOM   2203  CA  ASP A 298      24.167  30.241  57.486  1.00 76.37           C  
+ATOM   2211  CA  TYR A 299      27.074  31.748  55.561  1.00 74.07           C  
+ATOM   2223  CA  LYS A 300      27.679  28.620  53.473  1.00 74.31           C  
+ATOM   2232  CA  LYS A 301      24.059  29.146  52.464  1.00 75.97           C  
+ATOM   2241  CA  GLN A 302      24.921  32.563  51.018  1.00 75.38           C  
+ATOM   2250  CA  LEU A 303      27.896  31.099  49.155  1.00 72.10           C  
+ATOM   2258  CA  LYS A 304      25.917  28.207  47.690  1.00 72.08           C  
+ATOM   2267  CA  ARG A 305      23.595  31.021  46.594  1.00 74.82           C  
+ATOM   2278  CA  GLY A 306      26.071  32.136  43.958  1.00 71.84           C  
+ATOM   2282  CA  ASP A 307      27.505  28.682  43.220  1.00 67.23           C  
+ATOM   2290  CA  GLN A 308      30.620  29.291  45.346  1.00 60.18           C  
+ATOM   2299  CA  TRP A 309      30.585  26.177  47.537  1.00 52.25           C  
+ATOM   2313  CA  ASN A 310      29.894  22.997  45.597  1.00 45.03           C  
+ATOM   2321  CA  VAL A 311      30.327  19.716  47.403  1.00 39.13           C  
+ATOM   2328  CA  GLU A 312      30.507  16.190  46.110  1.00 35.17           C  
+ATOM   2337  CA  VAL A 313      31.761  13.957  48.861  1.00 30.12           C  
+ATOM   2344  CA  TYR A 314      31.112  10.230  49.021  1.00 28.23           C  
+ATOM   2358  CA  ALA B   1       2.311  24.702  44.475  1.00 74.17           C  
+ATOM   2363  CA  THR B   2       3.590  24.207  48.055  1.00 74.76           C  
+ATOM   2370  CA  TYR B   3       3.069  20.876  49.837  1.00 73.52           C  
+ATOM   2382  CA  ASN B   4       3.748  19.874  53.435  1.00 75.75           C  
+ATOM   2390  CA  VAL B   5       6.618  17.399  53.868  1.00 75.95           C  
+ATOM   2397  CA  LYS B   6       7.769  15.523  56.983  1.00 77.70           C  
+ATOM   2406  CA  LEU B   7      11.351  14.325  57.458  1.00 78.91           C  
+ATOM   2414  CA  ILE B   8      11.807  11.511  59.985  1.00 81.00           C  
+ATOM   2422  CA  THR B   9      15.560  12.046  60.247  1.00 87.49           C  
+ATOM   2429  CA  PRO B  10      17.662   9.793  62.539  1.00 92.94           C  
+ATOM   2436  CA  GLU B  11      18.161  13.147  64.282  1.00 96.61           C  
+ATOM   2445  CA  GLY B  12      14.579  14.154  65.041  1.00 97.52           C  
+ATOM   2449  CA  GLU B  13      11.602  14.823  62.748  1.00 96.90           C  
+ATOM   2458  CA  VAL B  14      11.547  17.892  60.480  1.00 96.63           C  
+ATOM   2465  CA  GLU B  15       8.340  19.701  59.440  1.00 94.86           C  
+ATOM   2474  CA  LEU B  16       9.471  21.479  56.254  1.00 91.55           C  
+ATOM   2482  CA  GLN B  17       7.281  23.141  53.598  1.00 89.75           C  
+ATOM   2491  CA  VAL B  18       8.485  22.069  50.145  1.00 87.92           C  
+ATOM   2498  CA  PRO B  19       6.906  23.558  46.964  1.00 86.35           C  
+ATOM   2505  CA  ASP B  20       5.990  21.744  43.717  1.00 86.29           C  
+ATOM   2513  CA  ASP B  21       8.578  22.751  41.083  1.00 83.78           C  
+ATOM   2521  CA  VAL B  22      11.385  22.401  43.639  1.00 80.98           C  
+ATOM   2528  CA  TYR B  23      13.439  19.280  44.481  1.00 77.04           C  
+ATOM   2540  CA  ILE B  24      13.212  18.196  48.120  1.00 76.45           C  
+ATOM   2548  CA  LEU B  25      16.959  18.133  48.851  1.00 75.15           C  
+ATOM   2556  CA  ASP B  26      17.154  21.745  47.689  1.00 75.80           C  
+ATOM   2564  CA  GLN B  27      14.616  22.906  50.280  1.00 76.31           C  
+ATOM   2573  CA  ALA B  28      16.562  20.957  52.914  1.00 78.86           C  
+ATOM   2578  CA  GLU B  29      19.698  23.011  52.198  1.00 81.51           C  
+ATOM   2587  CA  GLU B  30      17.491  26.106  52.510  1.00 83.25           C  
+ATOM   2596  CA  ASP B  31      15.857  25.933  55.935  1.00 81.92           C  
+ATOM   2604  CA  GLY B  32      19.280  24.859  57.151  1.00 79.08           C  
+ATOM   2608  CA  ILE B  33      18.621  21.130  57.157  1.00 76.93           C  
+ATOM   2616  CA  ASP B  34      21.528  18.731  56.618  1.00 73.53           C  
+ATOM   2624  CA  LEU B  35      20.738  15.738  54.421  1.00 67.74           C  
+ATOM   2632  CA  PRO B  36      23.138  13.391  52.547  1.00 65.90           C  
+ATOM   2639  CA  TYR B  37      23.916  14.226  48.912  1.00 64.85           C  
+ATOM   2651  CA  SER B  38      26.659  13.373  46.412  1.00 62.58           C  
+ATOM   2657  CA  CYS B  39      26.193  13.603  42.652  1.00 60.99           C  
+ATOM   2663  CA  ARG B  40      22.908  15.441  43.251  1.00 58.35           C  
+ATOM   2674  CA  ALA B  41      21.699  14.108  39.886  1.00 56.38           C  
+ATOM   2679  CA  GLY B  42      19.886  10.955  40.991  1.00 56.66           C  
+ATOM   2683  CA  SER B  43      22.465   8.336  40.010  1.00 58.55           C  
+ATOM   2689  CA  CYS B  44      23.548   7.052  43.447  1.00 56.27           C  
+ATOM   2695  CA  SER B  45      22.057   5.987  46.791  1.00 58.20           C  
+ATOM   2701  CA  SER B  46      23.574   8.773  48.890  1.00 59.13           C  
+ATOM   2707  CA  CYS B  47      20.220  10.475  49.517  1.00 65.64           C  
+ATOM   2713  CA  ALA B  48      17.911   7.436  49.610  1.00 69.71           C  
+ATOM   2718  CA  GLY B  49      14.733   7.635  51.681  1.00 73.09           C  
+ATOM   2722  CA  LYS B  50      11.712   5.340  52.183  1.00 73.77           C  
+ATOM   2731  CA  VAL B  51       8.551   7.412  51.568  1.00 76.51           C  
+ATOM   2738  CA  VAL B  52       5.237   7.081  53.429  1.00 78.85           C  
+ATOM   2745  CA  SER B  53       2.180   9.376  53.647  1.00 79.57           C  
+ATOM   2751  CA  GLY B  54       2.118  10.991  50.218  1.00 76.32           C  
+ATOM   2755  CA  SER B  55       3.577  10.944  46.726  1.00 76.31           C  
+ATOM   2761  CA  VAL B  56       6.436  12.592  44.828  1.00 77.50           C  
+ATOM   2768  CA  ASP B  57       7.691  12.960  41.243  1.00 76.83           C  
+ATOM   2776  CA  GLN B  58      11.150  11.483  40.555  1.00 76.66           C  
+ATOM   2785  CA  SER B  59      10.976  10.827  36.792  1.00 80.19           C  
+ATOM   2791  CA  ASP B  60      14.688  11.644  36.510  1.00 83.51           C  
+ATOM   2799  CA  GLN B  61      15.175   8.137  37.916  1.00 85.74           C  
+ATOM   2808  CA  SER B  62      18.644   7.080  36.699  1.00 85.85           C  
+ATOM   2814  CA  TYR B  63      19.324   5.049  39.852  1.00 84.49           C  
+ATOM   2826  CA  LEU B  64      15.683   4.296  40.629  1.00 89.06           C  
+ATOM   2834  CA  ASP B  65      15.356   0.604  39.742  1.00 92.21           C  
+ATOM   2842  CA  ASP B  66      12.421  -1.791  39.331  1.00 92.35           C  
+ATOM   2850  CA  GLY B  67      10.747  -2.542  42.659  1.00 89.07           C  
+ATOM   2854  CA  GLN B  68      12.336   0.632  44.010  1.00 88.41           C  
+ATOM   2863  CA  ILE B  69       9.483   2.828  42.742  1.00 86.11           C  
+ATOM   2871  CA  ALA B  70       7.060   0.441  44.446  1.00 81.10           C  
+ATOM   2876  CA  ASP B  71       8.985  -0.310  47.648  1.00 76.82           C  
+ATOM   2884  CA  GLY B  72       8.653   3.423  48.186  1.00 73.00           C  
+ATOM   2888  CA  TRP B  73      12.342   4.386  48.095  1.00 67.93           C  
+ATOM   2902  CA  VAL B  74      13.052   8.007  47.136  1.00 63.84           C  
+ATOM   2909  CA  LEU B  75      16.093   9.940  45.892  1.00 58.37           C  
+ATOM   2917  CA  THR B  76      15.524  13.198  47.826  1.00 55.82           C  
+ATOM   2924  CA  CYS B  77      17.941  15.109  45.556  1.00 58.23           C  
+ATOM   2930  CA  HIS B  78      15.777  14.389  42.513  1.00 64.55           C  
+ATOM   2940  CA  ALA B  79      12.108  14.429  43.512  1.00 68.40           C  
+ATOM   2945  CA  TYR B  80       9.442  17.152  43.581  1.00 69.69           C  
+ATOM   2957  CA  PRO B  81       6.414  16.584  45.842  1.00 71.39           C  
+ATOM   2964  CA  THR B  82       3.015  16.014  44.179  1.00 73.67           C  
+ATOM   2971  CA  SER B  83       1.278  15.771  47.557  1.00 76.90           C  
+ATOM   2977  CA  ASP B  84       1.940  16.119  51.289  1.00 75.20           C  
+ATOM   2985  CA  VAL B  85       4.840  13.765  52.050  1.00 71.37           C  
+ATOM   2992  CA  VAL B  86       6.363  11.824  54.956  1.00 70.12           C  
+ATOM   2999  CA  ILE B  87       9.770  10.300  54.188  1.00 74.18           C  
+ATOM   3007  CA  GLU B  88      12.211   8.403  56.410  1.00 78.53           C  
+ATOM   3012  CA  THR B  89      15.541   9.964  55.407  1.00 79.79           C  
+ATOM   3019  CA  HIS B  90      19.062   8.538  55.881  1.00 79.40           C  
+ATOM   3029  CA  LYS B  91      17.584   5.099  55.099  1.00 84.52           C  
+ATOM   3038  CA  GLU B  92      20.016   2.596  53.549  1.00 91.64           C  
+ATOM   3047  CA  GLU B  93      20.192  -0.858  51.981  1.00 98.97           C  
+ATOM   3056  CA  GLU B  94      23.321  -2.924  51.298  1.00106.32           C  
+ATOM   3065  CA  LEU B  95      22.104  -6.552  51.453  1.00111.32           C  
+ATOM   3073  CA  THR B  96      18.778  -8.417  51.866  1.00116.01           C  
+ATOM   3080  CA  GLY B  97      18.877 -11.302  49.394  1.00116.63           C  
+ATOM   3084  CA  ALA B  98      22.056  -9.833  47.910  1.00116.02           C  
+ATOM   3091  CA  GLU C  19      26.080  -2.480  15.294  1.00 73.96           C  
+ATOM   3100  CA  SER C  20      23.405   0.198  14.956  1.00 67.27           C  
+ATOM   3106  CA  LYS C  21      22.937   3.927  15.380  1.00 59.27           C  
+ATOM   3115  CA  LYS C  22      19.198   3.481  15.874  1.00 58.42           C  
+ATOM   3124  CA  GLN C  23      17.251   3.141  19.137  1.00 59.89           C  
+ATOM   3133  CA  GLU C  24      17.931  -0.276  20.610  1.00 62.66           C  
+ATOM   3142  CA  GLU C  25      16.850  -0.453  24.226  1.00 64.27           C  
+ATOM   3151  CA  GLY C  26      13.211  -0.817  25.116  1.00 61.78           C  
+ATOM   3155  CA  VAL C  27      12.703  -2.073  21.582  1.00 58.37           C  
+ATOM   3162  CA  VAL C  28      10.779  -5.347  21.485  1.00 54.17           C  
+ATOM   3169  CA  THR C  29       9.481  -7.339  18.549  1.00 52.79           C  
+ATOM   3176  CA  ASN C  30       6.670  -9.775  17.786  1.00 51.30           C  
+ATOM   3184  CA  LEU C  31       4.863  -9.997  21.112  1.00 51.05           C  
+ATOM   3192  CA  TYR C  32       1.766 -11.297  19.327  1.00 50.51           C  
+ATOM   3204  CA  LYS C  33       1.373 -13.532  16.266  1.00 49.49           C  
+ATOM   3213  CA  PRO C  34      -1.609 -14.150  13.925  1.00 50.98           C  
+ATOM   3220  CA  LYS C  35      -2.450 -17.248  16.011  1.00 55.46           C  
+ATOM   3229  CA  GLU C  36      -2.977 -15.400  19.288  1.00 53.79           C  
+ATOM   3238  CA  PRO C  37      -3.251 -11.638  18.607  1.00 49.32           C  
+ATOM   3245  CA  TYR C  38      -3.674  -9.050  21.318  1.00 46.76           C  
+ATOM   3257  CA  VAL C  39      -7.276  -7.947  21.418  1.00 43.68           C  
+ATOM   3264  CA  GLY C  40      -7.415  -4.194  21.922  1.00 41.62           C  
+ATOM   3268  CA  ARG C  41     -10.273  -1.719  21.954  1.00 40.07           C  
+ATOM   3279  CA  CYS C  42     -11.026   1.064  19.477  1.00 36.37           C  
+ATOM   3285  CA  LEU C  43     -11.330   4.206  21.583  1.00 31.09           C  
+ATOM   3293  CA  LEU C  44     -11.337   6.671  18.673  1.00 28.46           C  
+ATOM   3301  CA  ASN C  45     -11.792   6.653  14.923  1.00 26.74           C  
+ATOM   3309  CA  THR C  46     -11.954   9.920  13.013  1.00 25.29           C  
+ATOM   3316  CA  LYS C  47     -11.667  10.775   9.352  1.00 21.50           C  
+ATOM   3325  CA  ILE C  48      -8.895  13.355   9.121  1.00 19.33           C  
+ATOM   3333  CA  THR C  49      -9.125  14.281   5.442  1.00 20.38           C  
+ATOM   3340  CA  GLY C  50     -11.630  16.676   3.855  1.00 20.12           C  
+ATOM   3344  CA  ASP C  51     -14.895  15.345   2.412  1.00 21.75           C  
+ATOM   3352  CA  ASP C  52     -13.889  16.693  -0.999  1.00 21.19           C  
+ATOM   3360  CA  ALA C  53     -10.651  14.683  -0.749  1.00 21.06           C  
+ATOM   3365  CA  PRO C  54     -10.036  11.974  -3.413  1.00 21.39           C  
+ATOM   3372  CA  GLY C  55      -9.982   9.067  -0.977  1.00 24.42           C  
+ATOM   3376  CA  GLU C  56     -10.374   9.298   2.857  1.00 22.08           C  
+ATOM   3385  CA  THR C  57      -7.723   8.611   5.517  1.00 20.31           C  
+ATOM   3392  CA  TRP C  58      -8.541   7.849   9.162  1.00 19.33           C  
+ATOM   3406  CA  HIS C  59      -6.758   8.520  12.438  1.00 22.68           C  
+ATOM   3416  CA  MET C  60      -7.645   5.951  15.108  1.00 27.16           C  
+ATOM   3424  CA  VAL C  61      -6.672   5.224  18.723  1.00 29.32           C  
+ATOM   3431  CA  PHE C  62      -6.669   1.704  20.220  1.00 34.23           C  
+ATOM   3442  CA  SER C  63      -6.102   0.643  23.847  1.00 37.05           C  
+ATOM   3448  CA  THR C  64      -3.096  -1.517  24.798  1.00 41.86           C  
+ATOM   3455  CA  GLU C  65      -3.169  -1.652  28.621  1.00 48.33           C  
+ATOM   3464  CA  GLY C  66       0.537  -0.885  28.318  1.00 52.45           C  
+ATOM   3468  CA  LYS C  67       0.955  -4.385  26.891  1.00 54.14           C  
+ATOM   3477  CA  ILE C  68       2.429  -3.211  23.570  1.00 51.52           C  
+ATOM   3485  CA  PRO C  69       5.602  -1.279  24.487  1.00 49.85           C  
+ATOM   3492  CA  TYR C  70       6.523  -0.180  20.967  1.00 44.48           C  
+ATOM   3504  CA  ARG C  71       9.185   2.353  19.993  1.00 40.96           C  
+ATOM   3515  CA  GLU C  72       8.727   5.317  17.688  1.00 33.49           C  
+ATOM   3524  CA  GLY C  73       8.913   3.876  14.164  1.00 30.16           C  
+ATOM   3528  CA  GLN C  74       7.423   0.399  14.427  1.00 31.26           C  
+ATOM   3537  CA  SER C  75       4.187  -0.913  12.966  1.00 33.65           C  
+ATOM   3543  CA  ILE C  76       1.454  -3.212  14.278  1.00 33.75           C  
+ATOM   3551  CA  GLY C  77      -0.295  -5.923  12.356  1.00 34.32           C  
+ATOM   3555  CA  VAL C  78      -4.060  -6.111  12.164  1.00 36.67           C  
+ATOM   3562  CA  ILE C  79      -6.137  -9.230  11.507  1.00 41.91           C  
+ATOM   3570  CA  ALA C  80      -9.427  -8.086  10.024  1.00 44.06           C  
+ATOM   3575  CA  ASP C  81     -12.530  -9.927  11.224  1.00 47.03           C  
+ATOM   3583  CA  GLY C  82     -13.972 -12.487   8.829  1.00 53.52           C  
+ATOM   3587  CA  VAL C  83     -12.521 -14.951   6.324  1.00 62.57           C  
+ATOM   3594  CA  ASP C  84     -11.856 -14.200   2.630  1.00 71.97           C  
+ATOM   3602  CA  LYS C  85     -12.935 -17.403   0.861  1.00 76.86           C  
+ATOM   3611  CA  ASN C  86     -13.690 -18.960   4.253  1.00 76.52           C  
+ATOM   3619  CA  GLY C  87     -10.006 -19.837   4.066  1.00 76.22           C  
+ATOM   3623  CA  LYS C  88      -8.802 -19.138   7.616  1.00 71.60           C  
+ATOM   3632  CA  PRO C  89      -8.651 -15.577   8.944  1.00 64.14           C  
+ATOM   3639  CA  HIS C  90      -7.547 -12.649   6.805  1.00 52.35           C  
+ATOM   3649  CA  LYS C  91      -3.753 -12.529   6.474  1.00 46.81           C  
+ATOM   3658  CA  VAL C  92      -2.180  -9.868   8.686  1.00 43.48           C  
+ATOM   3665  CA  ARG C  93      -1.491  -6.414   7.232  1.00 36.99           C  
+ATOM   3676  CA  LEU C  94       0.983  -3.882   8.601  1.00 32.95           C  
+ATOM   3684  CA  TYR C  95       0.340  -0.239   9.510  1.00 24.84           C  
+ATOM   3696  CA  SER C  96       3.003   2.101  10.803  1.00 23.32           C  
+ATOM   3702  CA  ILE C  97       2.244   3.502  14.236  1.00 24.12           C  
+ATOM   3710  CA  ALA C  98       1.243   7.179  13.932  1.00 22.32           C  
+ATOM   3715  CA  SER C  99       1.572   7.636  17.676  1.00 25.69           C  
+ATOM   3721  CA  SER C 100       4.752   7.924  19.726  1.00 28.83           C  
+ATOM   3727  CA  ALA C 101       5.741   5.521  22.508  1.00 35.61           C  
+ATOM   3732  CA  ILE C 102       3.906   7.635  25.079  1.00 38.39           C  
+ATOM   3740  CA  GLY C 103       0.899   7.826  22.742  1.00 31.93           C  
+ATOM   3744  CA  ASP C 104      -1.803  10.384  21.986  1.00 28.77           C  
+ATOM   3752  CA  PHE C 105      -3.050  10.293  25.607  1.00 37.05           C  
+ATOM   3763  CA  GLY C 106       0.503  10.389  26.967  1.00 39.36           C  
+ATOM   3767  CA  ASP C 107      -0.221   7.437  29.266  1.00 41.44           C  
+ATOM   3775  CA  SER C 108       1.566   4.766  27.217  1.00 42.18           C  
+ATOM   3781  CA  LYS C 109      -1.747   2.877  27.156  1.00 42.45           C  
+ATOM   3790  CA  THR C 110      -2.698   3.586  23.515  1.00 38.10           C  
+ATOM   3797  CA  VAL C 111      -1.603   2.971  19.906  1.00 32.79           C  
+ATOM   3804  CA  SER C 112      -2.671   5.020  16.872  1.00 29.60           C  
+ATOM   3810  CA  LEU C 113      -2.713   4.324  13.126  1.00 25.68           C  
+ATOM   3818  CA  CYS C 114      -3.142   6.498   9.999  1.00 24.23           C  
+ATOM   3824  CA  VAL C 115      -5.345   4.496   7.641  1.00 22.80           C  
+ATOM   3831  CA  LYS C 116      -6.221   5.196   4.015  1.00 22.11           C  
+ATOM   3840  CA  ARG C 117      -9.458   3.521   2.955  1.00 25.68           C  
+ATOM   3851  CA  LEU C 118      -8.447   1.440  -0.100  1.00 28.80           C  
+ATOM   3859  CA  ILE C 119     -11.140   1.661  -2.792  1.00 31.75           C  
+ATOM   3867  CA  TYR C 120     -10.086   0.716  -6.312  1.00 32.93           C  
+ATOM   3879  CA  THR C 121     -11.388  -0.733  -9.598  1.00 36.84           C  
+ATOM   3886  CA  ASN C 122     -10.258  -4.257 -10.546  1.00 36.90           C  
+ATOM   3894  CA  ASP C 123      -9.574  -5.562 -14.056  1.00 45.45           C  
+ATOM   3902  CA  ALA C 124     -13.196  -6.758 -14.269  1.00 44.66           C  
+ATOM   3907  CA  GLY C 125     -14.207  -3.102 -14.023  1.00 45.49           C  
+ATOM   3911  CA  GLU C 126     -16.059  -3.511 -10.722  1.00 45.54           C  
+ATOM   3920  CA  ILE C 127     -15.507  -1.321  -7.638  1.00 39.70           C  
+ATOM   3928  CA  VAL C 128     -13.846  -3.171  -4.762  1.00 38.09           C  
+ATOM   3935  CA  LYS C 129     -12.759  -2.512  -1.198  1.00 33.77           C  
+ATOM   3944  CA  GLY C 130      -9.566  -3.363   0.599  1.00 31.98           C  
+ATOM   3948  CA  VAL C 131     -10.443  -5.797   3.385  1.00 33.16           C  
+ATOM   3955  CA  CYS C 132      -8.241  -4.645   6.257  1.00 29.97           C  
+ATOM   3961  CA  SER C 133      -8.238  -0.898   5.607  1.00 30.67           C  
+ATOM   3967  CA  ASN C 134     -12.022  -0.902   5.268  1.00 30.35           C  
+ATOM   3975  CA  PHE C 135     -12.375  -2.946   8.424  1.00 29.86           C  
+ATOM   3986  CA  LEU C 136     -10.223  -0.334  10.195  1.00 29.42           C  
+ATOM   3994  CA  CYS C 137     -11.779   2.834   8.813  1.00 32.27           C  
+ATOM   4000  CA  ASP C 138     -15.116   1.280   9.724  1.00 34.29           C  
+ATOM   4008  CA  LEU C 139     -14.287   0.699  13.399  1.00 37.51           C  
+ATOM   4016  CA  GLN C 140     -16.635   2.170  16.028  1.00 43.76           C  
+ATOM   4025  CA  PRO C 141     -15.630   3.032  19.581  1.00 42.77           C  
+ATOM   4032  CA  GLY C 142     -16.082  -0.210  21.478  1.00 42.83           C  
+ATOM   4036  CA  ASP C 143     -15.117  -2.625  18.696  1.00 40.91           C  
+ATOM   4044  CA  ASN C 144     -12.182  -4.947  19.288  1.00 45.66           C  
+ATOM   4052  CA  VAL C 145      -9.056  -5.146  17.145  1.00 46.95           C  
+ATOM   4059  CA  GLN C 146      -6.707  -8.107  16.606  1.00 48.69           C  
+ATOM   4068  CA  ILE C 147      -3.249  -6.538  17.123  1.00 46.84           C  
+ATOM   4076  CA  THR C 148      -0.010  -8.392  16.264  1.00 46.26           C  
+ATOM   4083  CA  GLY C 149       3.543  -7.117  16.634  1.00 45.60           C  
+ATOM   4087  CA  PRO C 150       5.248  -4.818  17.394  1.00 44.97           C  
+ATOM   4094  CA  VAL C 151       7.423  -5.293  14.321  1.00 44.50           C  
+ATOM   4101  CA  GLY C 152      10.289  -3.716  12.438  1.00 45.33           C  
+ATOM   4105  CA  LYS C 153      13.599  -2.161  13.435  1.00 48.64           C  
+ATOM   4114  CA  GLU C 154      14.166  -0.437  10.074  1.00 48.20           C  
+ATOM   4123  CA  MET C 155      12.437   2.888  10.737  1.00 41.77           C  
+ATOM   4131  CA  LEU C 156      13.839   3.081  14.267  1.00 38.27           C  
+ATOM   4139  CA  MET C 157      15.076   6.540  15.308  1.00 34.29           C  
+ATOM   4147  CA  PRO C 158      18.782   7.419  15.339  1.00 34.05           C  
+ATOM   4154  CA  LYS C 159      20.262   7.521  18.845  1.00 35.82           C  
+ATOM   4163  CA  ASP C 160      22.076  10.792  18.273  1.00 35.95           C  
+ATOM   4171  CA  PRO C 161      19.683  13.401  19.809  1.00 35.63           C  
+ATOM   4178  CA  ASN C 162      21.563  15.948  17.758  1.00 33.92           C  
+ATOM   4186  CA  ALA C 163      21.028  14.172  14.487  1.00 30.82           C  
+ATOM   4191  CA  THR C 164      19.693  15.722  11.305  1.00 25.18           C  
+ATOM   4198  CA  ILE C 165      16.617  13.601  10.636  1.00 19.91           C  
+ATOM   4206  CA  ILE C 166      15.351  13.978   7.060  1.00 13.76           C  
+ATOM   4214  CA  MET C 167      11.843  12.550   6.703  1.00 14.98           C  
+ATOM   4222  CA  LEU C 168      10.385  11.831   3.251  1.00 16.64           C  
+ATOM   4230  CA  ALA C 169       6.747  10.808   3.007  1.00 15.85           C  
+ATOM   4235  CA  THR C 170       3.765  10.346   0.737  1.00 14.23           C  
+ATOM   4242  CA  GLY C 171       0.255   9.724   2.035  1.00 13.78           C  
+ATOM   4246  CA  THR C 172      -0.103   7.560   5.139  1.00 17.62           C  
+ATOM   4253  CA  GLY C 173       3.646   7.343   4.821  1.00 17.20           C  
+ATOM   4257  CA  ILE C 174       3.469  10.213   7.270  1.00 15.91           C  
+ATOM   4265  CA  ALA C 175       2.586   7.783  10.110  1.00 15.63           C  
+ATOM   4270  CA  PRO C 176       6.023   6.933  11.582  1.00 17.04           C  
+ATOM   4277  CA  PHE C 177       7.215  10.514  11.327  1.00 18.21           C  
+ATOM   4288  CA  ARG C 178       4.268  11.745  13.359  1.00 22.35           C  
+ATOM   4299  CA  SER C 179       5.563   9.289  15.983  1.00 25.22           C  
+ATOM   4305  CA  PHE C 180       9.139  10.593  15.614  1.00 25.98           C  
+ATOM   4316  CA  LEU C 181       7.925  14.180  15.767  1.00 29.12           C  
+ATOM   4324  CA  TRP C 182       5.625  13.641  18.714  1.00 31.35           C  
+ATOM   4338  CA  LYS C 183       8.488  12.385  20.871  1.00 30.92           C  
+ATOM   4347  CA  MET C 184      10.841  15.050  19.503  1.00 24.85           C  
+ATOM   4355  CA  PHE C 185       8.741  18.202  20.114  1.00 22.97           C  
+ATOM   4366  CA  PHE C 186       5.604  17.337  22.076  1.00 27.77           C  
+ATOM   4377  CA  GLU C 187       7.117  15.432  25.009  1.00 37.71           C  
+ATOM   4386  CA  LYS C 188       9.542  15.977  27.878  1.00 53.59           C  
+ATOM   4395  CA  HIS C 189      12.355  13.416  28.180  1.00 63.67           C  
+ATOM   4405  CA  ASP C 190      15.318  13.181  30.569  1.00 66.93           C  
+ATOM   4413  CA  ASP C 191      17.480  11.106  28.238  1.00 59.79           C  
+ATOM   4421  CA  TYR C 192      16.190  12.725  25.047  1.00 51.96           C  
+ATOM   4433  CA  LYS C 193      16.700  16.406  24.324  1.00 47.01           C  
+ATOM   4442  CA  PHE C 194      16.580  16.471  20.530  1.00 39.85           C  
+ATOM   4453  CA  ASN C 195      18.572  19.494  19.409  1.00 37.52           C  
+ATOM   4461  CA  GLY C 196      19.361  18.548  15.845  1.00 32.08           C  
+ATOM   4465  CA  LEU C 197      17.310  19.266  12.766  1.00 28.26           C  
+ATOM   4473  CA  GLY C 198      14.051  17.526  11.928  1.00 25.05           C  
+ATOM   4477  CA  TRP C 199      13.211  18.137   8.269  1.00 19.81           C  
+ATOM   4491  CA  LEU C 200       9.908  16.742   7.059  1.00 13.86           C  
+ATOM   4499  CA  PHE C 201       8.855  16.521   3.429  1.00 14.83           C  
+ATOM   4510  CA  LEU C 202       5.288  15.361   2.717  1.00 16.12           C  
+ATOM   4518  CA  GLY C 203       3.701  14.731  -0.681  1.00 13.79           C  
+ATOM   4522  CA  VAL C 204      -0.051  14.414  -1.182  1.00 11.75           C  
+ATOM   4529  CA  PRO C 205      -2.113  15.264  -4.308  1.00 14.66           C  
+ATOM   4536  CA  THR C 206      -4.553  17.737  -2.778  1.00 16.37           C  
+ATOM   4543  CA  SER C 207      -4.756  20.169   0.120  1.00 18.01           C  
+ATOM   4549  CA  SER C 208      -7.780  18.225   1.280  1.00 17.59           C  
+ATOM   4555  CA  SER C 209      -5.452  15.198   1.550  1.00 16.19           C  
+ATOM   4561  CA  LEU C 210      -2.972  16.940   3.860  1.00 14.22           C  
+ATOM   4569  CA  LEU C 211      -2.255  14.980   7.059  1.00 14.43           C  
+ATOM   4577  CA  TYR C 212      -1.624  16.449  10.549  1.00 18.94           C  
+ATOM   4589  CA  LYS C 213      -0.818  19.896   9.150  1.00 22.61           C  
+ATOM   4598  CA  GLU C 214      -2.039  21.572  12.352  1.00 25.73           C  
+ATOM   4607  CA  GLU C 215       0.152  19.413  14.514  1.00 19.23           C  
+ATOM   4616  CA  PHE C 216       3.216  20.178  12.439  1.00 17.80           C  
+ATOM   4627  CA  GLY C 217       2.478  23.890  12.512  1.00 19.90           C  
+ATOM   4631  CA  LYS C 218       2.578  24.001  16.294  1.00 25.54           C  
+ATOM   4640  CA  MET C 219       5.810  22.021  16.188  1.00 26.79           C  
+ATOM   4648  CA  LYS C 220       7.224  24.606  13.819  1.00 31.85           C  
+ATOM   4657  CA  GLU C 221       6.071  27.341  16.219  1.00 38.62           C  
+ATOM   4666  CA  ARG C 222       7.760  25.760  19.233  1.00 39.10           C  
+ATOM   4677  CA  ALA C 223      11.124  24.971  17.668  1.00 35.43           C  
+ATOM   4682  CA  PRO C 224      11.696  27.100  14.528  1.00 32.99           C  
+ATOM   4689  CA  GLU C 225      15.425  26.331  14.360  1.00 33.87           C  
+ATOM   4698  CA  ASN C 226      15.038  22.591  14.986  1.00 30.46           C  
+ATOM   4706  CA  PHE C 227      12.088  21.755  12.732  1.00 24.98           C  
+ATOM   4717  CA  ARG C 228      11.351  22.384   9.075  1.00 19.87           C  
+ATOM   4728  CA  VAL C 229       8.435  21.010   7.118  1.00 14.21           C  
+ATOM   4735  CA  ASP C 230       7.739  21.452   3.398  1.00 12.26           C  
+ATOM   4743  CA  TYR C 231       4.627  20.147   1.722  1.00 14.42           C  
+ATOM   4755  CA  ALA C 232       4.334  19.003  -1.872  1.00  9.99           C  
+ATOM   4760  CA  VAL C 233       0.778  19.232  -3.168  1.00 10.49           C  
+ATOM   4767  CA  SER C 234       1.043  17.769  -6.694  1.00 19.00           C  
+ATOM   4773  CA  ARG C 235      -2.240  19.042  -8.206  1.00 23.13           C  
+ATOM   4784  CA  GLU C 236      -2.069  22.459  -6.578  1.00 17.58           C  
+ATOM   4793  CA  GLN C 237       1.546  23.511  -6.623  1.00 15.89           C  
+ATOM   4802  CA  THR C 238       4.202  24.018  -9.275  1.00 17.86           C  
+ATOM   4809  CA  ASN C 239       7.922  24.800  -9.182  1.00 15.15           C  
+ATOM   4817  CA  ALA C 240       9.558  27.791 -10.892  1.00 21.51           C  
+ATOM   4822  CA  ALA C 241       9.475  25.887 -14.174  1.00 24.05           C  
+ATOM   4827  CA  GLY C 242       5.741  25.110 -13.938  1.00 26.25           C  
+ATOM   4831  CA  GLU C 243       5.999  21.359 -13.153  1.00 25.92           C  
+ATOM   4840  CA  ARG C 244       3.679  19.536 -10.704  1.00 24.04           C  
+ATOM   4851  CA  MET C 245       5.076  19.643  -7.174  1.00 18.58           C  
+ATOM   4859  CA  TYR C 246       5.784  16.047  -6.100  1.00 14.16           C  
+ATOM   4871  CA  ILE C 247       7.910  15.343  -3.034  1.00 16.78           C  
+ATOM   4879  CA  GLN C 248      11.089  15.070  -5.120  1.00 18.72           C  
+ATOM   4888  CA  THR C 249      10.168  18.255  -6.921  1.00 20.93           C  
+ATOM   4895  CA  ARG C 250       9.962  20.031  -3.567  1.00 19.25           C  
+ATOM   4906  CA  MET C 251      13.275  18.471  -2.561  1.00 19.40           C  
+ATOM   4914  CA  ALA C 252      14.910  19.812  -5.760  1.00 20.48           C  
+ATOM   4919  CA  GLU C 253      14.456  23.418  -4.569  1.00 18.19           C  
+ATOM   4928  CA  TYR C 254      16.804  22.515  -1.673  1.00 17.80           C  
+ATOM   4940  CA  LYS C 255      19.038  20.415  -3.902  1.00 20.66           C  
+ATOM   4949  CA  GLU C 256      22.452  21.603  -2.682  1.00 16.05           C  
+ATOM   4958  CA  GLU C 257      21.544  21.914   0.993  1.00 15.89           C  
+ATOM   4967  CA  LEU C 258      20.377  18.297   0.919  1.00 20.74           C  
+ATOM   4975  CA  TRP C 259      23.388  16.939  -0.965  1.00 23.45           C  
+ATOM   4989  CA  GLU C 260      25.645  18.669   1.563  1.00 24.08           C  
+ATOM   4998  CA  LEU C 261      23.573  17.378   4.477  1.00 24.74           C  
+ATOM   5006  CA  LEU C 262      24.020  13.928   2.938  1.00 26.14           C  
+ATOM   5014  CA  LYS C 263      27.792  14.091   3.402  1.00 25.40           C  
+ATOM   5023  CA  LYS C 264      27.457  14.521   7.176  1.00 31.47           C  
+ATOM   5032  CA  ASP C 265      27.877  11.474   9.425  1.00 35.31           C  
+ATOM   5040  CA  ASN C 266      24.934  12.482  11.620  1.00 29.63           C  
+ATOM   5048  CA  THR C 267      22.321  12.795   8.832  1.00 28.00           C  
+ATOM   5055  CA  TYR C 268      19.556  10.160   8.808  1.00 27.00           C  
+ATOM   5067  CA  VAL C 269      17.143   9.903   5.884  1.00 24.65           C  
+ATOM   5074  CA  TYR C 270      13.890   8.016   6.276  1.00 23.37           C  
+ATOM   5086  CA  MET C 271      11.373   7.327   3.518  1.00 18.93           C  
+ATOM   5094  CA  CYS C 272       7.834   6.074   4.043  1.00 18.24           C  
+ATOM   5100  CA  GLY C 273       4.784   5.874   1.826  1.00 22.39           C  
+ATOM   5104  CA  LEU C 274       3.837   4.483  -1.568  1.00 26.95           C  
+ATOM   5112  CA  LYS C 275       6.305   2.384  -3.532  1.00 32.36           C  
+ATOM   5121  CA  GLY C 276       7.741   4.199  -6.514  1.00 37.46           C  
+ATOM   5125  CA  MET C 277       7.714   7.455  -4.608  1.00 28.76           C  
+ATOM   5133  CA  GLU C 278      11.430   6.639  -4.425  1.00 32.22           C  
+ATOM   5142  CA  LYS C 279      12.017   6.321  -8.153  1.00 29.94           C  
+ATOM   5151  CA  GLY C 280      11.317  10.057  -8.293  1.00 24.18           C  
+ATOM   5155  CA  ILE C 281      13.766  10.673  -5.460  1.00 23.68           C  
+ATOM   5163  CA  ASP C 282      16.431   8.365  -6.934  1.00 26.58           C  
+ATOM   5171  CA  ASP C 283      16.211  10.530 -10.054  1.00 28.70           C  
+ATOM   5179  CA  ILE C 284      17.089  13.937  -8.538  1.00 27.28           C  
+ATOM   5187  CA  MET C 285      19.706  12.222  -6.388  1.00 27.45           C  
+ATOM   5195  CA  VAL C 286      21.377  10.712  -9.470  1.00 30.74           C  
+ATOM   5202  CA  SER C 287      21.619  14.159 -11.061  1.00 32.14           C  
+ATOM   5208  CA  LEU C 288      23.240  15.463  -7.873  1.00 34.20           C  
+ATOM   5216  CA  ALA C 289      25.801  12.653  -7.874  1.00 40.16           C  
+ATOM   5221  CA  GLU C 290      26.837  12.825 -11.536  1.00 41.84           C  
+ATOM   5230  CA  LYS C 291      27.855  16.387 -10.793  1.00 43.17           C  
+ATOM   5239  CA  ASP C 292      30.299  15.115  -8.139  1.00 41.84           C  
+ATOM   5247  CA  GLY C 293      31.237  12.232 -10.420  1.00 46.12           C  
+ATOM   5251  CA  ILE C 294      30.053   9.669  -7.864  1.00 45.54           C  
+ATOM   5259  CA  ASP C 295      27.399   6.998  -8.480  1.00 41.14           C  
+ATOM   5267  CA  TRP C 296      24.222   7.605  -6.479  1.00 30.67           C  
+ATOM   5281  CA  PHE C 297      23.381   3.910  -6.151  1.00 31.97           C  
+ATOM   5292  CA  ASP C 298      26.856   2.916  -4.907  1.00 38.12           C  
+ATOM   5300  CA  TYR C 299      26.671   5.875  -2.540  1.00 39.05           C  
+ATOM   5312  CA  LYS C 300      23.196   4.971  -1.294  1.00 41.63           C  
+ATOM   5321  CA  LYS C 301      24.542   1.489  -0.577  1.00 43.40           C  
+ATOM   5330  CA  GLN C 302      27.207   3.064   1.608  1.00 43.79           C  
+ATOM   5339  CA  LEU C 303      24.476   5.181   3.238  1.00 41.51           C  
+ATOM   5347  CA  LYS C 304      22.138   2.343   4.264  1.00 45.18           C  
+ATOM   5356  CA  ARG C 305      25.322   0.535   5.256  1.00 46.65           C  
+ATOM   5367  CA  GLY C 306      25.613   3.181   7.945  1.00 40.29           C  
+ATOM   5371  CA  ASP C 307      21.954   3.487   8.940  1.00 41.21           C  
+ATOM   5379  CA  GLN C 308      21.463   6.730   7.023  1.00 35.55           C  
+ATOM   5388  CA  TRP C 309      18.961   5.674   4.361  1.00 31.22           C  
+ATOM   5402  CA  ASN C 310      16.018   3.728   5.752  1.00 31.61           C  
+ATOM   5410  CA  VAL C 311      13.120   2.841   3.452  1.00 32.13           C  
+ATOM   5417  CA  GLU C 312       9.705   1.332   4.261  1.00 31.51           C  
+ATOM   5426  CA  VAL C 313       7.466   1.606   1.209  1.00 26.39           C  
+ATOM   5433  CA  TYR C 314       4.403  -0.343   0.111  1.00 25.42           C  
index d82ff48..0b949de 100755 (executable)
@@ -1 +1 @@
-(((FER_BRANA:128.0,FER3_RAPSA:128.0):50.75,FER_CAPAA:178.75):121.94443,(Q93Z60_ARATH:271.45456,((O80429_MAIZE:183.0,FER1_MAIZE:183.0):30.5,((Q7XA98_TRIPR:90.0,FER1_PEA:90.0):83.32143,(((FER2_ARATH:64.0,FER1_ARATH:64.0):94.375,(FER1_SPIOL:124.5,FER1_MESCR:124.5):33.875):6.4166718,((Q93XJ9_SOLTU:33.5,FER1_SOLLC:33.5):49.0,FER_CAPAN:82.5):82.29167):8.529755):40.178574):57.95456):29.239868);\r
+(((FER_BRANA:128.0,FER3_RAPSA:128.0):50.75,FER_CAPAA:178.75):121.94443,(Q93Z60_ARATH:271.45456,((O80429_MAIZE:183.0,FER1_MAIZE:183.0):30.5,((Q7XA98_TRIPR:90.0,FER1_PEA:90.0):83.32143,(((FER2_ARATH:64.0,FER1_ARATH:64.0):94.375,(FER1_SPIOL:124.5,FER1_MESCR:124.5):33.875):6.4166718,((Q93XJ9_SOLTU:33.5,FER1_SOLLC:33.5):49.0,FER_CAPAN:82.5):82.29167):8.529755):40.178574):57.95456):29.239868);
index c0b3384..0772eab 100644 (file)
@@ -1,12 +1,12 @@
-// You need to add the groovy directory to the class path from the script window\r
-// or add the groovy directory to the java classpath when running Jalview\r
-\r
-jvtst = new JvLoadTester().newJvLoadTest('D:\\fooTest.jar');\r
-try { jvtst.TestForAll('D:\\e6-workspace\\Jalview RNA\\examples\\rna\\rfamSml') } \r
-catch (OutOfMemoryError e) { \r
-// inspect jvtst to find out what file + file index it was on\r
-}\r
-// Terminate Jalview - useful if running from command line\r
-if (Jalview.isInBatchMode()) {\r
- Jalview.quit() \r
+// You need to add the groovy directory to the class path from the script window
+// or add the groovy directory to the java classpath when running Jalview
+
+jvtst = new JvLoadTester().newJvLoadTest('D:\\fooTest.jar');
+try { jvtst.TestForAll('D:\\e6-workspace\\Jalview RNA\\examples\\rna\\rfamSml') } 
+catch (OutOfMemoryError e) { 
+// inspect jvtst to find out what file + file index it was on
+}
+// Terminate Jalview - useful if running from command line
+if (Jalview.isInBatchMode()) {
+ Jalview.quit() 
 }
\ No newline at end of file
index d944ece..8fcdd69 100644 (file)
-import jalview.gui.*;\r
-import jalview.io.*;\r
-\r
-def class JvLoadTest {\r
-    FileLoader fl = null;\r
-    def String safename = null;\r
-    JvLoadTest(String sname) { \r
-       if (!new File(sname).exists() || new File(sname).canWrite())\r
-           {\r
-               safename = sname;\r
-           } else {\r
-               System.err.println("Warning : "+sname+" isn't being used to store temporary files.");\r
-           }   \r
-    }\r
-    def public boolean doTest (file) {\r
-       fl = new FileLoader(false);\r
-       System.gc();\r
-       AlignFrame af = fl.LoadFileWaitTillLoaded(file\r
-                                                 ,FormatAdapter.FILE);\r
-       return doTest(af);\r
-    }\r
-    def public boolean doSequentialReadTest (file) {\r
-       return doSequentialReadTest(file, 0);\r
-    }\r
-    // Return true if there is more data to read.\r
-    def public boolean peekFp(FileParse fp) {\r
-       try { fp.mark(); }  catch (Exception ex) { System.err.println("FAILED mark."+ex); return false; };\r
-       try {\r
-         def String nl;\r
-         for (i in 1..3) { \r
-          nl = fp.nextLine();\r
-          if (nl==null) { return false; }\r
-          System.out.println(nl +"\\n");\r
-          }\r
-       } catch (Exception e) { // end of file.\r
-               return false; };\r
-       try { fp.reset(); } catch (Exception ex) { System.err.println("FAILED rewind."+ex); return false; };\r
-       return true;\r
-    }\r
-    /*\r
-      Halt after loading the mx'th entry in the filestream\r
-    */\r
-    def public boolean doSequentialReadTest (file, int mx) {\r
-       // first properly open the file\r
-       //      if (!doTest(file)) { return };\r
-       def FileParse fp = null;\r
-       try {\r
-               fp = new FileParse(file, AppletFormatAdapter.FILE);\r
-       } catch (Exception e) { System.err.println("Couldn't open "+file+"\\n"); e.printStackTrace(); return false;};\r
-       Desktop.instance.closeAll_actionPerformed(null)\r
-           System.gc();\r
-       while (fp!=null && fp.isValid() && (mx==0 || mx!=fp.index)) {\r
-           if (!peekFp(fp)) return false;\r
-           fl = new FileLoader(false);\r
-           AlignFrame af = fl.LoadFileWaitTillLoaded(fp, null);\r
-           System.out.println("FileParse index: "+fp.index);   \r
-           if (af!=null && (mx==0 || mx!=fp.index))\r
-               {       def boolean res = doTest(af);\r
-               if (!res)\r
-                   {\r
-                       // return false;\r
-                   }\r
-               } else {\r
-                   // return false;\r
-               }\r
-       }\r
-       return true;\r
-    }\r
-    def public void waitTillSettled(AlignFrame af)\r
-    {\r
-       if (af==null) { return; }\r
-       Thread.sleep(10);\r
-       while (af.getViewport().updatingConsensus || af.getViewport().updatingConservation) {\r
-           Thread.sleep(150); // wait until things settle down\r
-       }\r
-    }\r
-    def public boolean doTest(AlignFrame af) {\r
-       Object pr = af.getViewport().getAlignment().getProperty("AC");\r
-       if (pr!=null) { System.out.println("Accession = "+(String) pr); }\r
-       af.selectAllSequenceMenuItem_actionPerformed(null)\r
-           def boolean done = false;\r
-       // Just try to save - don\'t mess around with clipboard\r
-       /*while (!done) {\r
-         try {\r
-         af.copy_actionPerformed(null)\r
-         done = true;\r
-         } catch (Exception e) {\r
-         Thread.sleep(100); // wait until clipboard might be available again\r
-         }\r
-         }*/\r
-       if (af==null) { return false; }\r
-       waitTillSettled(af);\r
-       // Try and save as a jalview project and reload\r
-       try {\r
-           //      af.saveAlignment(safename, "Jalview")\r
-           new Jalview2XML().SaveState(new java.io.File(safename));\r
-           Thread.sleep(100);\r
-               } catch (Exception ex) { \r
-                   System.out.println("Couldn\'t save.");\r
-                   ex.printStackTrace(System.err);\r
-                   return false;\r
-               }\r
-       waitTillSettled(af);\r
-       try {\r
-           Desktop.instance.closeAll_actionPerformed(null);\r
-       } catch (Exception ex) {}\r
-       System.gc();\r
-       try {\r
-           af = new FileLoader(false).LoadFileWaitTillLoaded(safename, FormatAdapter.FILE);    \r
-       } \r
-       catch (Exception ex) {\r
-           System.out.println("Couldn't reload saved file.");\r
-            System.gc();\r
-           return false;\r
-       }\r
-       waitTillSettled(af);\r
-\r
-       Desktop.instance.closeAll_actionPerformed(null);\r
-\r
-       // af.paste(true)\r
-       // af.newView_actionPerformed(null)\r
-       // af.newView_actionPerformed(null)\r
-\r
-       return true;\r
-    }\r
-    def public boolean TestForAll(String dir) {\r
-       println "For directory or file : "+dir;\r
-       File fd = new File(dir);\r
-       if (!fd.isDirectory()) { return doSequentialReadTest(dir); }\r
-       fd.eachFile() { file -> TestForAll(file.getAbsolutePath()) };\r
-    }\r
-}\r
-def JvLoadTest newJvLoadTest(String tempFile) {\r
-       jalview.gui.Desktop.instance.closeAll_actionPerformed(null);\r
-       System.gc();\r
-       jalview.gui.Desktop.instance.desktop.showMemoryUsage(true);\r
-       return new JvLoadTest(tempFile)\r
+import jalview.gui.*;
+import jalview.io.*;
+
+def class JvLoadTest {
+    FileLoader fl = null;
+    def String safename = null;
+    JvLoadTest(String sname) { 
+       if (!new File(sname).exists() || new File(sname).canWrite())
+           {
+               safename = sname;
+           } else {
+               System.err.println("Warning : "+sname+" isn't being used to store temporary files.");
+           }   
+    }
+    def public boolean doTest (file) {
+       fl = new FileLoader(false);
+       System.gc();
+       AlignFrame af = fl.LoadFileWaitTillLoaded(file
+                                                 ,FormatAdapter.FILE);
+       return doTest(af);
+    }
+    def public boolean doSequentialReadTest (file) {
+       return doSequentialReadTest(file, 0);
+    }
+    // Return true if there is more data to read.
+    def public boolean peekFp(FileParse fp) {
+       try { fp.mark(); }  catch (Exception ex) { System.err.println("FAILED mark."+ex); return false; };
+       try {
+         def String nl;
+         for (i in 1..3) { 
+          nl = fp.nextLine();
+          if (nl==null) { return false; }
+          System.out.println(nl +"\\n");
+          }
+       } catch (Exception e) { // end of file.
+               return false; };
+       try { fp.reset(); } catch (Exception ex) { System.err.println("FAILED rewind."+ex); return false; };
+       return true;
+    }
+    /*
+      Halt after loading the mx'th entry in the filestream
+    */
+    def public boolean doSequentialReadTest (file, int mx) {
+       // first properly open the file
+       //      if (!doTest(file)) { return };
+       def FileParse fp = null;
+       try {
+               fp = new FileParse(file, AppletFormatAdapter.FILE);
+       } catch (Exception e) { System.err.println("Couldn't open "+file+"\\n"); e.printStackTrace(); return false;};
+       Desktop.instance.closeAll_actionPerformed(null)
+           System.gc();
+       while (fp!=null && fp.isValid() && (mx==0 || mx!=fp.index)) {
+           if (!peekFp(fp)) return false;
+           fl = new FileLoader(false);
+           AlignFrame af = fl.LoadFileWaitTillLoaded(fp, null);
+           System.out.println("FileParse index: "+fp.index);   
+           if (af!=null && (mx==0 || mx!=fp.index))
+               {       def boolean res = doTest(af);
+               if (!res)
+                   {
+                       // return false;
+                   }
+               } else {
+                   // return false;
+               }
+       }
+       return true;
+    }
+    def public void waitTillSettled(AlignFrame af)
+    {
+       if (af==null) { return; }
+       Thread.sleep(10);
+       while (af.getViewport().updatingConsensus || af.getViewport().updatingConservation) {
+           Thread.sleep(150); // wait until things settle down
+       }
+    }
+    def public boolean doTest(AlignFrame af) {
+       Object pr = af.getViewport().getAlignment().getProperty("AC");
+       if (pr!=null) { System.out.println("Accession = "+(String) pr); }
+       af.selectAllSequenceMenuItem_actionPerformed(null)
+           def boolean done = false;
+       // Just try to save - don\'t mess around with clipboard
+       /*while (!done) {
+         try {
+         af.copy_actionPerformed(null)
+         done = true;
+         } catch (Exception e) {
+         Thread.sleep(100); // wait until clipboard might be available again
+         }
+         }*/
+       if (af==null) { return false; }
+       waitTillSettled(af);
+       // Try and save as a jalview project and reload
+       try {
+           //      af.saveAlignment(safename, "Jalview")
+           new Jalview2XML().SaveState(new java.io.File(safename));
+           Thread.sleep(100);
+               } catch (Exception ex) { 
+                   System.out.println("Couldn\'t save.");
+                   ex.printStackTrace(System.err);
+                   return false;
+               }
+       waitTillSettled(af);
+       try {
+           Desktop.instance.closeAll_actionPerformed(null);
+       } catch (Exception ex) {}
+       System.gc();
+       try {
+           af = new FileLoader(false).LoadFileWaitTillLoaded(safename, FormatAdapter.FILE);    
+       } 
+       catch (Exception ex) {
+           System.out.println("Couldn't reload saved file.");
+            System.gc();
+           return false;
+       }
+       waitTillSettled(af);
+
+       Desktop.instance.closeAll_actionPerformed(null);
+
+       // af.paste(true)
+       // af.newView_actionPerformed(null)
+       // af.newView_actionPerformed(null)
+
+       return true;
+    }
+    def public boolean TestForAll(String dir) {
+       println "For directory or file : "+dir;
+       File fd = new File(dir);
+       if (!fd.isDirectory()) { return doSequentialReadTest(dir); }
+       fd.eachFile() { file -> TestForAll(file.getAbsolutePath()) };
+    }
+}
+def JvLoadTest newJvLoadTest(String tempFile) {
+       jalview.gui.Desktop.instance.closeAll_actionPerformed(null);
+       System.gc();
+       jalview.gui.Desktop.instance.desktop.showMemoryUsage(true);
+       return new JvLoadTest(tempFile)
 }
\ No newline at end of file
index 8fe91db..5a2166d 100644 (file)
@@ -1,12 +1,12 @@
-// do something groovy in jalview\r
-print "Hello World.\n";\r
-def alf = Jalview.getAlignframes();\r
-for (ala in alf)\r
-{\r
-       // ala is an jalview.gui.AlignFrame object \r
-       print ala.getTitle()+"\n";\r
-       // get the parent jalview.datamodel.Alignment from the alignment viewport\r
-       def alignment = ala.viewport.alignment;\r
-       // get the first sequence from the jalview.datamodel.Alignment object\r
-       def seq = alignment.getSequenceAt(0); \r
-}\r
+// do something groovy in jalview
+print "Hello World.\n";
+def alf = Jalview.getAlignframes();
+for (ala in alf)
+{
+       // ala is an jalview.gui.AlignFrame object 
+       print ala.getTitle()+"\n";
+       // get the parent jalview.datamodel.Alignment from the alignment viewport
+       def alignment = ala.viewport.alignment;
+       // get the first sequence from the jalview.datamodel.Alignment object
+       def seq = alignment.getSequenceAt(0); 
+}
index 3b93622..e19c0be 100644 (file)
@@ -1,16 +1,16 @@
-/**\r
- * Copyright 2010 Tim Down.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
+/**
+ * Copyright 2010 Tim Down.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 var Hashtable=(function(){var p="function";var n=(typeof Array.prototype.splice==p)?function(s,r){s.splice(r,1)}:function(u,t){var s,v,r;if(t===u.length-1){u.length=t}else{s=u.slice(t+1);u.length=t;for(v=0,r=s.length;v<r;++v){u[t+v]=s[v]}}};function a(t){var r;if(typeof t=="string"){return t}else{if(typeof t.hashCode==p){r=t.hashCode();return(typeof r=="string")?r:a(r)}else{if(typeof t.toString==p){return t.toString()}else{try{return String(t)}catch(s){return Object.prototype.toString.call(t)}}}}}function g(r,s){return r.equals(s)}function e(r,s){return(typeof s.equals==p)?s.equals(r):(r===s)}function c(r){return function(s){if(s===null){throw new Error("null is not a valid "+r)}else{if(typeof s=="undefined"){throw new Error(r+" must not be undefined")}}}}var q=c("key"),l=c("value");function d(u,s,t,r){this[0]=u;this.entries=[];this.addEntry(s,t);if(r!==null){this.getEqualityFunction=function(){return r}}}var h=0,j=1,f=2;function o(r){return function(t){var s=this.entries.length,v,u=this.getEqualityFunction(t);while(s--){v=this.entries[s];if(u(t,v[0])){switch(r){case h:return true;case j:return v;case f:return[s,v[1]]}}}return false}}function k(r){return function(u){var v=u.length;for(var t=0,s=this.entries.length;t<s;++t){u[v+t]=this.entries[t][r]}}}d.prototype={getEqualityFunction:function(r){return(typeof r.equals==p)?g:e},getEntryForKey:o(j),getEntryAndIndexForKey:o(f),removeEntryForKey:function(s){var r=this.getEntryAndIndexForKey(s);if(r){n(this.entries,r[0]);return r[1]}return null},addEntry:function(r,s){this.entries[this.entries.length]=[r,s]},keys:k(0),values:k(1),getEntries:function(s){var u=s.length;for(var t=0,r=this.entries.length;t<r;++t){s[u+t]=this.entries[t].slice(0)}},containsKey:o(h),containsValue:function(s){var r=this.entries.length;while(r--){if(s===this.entries[r][1]){return true}}return false}};function m(s,t){var r=s.length,u;while(r--){u=s[r];if(t===u[0]){return r}}return null}function i(r,s){var t=r[s];return(t&&(t instanceof d))?t:null}function b(t,r){var w=this;var v=[];var u={};var x=(typeof t==p)?t:a;var s=(typeof r==p)?r:null;this.put=function(B,C){q(B);l(C);var D=x(B),E,A,z=null;E=i(u,D);if(E){A=E.getEntryForKey(B);if(A){z=A[1];A[1]=C}else{E.addEntry(B,C)}}else{E=new d(D,B,C,s);v[v.length]=E;u[D]=E}return z};this.get=function(A){q(A);var B=x(A);var C=i(u,B);if(C){var z=C.getEntryForKey(A);if(z){return z[1]}}return null};this.containsKey=function(A){q(A);var z=x(A);var B=i(u,z);return B?B.containsKey(A):false};this.containsValue=function(A){l(A);var z=v.length;while(z--){if(v[z].containsValue(A)){return true}}return false};this.clear=function(){v.length=0;u={}};this.isEmpty=function(){return !v.length};var y=function(z){return function(){var A=[],B=v.length;while(B--){v[B][z](A)}return A}};this.keys=y("keys");this.values=y("values");this.entries=y("getEntries");this.remove=function(B){q(B);var C=x(B),z,A=null;var D=i(u,C);if(D){A=D.removeEntryForKey(B);if(A!==null){if(!D.entries.length){z=m(v,C);n(v,z);delete u[C]}}}return A};this.size=function(){var A=0,z=v.length;while(z--){A+=v[z].entries.length}return A};this.each=function(C){var z=w.entries(),A=z.length,B;while(A--){B=z[A];C(B[0],B[1])}};this.putAll=function(H,C){var B=H.entries();var E,F,D,z,A=B.length;var G=(typeof C==p);while(A--){E=B[A];F=E[0];D=E[1];if(G&&(z=w.get(F))){D=C(F,z,D)}w.put(F,D)}};this.clone=function(){var z=new b(t,r);z.putAll(w);return z}}return b})();
\ No newline at end of file
index 6962276..fbc3638 100644 (file)
-/* Jmol 12.0 script library Jmol.js 9:48 PM 1/31/2011 Bob Hanson\r
-\r
- checkbox heirarchy -- see http://chemapps.stolaf.edu/jmol/docs/examples-11/check.htm\r
-\r
-    based on:\r
- *\r
- * Copyright (C) 2004-2005  Miguel, Jmol Development, www.jmol.org\r
- *\r
- * Contact: hansonr@stolaf.edu\r
- *\r
- *  This library is free software; you can redistribute it and/or\r
- *  modify it under the terms of the GNU Lesser General Public\r
- *  License as published by the Free Software Foundation; either\r
- *  version 2.1 of the License, or (at your option) any later version.\r
- *\r
- *  This library is distributed in the hope that it will be useful,\r
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- *  Lesser General Public License for more details.\r
- *\r
- *  You should have received a copy of the GNU Lesser General Public\r
- *  License along with this library; if not, write to the Free Software\r
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA\r
- *  02111-1307  USA.\r
- */\r
-\r
-// for documentation see www.jmol.org/jslibrary\r
-\r
-try{if(typeof(_jmol)!="undefined")exit()\r
-\r
-// place "?NOAPPLET" on your command line to check applet control action with a textarea\r
-// place "?JMOLJAR=xxxxx" to use a specific jar file\r
-\r
-// bob hanson -- jmolResize(w,h) -- resizes absolutely or by percent (w or h 0.5 means 50%)\r
-//    angel herraez -- update of jmolResize(w,h,targetSuffix) so it is not tied to first applet\r
-// bob hanson -- jmolEvaluate -- evaluates molecular math 8:37 AM 2/23/2007\r
-// bob hanson -- jmolScriptMessage -- returns all "scriptStatus" messages 8:37 AM 2/23/2007\r
-// bob hanson -- jmolScriptEcho -- returns all "scriptEcho" messages 8:37 AM 2/23/2007\r
-// bob hanson -- jmolScriptWait -- 11:31 AM 5/2/2006\r
-// bob hanson -- remove trailing separatorHTML in radio groups -- 12:18 PM 5/6/2006\r
-// bob hanson -- adds support for dynamic DOM script nodes 7:04 AM 5/19/2006\r
-// bob hanson -- adds try/catch for wiki - multiple code passes 7:05 AM 5/19/2006\r
-// bob hanson -- auto-initiates to defaultdir/defaultjar -- change as desired.\r
-// bob hanson -- adding save/restore orientation w/ and w/o delay 11:49 AM 5/25/2006\r
-// bob hanson -- adding AjaxJS service 11:16 AM 6/3/2006\r
-// bob hanson -- fix for iframes not available for finding applet\r
-// bob hanson -- added applet fake ?NOAPPLET URL flag\r
-// bob hanson -- added jmolSetCallback(calbackName, funcName) 3:32 PM 6/13/2006\r
-//                     used PRIOR to jmolApplet() or jmolAppletInline()\r
-//               added 4th array element in jmolRadioGroup -- title\r
-//               added <span> and id around link, checkbox, radio, menu\r
-//               fixing AJAX loads for MSIE/Opera-Mozilla incompatibility\r
-//            -- renamed Jmol-11.js from Jmol-new.js; JmolApplet.jar from JmolAppletProto.jar\r
-//              renamed Jmol.js for Jmol 11 distribution\r
-//            -- modified jmolRestoreOrientation() to be immediate, no 1-second delay\r
-// bob hanson -- jmolScriptWait always returns a string -- 11:23 AM 9/16/2006\r
-// bh         -- jmolCommandInput()\r
-// bh         -- jmolSetTranslation(TF) -- forces translation even if there might be message callback issues\r
-// bh         -- minor fixes suggested by Angel\r
-// bh         -- adds jmolSetSyncId() and jmolGetSyncId()\r
-// bh 3/2008  -- adds jmolAppendInlineScript() and jmolAppendInlineArray()\r
-// bh 3/2008  -- fixes IE7 bug in relation to jmolLoadInlineArray()\r
-// bh 6/2008  -- adds jmolSetAppletWindow()\r
-// Angel H. 6/2008  -- added html <label> tags to checkboxes and radio buttons [in jmolCheckbox() and _jmolRadio() functions]\r
-// bh 7/2008  -- code fix "for(i..." not "for(var i..."\r
-// bh 12/2008 -- jmolLoadInline, jmolLoadInlineArray, jmolLoadInlineScript, jmolAppendInlineScript, jmolAppendInlineArray all return error message or null (Jmol 11.7.16)\r
-// bh 12/2008 -- jmolScriptWaitOutput() -- waits for script to complete and delivers output normally sent to console\r
-\r
-// bh 5/2009  -- Support for XHTML using jmolSetXHTML(id)\r
-// ah & bh 6/2009 -- New jmolResizeApplet() more flexible, similar to jmolApplet() size syntax\r
-// bh 11/2009 -- care in accessing top.document\r
-// bh 12/2009 -- added jmolSetParameter(name, value)\r
-// bh 12/2009 -- added PARAMS=name:value;name:value;name:value... for command line\r
-// bh 12/2009 -- overhaul of target checking\r
-// bh 1/2010  -- all _xxxx() methods ALWAYS have complete argument list\r
-// bh 1/2010  -- adds option to run a JavaScript function from any Jmol control. \r
-//               This is accomplished by passing an array rather than a script:\r
-//               jmolHref([myfunc,"my param 1", "my param 2"], "testing")\r
-//               function myfunc(jmolControlObject, [myfunc,"my param 1", "my param 2"], target){...}\r
-//               and allows much more flexibility with responding to controls\r
-// bh 4/2010  -- added jmolSetMemoryMb(nMb)\r
-// ah 1/2011  -- wider detection of browsers; more browsers now use the object tag instead of the applet tag; \r
-//               fix of object tag (removed classid) accounts for change of behavior in Chrome\r
-// bh 3/2011  -- added jmolLoadAjax_STOLAF_NIH\r
-\r
-var defaultdir = "."\r
-var defaultjar = "JmolApplet.jar"\r
-\r
-\r
-// Note added 12:41 PM 9/21/2008 by Bob Hanson, hansonr@stolaf.edu:\r
-\r
-// JMOLJAR=xxxxx.jar on the URL for this page will override\r
-// the JAR file specified in the jmolInitialize() call.\r
-\r
-// The idea is that it can be very useful to test a web page with different JAR files\r
-// Or for an expert user to substitute a signed applet for an unsigned one\r
-// so as to use a broader range of models or to create JPEG files, for example.\r
-\r
-// If the JAR file is not in the current directory (has any sort of "/" in its name)\r
-// then the user is presented with a warning and asked whether it is OK to change Jar files.\r
-// The default action, if the user just presses "OK" is to NOT allow the change. \r
-// The user must type the word "yes" in the prompt box for the change to be approved.\r
-\r
-// If you don't want people to be able to switch in their own JAR file on your page,\r
-// simply set this next line to read "var allowJMOLJAR = false".\r
-\r
-\r
-var undefined; // for IE 5 ... wherein undefined is undefined\r
-\r
-////////////////////////////////////////////////////////////////\r
-// Basic Scripting infrastruture\r
-////////////////////////////////////////////////////////////////\r
-\r
-function jmolInitialize(codebaseDirectory, fileNameOrUseSignedApplet) {\r
-  if (_jmol.initialized)\r
-    return;\r
-  _jmol.initialized = true;\r
-  if(_jmol.jmoljar) {\r
-    var f = _jmol.jmoljar;\r
-    if (f.indexOf("/") >= 0) {\r
-      alert ("This web page URL is requesting that the applet used be " + f + ". This is a possible security risk, particularly if the applet is signed, because signed applets can read and write files on your local machine or network.")\r
-      var ok = prompt("Do you want to use applet " + f + "? ","yes or no")\r
-      if (ok == "yes") {\r
-        codebaseDirectory = f.substring(0, f.lastIndexOf("/"));\r
-        fileNameOrUseSignedApplet = f.substring(f.lastIndexOf("/") + 1);\r
-      } else {\r
-       _jmolGetJarFilename(fileNameOrUseSignedApplet);\r
-        alert("The web page URL was ignored. Continuing using " + _jmol.archivePath + ' in directory "' + codebaseDirectory + '"');\r
-      }\r
-    } else {\r
-      fileNameOrUseSignedApplet = f;\r
-    }\r
-  }\r
-  _jmolSetCodebase(codebaseDirectory);\r
-  _jmolGetJarFilename(fileNameOrUseSignedApplet);\r
-  _jmolOnloadResetForms();\r
-}\r
-\r
-function jmolSetTranslation(TF) {\r
-  _jmol.params.doTranslate = ''+TF;\r
-}\r
-\r
-function _jmolGetJarFilename(fileNameOrFlag) {\r
-  _jmol.archivePath =\r
-    (typeof(fileNameOrFlag) == "string"  ? fileNameOrFlag : (fileNameOrFlag ?  "JmolAppletSigned" : "JmolApplet") + "0.jar");\r
-}\r
-\r
-function jmolSetDocument(doc) {\r
-  _jmol.currentDocument = doc;\r
-}\r
-\r
-function jmolSetAppletColor(boxbgcolor, boxfgcolor, progresscolor) {\r
-  _jmolInitCheck();\r
-  _jmol.params.boxbgcolor = boxbgcolor;\r
-  if (boxfgcolor)\r
-    _jmol.params.boxfgcolor = boxfgcolor\r
-  else if (boxbgcolor == "white" || boxbgcolor == "#FFFFFF")\r
-    _jmol.params.boxfgcolor = "black";\r
-  else\r
-    _jmol.params.boxfgcolor = "white";\r
-  if (progresscolor)\r
-    _jmol.params.progresscolor = progresscolor;\r
-  if (_jmol.debugAlert)\r
-    alert(" boxbgcolor=" + _jmol.params.boxbgcolor +\r
-          " boxfgcolor=" + _jmol.params.boxfgcolor +\r
-          " progresscolor=" + _jmol.params.progresscolor);\r
-}\r
-\r
-function jmolSetAppletWindow(w) {\r
-  _jmol.appletWindow = w;\r
-}\r
-\r
-function jmolApplet(size, script, nameSuffix) {\r
-  _jmolInitCheck();\r
-  return _jmolApplet(size, null, script, nameSuffix);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// Basic controls\r
-////////////////////////////////////////////////////////////////\r
-\r
-// undefined means it wasn't there; null means it was explicitly listed as null (so as to skip it)\r
-\r
-function jmolButton(script, label, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolButton" + _jmol.buttonCount);\r
-  label != undefined && label != null || (label = script.substring(0, 32));\r
-  ++_jmol.buttonCount;\r
-  var scriptIndex = _jmolAddScript(script);\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='button' name='" + id + "' id='" + id +\r
-          "' value='" + label +\r
-          "' onclick='_jmolClick(this," + scriptIndex + _jmol.targetText +\r
-          ")' onmouseover='_jmolMouseOver(" + scriptIndex +\r
-          ");return true' onmouseout='_jmolMouseOut()' " +\r
-          _jmol.buttonCssText + " /></span>";\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolCheckbox(scriptWhenChecked, scriptWhenUnchecked,\r
-                      labelHtml, isChecked, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolCheckbox" + _jmol.checkboxCount);\r
-  ++_jmol.checkboxCount;\r
-  if (scriptWhenChecked == undefined || scriptWhenChecked == null ||\r
-      scriptWhenUnchecked == undefined || scriptWhenUnchecked == null) {\r
-    alert("jmolCheckbox requires two scripts");\r
-    return;\r
-  }\r
-  if (labelHtml == undefined || labelHtml == null) {\r
-    alert("jmolCheckbox requires a label");\r
-    return;\r
-  }\r
-  var indexChecked = _jmolAddScript(scriptWhenChecked);\r
-  var indexUnchecked = _jmolAddScript(scriptWhenUnchecked);\r
-  var eospan = "</span>"\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='checkbox' name='" + id + "' id='" + id +\r
-          "' onclick='_jmolCbClick(this," +\r
-          indexChecked + "," + indexUnchecked + _jmol.targetText +\r
-          ")' onmouseover='_jmolCbOver(this," + indexChecked + "," +\r
-          indexUnchecked +\r
-          ");return true' onmouseout='_jmolMouseOut()' " +\r
-         (isChecked ? "checked='true' " : "")+ _jmol.checkboxCssText + " />" \r
-  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {\r
-       t += eospan\r
-       eospan = "";\r
-  }\r
-  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan;\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolStartNewRadioGroup() {\r
-  ++_jmol.radioGroupCount;\r
-}\r
-\r
-function jmolRadioGroup(arrayOfRadioButtons, separatorHtml, groupName, id, title) {\r
-  /*\r
-\r
-    array: [radio1,radio2,radio3...]\r
-    where radioN = ["script","label",isSelected,"id","title"]\r
-\r
-  */\r
-\r
-  _jmolInitCheck();\r
-  var type = typeof arrayOfRadioButtons;\r
-  if (type != "object" || type == null || ! arrayOfRadioButtons.length) {\r
-    alert("invalid arrayOfRadioButtons");\r
-    return;\r
-  }\r
-  separatorHtml != undefined && separatorHtml != null || (separatorHtml = "&nbsp; ");\r
-  var len = arrayOfRadioButtons.length;\r
-  jmolStartNewRadioGroup();\r
-  groupName || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));\r
-  var t = "<span id='"+(id ? id : groupName)+"'>";\r
-  for (var i = 0; i < len; ++i) {\r
-    if (i == len - 1)\r
-      separatorHtml = "";\r
-    var radio = arrayOfRadioButtons[i];\r
-    type = typeof radio;\r
-    if (type == "object") {\r
-      t += _jmolRadio(radio[0], radio[1], radio[2], separatorHtml, groupName, (radio.length > 3 ? radio[3]: (id ? id : groupName)+"_"+i), (radio.length > 4 ? radio[4] : 0), title);\r
-    } else {\r
-      t += _jmolRadio(radio, null, null, separatorHtml, groupName, (id ? id : groupName)+"_"+i, title);\r
-    }\r
-  }\r
-  t+="</span>"\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-\r
-function jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {\r
-  _jmolInitCheck();\r
-  if (_jmol.radioGroupCount == 0)\r
-    ++_jmol.radioGroupCount;\r
-  var t = _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, (id ? id : groupName + "_" + _jmol.radioCount), title ? title : 0);\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolLink(script, label, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolLink" + _jmol.linkCount);\r
-  label != undefined && label != null || (label = script.substring(0, 32));\r
-  ++_jmol.linkCount;\r
-  var scriptIndex = _jmolAddScript(script);\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><a name='" + id + "' id='" + id + \r
-          "' href='javascript:_jmolClick(this," + scriptIndex + _jmol.targetText + ");' onmouseover='_jmolMouseOver(" + scriptIndex +\r
-          ");return true;' onmouseout='_jmolMouseOut()' " +\r
-          _jmol.linkCssText + ">" + label + "</a></span>";\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function jmolCommandInput(label, size, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolCmd" + _jmol.cmdCount);\r
-  label != undefined && label != null || (label = "Execute");\r
-  size != undefined && !isNaN(size) || (size = 60);\r
-  ++_jmol.cmdCount;\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" + id + "' id='" + id + \r
-          "' size='"+size+"' onkeypress='_jmolCommandKeyPress(event,\""+id+"\"" + _jmol.targetText + ")'><input type=button value = '"+label+"' onclick='jmolScript(document.getElementById(\""+id+"\").value" + _jmol.targetText + ")' /></span>";\r
-  if (_jmol.debugAlert)\r
-    alert(t);\r
-  return _jmolDocumentWrite(t);\r
-}\r
-\r
-function _jmolCommandKeyPress(e, id, target) {\r
-       var keycode = (window.event ? window.event.keyCode : e ? e.which : 0);\r
-       if (keycode == 13) {\r
-               var inputBox = document.getElementById(id)\r
-               _jmolScriptExecute(inputBox, inputBox.value, target)\r
-       }\r
-}\r
-\r
-function _jmolScriptExecute(element,script,target) {\r
-       if (typeof(script) == "object")\r
-               script[0](element, script, target)\r
-       else\r
-               jmolScript(script, target) \r
-}\r
-\r
-function jmolMenu(arrayOfMenuItems, size, id, title) {\r
-  _jmolInitCheck();\r
-  id != undefined && id != null || (id = "jmolMenu" + _jmol.menuCount);\r
-  ++_jmol.menuCount;\r
-  var type = typeof arrayOfMenuItems;\r
-  if (type != null && type == "object" && arrayOfMenuItems.length) {\r
-    var len = arrayOfMenuItems.length;\r
-    if (typeof size != "number" || size == 1)\r
-      size = null;\r
-    else if (size < 0)\r
-      size = len;\r
-    var sizeText = size ? " size='" + size + "' " : "";\r
-    var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><select name='" + id + "' id='" + id +\r
-            "' onChange='_jmolMenuSelected(this" + _jmol.targetText + ")'" +\r
-            sizeText + _jmol.menuCssText + ">";\r
-    for (var i = 0; i < len; ++i) {\r
-      var menuItem = arrayOfMenuItems[i];\r
-      type = typeof menuItem;\r
-      var script, text;\r
-      var isSelected = undefined;\r
-      if (type == "object" && menuItem != null) {\r
-        script = menuItem[0];\r
-        text = menuItem[1];\r
-        isSelected = menuItem[2];\r
-      } else {\r
-        script = text = menuItem;\r
-      }\r
-      text != undefined && text != null || (text = script);            \r
-      if (script=="#optgroup") {\r
-        t += "<optgroup label='" + text + "'>";          \r
-         } else if (script=="#optgroupEnd") {\r
-        t += "</optgroup>";      \r
-         } else {              \r
-        var scriptIndex = _jmolAddScript(script);\r
-        var selectedText = isSelected ? "' selected='true'>" : "'>";\r
-        t += "<option value='" + scriptIndex + selectedText + text + "</option>";\r
-      }\r
-    }\r
-    t += "</select></span>";\r
-    if (_jmol.debugAlert)\r
-      alert(t);\r
-    return _jmolDocumentWrite(t);\r
-  }\r
-}\r
-\r
-function jmolHtml(html) {\r
-  return _jmolDocumentWrite(html);\r
-}\r
-\r
-function jmolBr() {\r
-  return _jmolDocumentWrite("<br />");\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// advanced scripting functions\r
-////////////////////////////////////////////////////////////////\r
-\r
-function jmolDebugAlert(enableAlerts) {\r
-  _jmol.debugAlert = (enableAlerts == undefined || enableAlerts)\r
-}\r
-\r
-function jmolAppletInline(size, inlineModel, script, nameSuffix) {\r
-  _jmolInitCheck();\r
-  return _jmolApplet(size, _jmolSterilizeInline(inlineModel),\r
-                     script, nameSuffix);\r
-}\r
-\r
-function jmolSetTarget(targetSuffix) {\r
-  _jmol.targetSuffix = targetSuffix;\r
-  _jmol.targetText = targetSuffix ? ",\"" + targetSuffix + "\"" : ",0";\r
-}\r
-\r
-function jmolScript(script, targetSuffix) {\r
-  if (script) {\r
-    _jmolCheckBrowser();\r
-    if (targetSuffix == "all") {\r
-      with (_jmol) {\r
-       for (var i = 0; i < appletSuffixes.length; ++i) {\r
-         var applet = _jmolGetApplet(appletSuffixes[i]);\r
-          if (applet) applet.script(script);\r
-        }\r
-      }\r
-    } else {\r
-      var applet=_jmolGetApplet(targetSuffix);\r
-      if (applet) applet.script(script);\r
-    }\r
-  }\r
-}\r
-\r
-function jmolLoadInline(model, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  if (typeof(model) == "string")\r
-    return applet.loadInlineString(model, "", false);\r
-  else\r
-    return applet.loadInlineArray(model, "", false);\r
-}\r
-\r
-\r
-function jmolLoadInlineScript(model, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  return applet.loadInlineString(model, script, false);\r
-}\r
-\r
-\r
-function jmolLoadInlineArray(ModelArray, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  script || (script="")\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  try {\r
-    return applet.loadInlineArray(ModelArray, script, false);\r
-  } catch (err) {\r
-    //IE 7 bug\r
-    return applet.loadInlineString(ModelArray.join("\n"), script, false);\r
-  }\r
-}\r
-\r
-function jmolAppendInlineArray(ModelArray, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  script || (script="")\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  try {\r
-    return applet.loadInlineArray(ModelArray, script, true);\r
-  } catch (err) {\r
-    //IE 7 bug\r
-    return applet.loadInlineString(ModelArray.join("\n"), script, true);\r
-  }\r
-}\r
-\r
-function jmolAppendInlineScript(model, script, targetSuffix) {\r
-  if (!model)return "ERROR: NO MODEL"\r
-  var applet=_jmolGetApplet(targetSuffix);\r
-  if (!applet)return "ERROR: NO APPLET"\r
-  return applet.loadInlineString(model, script, true);\r
-}\r
-\r
-function jmolCheckBrowser(action, urlOrMessage, nowOrLater) {\r
-  if (typeof action == "string") {\r
-    action = action.toLowerCase();\r
-    action == "alert" || action == "redirect" || action == "popup" || (action = null);\r
-  }\r
-  if (typeof action != "string")\r
-    alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +\r
-          "action must be 'alert', 'redirect', or 'popup'");\r
-  else {\r
-    if (typeof urlOrMessage != "string")\r
-      alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +\r
-            "urlOrMessage must be a string");\r
-    else {\r
-      _jmol.checkBrowserAction = action;\r
-      _jmol.checkBrowserUrlOrMessage = urlOrMessage;\r
-    }\r
-  }\r
-  if (typeof nowOrLater == "string" && nowOrLater.toLowerCase() == "now")\r
-    _jmolCheckBrowser();\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// Cascading Style Sheet Class support\r
-////////////////////////////////////////////////////////////////\r
-\r
-function jmolSetAppletCssClass(appletCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.appletCssClass = appletCssClass;\r
-    _jmol.appletCssText = appletCssClass ? "class='" + appletCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetButtonCssClass(buttonCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.buttonCssClass = buttonCssClass;\r
-    _jmol.buttonCssText = buttonCssClass ? "class='" + buttonCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetCheckboxCssClass(checkboxCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.checkboxCssClass = checkboxCssClass;\r
-    _jmol.checkboxCssText = checkboxCssClass ? "class='" + checkboxCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetRadioCssClass(radioCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.radioCssClass = radioCssClass;\r
-    _jmol.radioCssText = radioCssClass ? "class='" + radioCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetLinkCssClass(linkCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.linkCssClass = linkCssClass;\r
-    _jmol.linkCssText = linkCssClass ? "class='" + linkCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-function jmolSetMenuCssClass(menuCssClass) {\r
-  if (_jmol.hasGetElementById) {\r
-    _jmol.menuCssClass = menuCssClass;\r
-    _jmol.menuCssText = menuCssClass ? "class='" + menuCssClass + "' " : "";\r
-  }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////\r
-// functions for INTERNAL USE ONLY which are subject to change\r
-// use at your own risk ... you have been WARNED!\r
-////////////////////////////////////////////////////////////////\r
-var _jmol = {\r
-  currentDocument: document,\r
-\r
-  debugAlert: false,\r
-  \r
-  codebase: "",\r
-  modelbase: ".",\r
-  \r
-  appletCount: 0,\r
-  appletSuffixes: [],\r
-  appletWindow: null,\r
-  allowedJmolSize: [25, 2048, 300],   // min, max, default (pixels)\r
-         /*  By setting the _jmol.allowedJmolSize[] variable in the webpage \r
-             before calling jmolApplet(), limits for applet size can be overriden.\r
-                   2048 standard for GeoWall (http://geowall.geo.lsa.umich.edu/home.html)\r
-         */  \r
-  buttonCount: 0,\r
-  checkboxCount: 0,\r
-  linkCount: 0,\r
-  cmdCount: 0,\r
-  menuCount: 0,\r
-  radioCount: 0,\r
-  radioGroupCount: 0,\r
-  \r
-  appletCssClass: null,\r
-  appletCssText: "",\r
-  buttonCssClass: null,\r
-  buttonCssText: "",\r
-  checkboxCssClass: null,\r
-  checkboxCssText: "",\r
-  java_arguments: "-Xmx512m",\r
-  radioCssClass: null,\r
-  radioCssText: "",\r
-  linkCssClass: null,\r
-  linkCssText: "",\r
-  menuCssClass: null,\r
-  menuCssText: "",\r
-  \r
-  targetSuffix: 0,\r
-  targetText: ",0",\r
-  scripts: [""],\r
-  params: {\r
-       syncId: ("" + Math.random()).substring(3),\r
-       progressbar: "true",\r
-       progresscolor: "blue",\r
-       boxbgcolor: "black",\r
-       boxfgcolor: "white",\r
-       boxmessage: "Downloading JmolApplet ..."\r
-  },\r
-  ua: navigator.userAgent.toLowerCase(),\r
-  // uaVersion: parseFloat(navigator.appVersion),  // not used\r
-  \r
-  os: "unknown",\r
-  browser: "unknown",\r
-  browserVersion: 0,\r
-  hasGetElementById: !!document.getElementById,\r
-  isJavaEnabled: navigator.javaEnabled(),\r
-  // isNetscape47Win: false,  // not used, N4.7 is no longer supported even for detection\r
-  useIEObject: false,\r
-  useHtml4Object: false,\r
-  \r
-  windowsClassId: "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93",\r
-  windowsCabUrl:\r
-   "http://java.sun.com/update/1.6.0/jinstall-6u22-windows-i586.cab",\r
-\r
-  isBrowserCompliant: false,\r
-  isJavaCompliant: false,\r
-  isFullyCompliant: false,\r
-\r
-  initialized: false,\r
-  initChecked: false,\r
-  \r
-  browserChecked: false,\r
-  checkBrowserAction: "alert",\r
-  checkBrowserUrlOrMessage: null,\r
-\r
-  archivePath: null, // JmolApplet0.jar OR JmolAppletSigned0.jar\r
-\r
-  previousOnloadHandler: null,\r
-\r
-  jmoljar: null,  \r
-  useNoApplet: false,\r
-\r
-  ready: {}\r
-}\r
-\r
-with (_jmol) {\r
-  function _jmolTestUA(candidate) {\r
-    var ua = _jmol.ua;\r
-    var index = ua.indexOf(candidate);\r
-    if (index < 0)\r
-      return false;\r
-    _jmol.browser = candidate;\r
-    _jmol.browserVersion = parseFloat(ua.substring(index+candidate.length+1));\r
-    return true;\r
-  }\r
-  \r
-  function _jmolTestOS(candidate) {\r
-    if (_jmol.ua.indexOf(candidate) < 0)\r
-      return false;\r
-    _jmol.os = candidate;\r
-    return true;\r
-  }\r
-  \r
-  _jmolTestUA("konqueror") ||\r
-  _jmolTestUA("webkit") ||\r
-  _jmolTestUA("omniweb") ||\r
-  _jmolTestUA("opera") ||\r
-  _jmolTestUA("webtv") ||\r
-  _jmolTestUA("icab") ||\r
-  _jmolTestUA("msie") ||\r
-  (_jmol.ua.indexOf("compatible") < 0 && _jmolTestUA("mozilla")); //Netscape, Mozilla, Seamonkey, Firefox and anything assimilated\r
-  \r
-  _jmolTestOS("linux") ||\r
-  _jmolTestOS("unix") ||\r
-  _jmolTestOS("mac") ||\r
-  _jmolTestOS("win");\r
-\r
-  /* not used:\r
-       isNetscape47Win = (os == "win" && browser == "mozilla" &&\r
-                     browserVersion >= 4.78 && browserVersion <= 4.8);\r
-       */\r
-\r
-  if (os == "win") {\r
-    isBrowserCompliant = hasGetElementById;\r
-  } else if (os == "mac") { // mac is the problem child :-(\r
-    if (browser == "mozilla" && browserVersion >= 5) {\r
-      // miguel 2004 11 17\r
-      // checking the plugins array does not work because\r
-      // Netscape 7.2 OS X still has Java 1.3.1 listed even though\r
-      // javaplugin.sf.net is installed to upgrade to 1.4.2\r
-      eval("try {var v = java.lang.System.getProperty('java.version');" +\r
-           " _jmol.isBrowserCompliant = v >= '1.4.2';" +\r
-           " } catch (e) { }");\r
-    } else if (browser == "opera" && browserVersion <= 7.54) {\r
-      isBrowserCompliant = false;\r
-    } else {\r
-      isBrowserCompliant = hasGetElementById &&\r
-        !((browser == "msie") ||\r
-          (browser == "webkit" && browserVersion < 125.12));\r
-    }\r
-  } else if (os == "linux" || os == "unix") {\r
-    if (browser == "konqueror" && browserVersion <= 3.3)\r
-      isBrowserCompliant = false;\r
-    else\r
-      isBrowserCompliant = hasGetElementById;\r
-  } else { // other OS\r
-    isBrowserCompliant = hasGetElementById;\r
-  }\r
-\r
-  // possibly more checks in the future for this\r
-  isJavaCompliant = isJavaEnabled;\r
-\r
-  isFullyCompliant = isBrowserCompliant && isJavaCompliant;\r
-\r
-  useIEObject = (os == "win" && browser == "msie" && browserVersion >= 5.5);\r
-  useHtml4Object =\r
-   (browser == "mozilla" && browserVersion >= 5) ||\r
-   (browser == "opera" && browserVersion >= 8) ||\r
-   (browser == "webkit" && browserVersion >= 412.2);\r
- try {\r
-  if (top.location.search.indexOf("JMOLJAR=")>=0)\r
-    jmoljar = top.location.search.split("JMOLJAR=")[1].split("&")[0];\r
- } catch(e) {\r
-  // can't access top.location\r
- }\r
- try {\r
-  useNoApplet = (top.location.search.indexOf("NOAPPLET")>=0);\r
- } catch(e) {\r
-  // can't access top.document\r
- }\r
-}\r
-\r
-function jmolSetMemoryMb(nMb) {\r
-  _jmol.java_arguments = "-Xmx" + Math.round(nMb) + "m"\r
-}\r
-\r
-function jmolSetParameter(name,value) {\r
-  _jmol.params[name] = value\r
-}\r
-\r
-function jmolSetCallback(callbackName,funcName) {\r
-  _jmol.params[callbackName] = funcName\r
-}\r
-\r
- try {\r
-// note this is done FIRST, so it cannot override a setting done by the developer\r
-  if (top.location.search.indexOf("PARAMS=")>=0) {\r
-    var pars = unescape(top.location.search.split("PARAMS=")[1].split("&")[0]).split(";");\r
-    for (var i = 0; i < pars.length; i++) {\r
-      var p = pars[i].split(":");\r
-      jmolSetParameter(p[0],p[1]);\r
-    }\r
-  }\r
- } catch(e) {\r
-  // can't access top.location\r
- }\r
-\r
-function jmolSetSyncId(n) {\r
-  return _jmol.params["syncId"] = n\r
-}\r
-\r
-function jmolGetSyncId() {\r
-  return _jmol.params["syncId"]\r
-}\r
-\r
-function jmolSetLogLevel(n) {\r
-  _jmol.params.logLevel = ''+n;\r
-}\r
-\r
-       /*  AngelH, mar2007:\r
-               By (re)setting these variables in the webpage before calling jmolApplet(), \r
-               a custom message can be provided (e.g. localized for user's language) when no Java is installed.\r
-       */\r
-if (noJavaMsg==undefined) var noJavaMsg = \r
-        "You do not have Java applets enabled in your web browser, or your browser is blocking this applet.<br />\n" +\r
-        "Check the warning message from your browser and/or enable Java applets in<br />\n" +\r
-        "your web browser preferences, or install the Java Runtime Environment from <a href='http://www.java.com'>www.java.com</a><br />";\r
-if (noJavaMsg2==undefined) var noJavaMsg2 = \r
-        "You do not have the<br />\n" +\r
-        "Java Runtime Environment<br />\n" +\r
-        "installed for applet support.<br />\n" +\r
-        "Visit <a href='http://www.java.com'>www.java.com</a>";\r
-function _jmolApplet(size, inlineModel, script, nameSuffix) {\r
-       /*  AngelH, mar2007\r
-               Fixed percent / pixel business, to avoid browser errors:\r
-               put "px" where needed, avoid where not.\r
-\r
-           Bob Hanson, 1/2010\r
-               Fixed inline escape changing returns to |               \r
-       */\r
-  with (_jmol) {\r
-    nameSuffix == undefined && (nameSuffix = appletCount);\r
-    appletSuffixes.push(nameSuffix);\r
-    ++appletCount;\r
-    script || (script = "select *");\r
-    var sz = _jmolGetAppletSize(size);\r
-    var widthAndHeight = " width='" + sz[0] + "' height='" + sz[1] + "' ";\r
-    var tHeader, tFooter;\r
-    codebase || jmolInitialize(".");\r
-    if (useIEObject || useHtml4Object) {\r
-      params.archive = archivePath;\r
-      params.mayscript = 'true';\r
-      params.codebase = codebase;\r
-      params.code = 'JmolApplet';\r
-      tHeader = \r
-        "<object name='jmolApplet" + nameSuffix +\r
-        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +\r
-                               widthAndHeight + "\n";\r
-      tFooter = "</object>";\r
-    }\r
-    if (java_arguments)\r
-      params.java_arguments = java_arguments;\r
-    if (useIEObject) { // use MSFT IE6 object tag with .cab file reference\r
-      tHeader += " classid='" + windowsClassId + "'\n" +\r
-      (windowsCabUrl ? " codebase='" + windowsCabUrl + "'\n" : "") + ">\n";\r
-    } else if (useHtml4Object) { // use HTML4 object tag\r
-      tHeader += " type='application/x-java-applet'\n>\n";\r
-                               /*      " classid='java:JmolApplet'\n" +        AH removed this\r
-                                 Chromium Issue 62076:         Java Applets using an <object> with a classid paramater don't load.\r
-                                       http://code.google.com/p/chromium/issues/detail?id=62076\r
-                                       They say this is the correct behavior according to the spec, and there's no indication at this point \r
-                                       that WebKit will be changing the handling, so eventually Safari will acquire this behavior too.\r
-                                       Removing the classid parameter seems to be well tolerated by all browsers (even IE!).\r
-                               */\r
-    } else { // use applet tag\r
-      tHeader = \r
-        "<applet name='jmolApplet" + nameSuffix +\r
-        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +\r
-                               widthAndHeight + "\n" +\r
-        " code='JmolApplet'" +\r
-        " archive='" + archivePath + "' codebase='" + codebase + "'\n" +\r
-        " mayscript='true'>\n";\r
-      tFooter = "</applet>";\r
-    }\r
-    var visitJava;\r
-    if (useIEObject || useHtml4Object) {\r
-               var szX = "width:" + sz[0]\r
-               if ( szX.indexOf("%")==-1 ) szX+="px" \r
-               var szY = "height:" + sz[1]\r
-               if ( szY.indexOf("%")==-1 ) szY+="px" \r
-      visitJava =\r
-        "<p style='background-color:yellow; color:black; " +\r
-               szX + ";" + szY + ";" +\r
-        // why doesn't this vertical-align work?\r
-       "text-align:center;vertical-align:middle;'>\n" +\r
-               noJavaMsg +\r
-        "</p>";\r
-    } else {\r
-      visitJava =\r
-        "<table bgcolor='yellow'><tr>" +\r
-        "<td align='center' valign='middle' " + widthAndHeight + "><font color='black'>\n" +\r
-               noJavaMsg2 +\r
-        "</font></td></tr></table>";\r
-    }\r
-    params.loadInline = (inlineModel ? inlineModel : "");\r
-    params.script = (script ? _jmolSterilizeScript(script) : "");\r
-    var t = tHeader + _jmolParams() + visitJava + tFooter;\r
-    jmolSetTarget(nameSuffix);\r
-    ready["jmolApplet" + nameSuffix] = false;\r
-    if (_jmol.debugAlert)\r
-      alert(t);\r
-    return _jmolDocumentWrite(t);\r
-  }\r
-}\r
-\r
-function _jmolParams() {\r
- var t = "";\r
- for (var i in _jmol.params)\r
-       if(_jmol.params[i]!="")\r
-                t+="  <param name='"+i+"' value='"+_jmol.params[i]+"' />\n";\r
- return t\r
-}\r
-\r
-function _jmolInitCheck() {\r
-  if (_jmol.initChecked)\r
-    return;\r
-  _jmol.initChecked = true;\r
-  jmolInitialize(defaultdir, defaultjar)\r
-}\r
-\r
-function _jmolCheckBrowser() {\r
-  with (_jmol) {\r
-    if (browserChecked)\r
-      return;\r
-    browserChecked = true;\r
-  \r
-    if (isFullyCompliant)\r
-      return true;\r
-\r
-    if (checkBrowserAction == "redirect")\r
-      location.href = checkBrowserUrlOrMessage;\r
-    else if (checkBrowserAction == "popup")\r
-      _jmolPopup(checkBrowserUrlOrMessage);\r
-    else {\r
-      var msg = checkBrowserUrlOrMessage;\r
-      if (msg == null)\r
-        msg = "Your web browser is not fully compatible with Jmol\n\n" +\r
-              "browser: " + browser +\r
-              "   version: " + browserVersion +\r
-              "   os: " + os +\r
-              "   isBrowserCompliant: " + isBrowserCompliant +\r
-              "   isJavaCompliant: " + isJavaCompliant +\r
-              "\n\n" + ua;\r
-      alert(msg);\r
-    }\r
-  }\r
-  return false;\r
-}\r
-\r
-function jmolSetXHTML(id) {\r
-       _jmol.isXHTML = true\r
-       _jmol.XhtmlElement = null\r
-       _jmol.XhtmlAppendChild = false\r
-       if (id){\r
-               _jmol.XhtmlElement = document.getElementById(id)\r
-               _jmol.XhtmlAppendChild = true\r
-       }\r
-}\r
-\r
-function _jmolDocumentWrite(text) {\r
-       if (_jmol.currentDocument) {\r
-               if (_jmol.isXHTML && !_jmol.XhtmlElement) {\r
-                       var s = document.getElementsByTagName("script")\r
-                       _jmol.XhtmlElement = s.item(s.length - 1)\r
-                       _jmol.XhtmlAppendChild = false\r
-               }\r
-               if (_jmol.XhtmlElement) {\r
-                       _jmolDomDocumentWrite(text)\r
-               } else {\r
-                       _jmol.currentDocument.write(text);\r
-               }\r
-       }\r
-       return text;\r
-}\r
-\r
-function _jmolDomDocumentWrite(data) {\r
-       var pt = 0\r
-       var Ptr = []\r
-       Ptr[0] = 0\r
-       while (Ptr[0] < data.length) {\r
-               var child = _jmolGetDomElement(data, Ptr)\r
-               if (!child)break\r
-               if (_jmol.XhtmlAppendChild)\r
-                       _jmol.XhtmlElement.appendChild(child)\r
-               else\r
-                       _jmol.XhtmlElement.parentNode.insertBefore(child, _jmol.XhtmlElement); \r
-       }\r
-}\r
-function _jmolGetDomElement(data, Ptr, closetag, lvel) {\r
-       var e = document.createElement("span")\r
-       e.innerHTML = data\r
-       Ptr[0] = data.length\r
-       return e\r
-\r
-//unnecessary?\r
-\r
-       closetag || (closetag = "")\r
-       lvel || (lvel = 0)\r
-       var pt0 = Ptr[0]\r
-       var pt = pt0\r
-       while (pt < data.length && data.charAt(pt) != "<") pt++\r
-       if (pt != pt0) {\r
-               var text = data.substring(pt0, pt)\r
-               Ptr[0] = pt\r
-               return document.createTextNode(text)\r
-       }       \r
-       pt0 = ++pt\r
-       var ch\r
-       while (pt < data.length && "\n\r\t >".indexOf(ch = data.charAt(pt)) < 0) pt++\r
-       var tagname = data.substring(pt0, pt)\r
-       var e = (tagname == closetag  || tagname == "/" ? "" \r
-               : document.createElementNS ? document.createElementNS('http://www.w3.org/1999/xhtml', tagname)\r
-               : document.createElement(tagname));\r
-       if (ch == ">") {\r
-               Ptr[0] = ++pt\r
-               return e\r
-       }\r
-       while (pt < data.length && (ch = data.charAt(pt)) != ">") {\r
-               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++\r
-               pt0 = pt\r
-               while (pt < data.length && "\n\r\t =/>".indexOf(ch = data.charAt(pt)) < 0) pt++\r
-               var attrname = data.substring(pt0, pt).toLowerCase()\r
-               if (attrname && ch != "=") \r
-                       e.setAttribute(attrname, "true")\r
-               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++\r
-               if (ch == "/") {\r
-                       Ptr[0] = pt + 2\r
-                       return e\r
-               } else if (ch == "=") {\r
-                       var quote = data.charAt(++pt)\r
-                       pt0 = ++pt\r
-                       while (pt < data.length && (ch = data.charAt(pt)) != quote) pt++\r
-                       var attrvalue = data.substring(pt0, pt)\r
-                       e.setAttribute(attrname, attrvalue)\r
-                       pt++\r
-               }\r
-       }\r
-       Ptr[0] = ++pt\r
-       while (Ptr[0] < data.length) {\r
-               var child = _jmolGetDomElement(data, Ptr, "/" + tagname, lvel+1)\r
-               if (!child)break\r
-               e.appendChild(child)\r
-       }\r
-       return e\r
-}\r
-\r
-function _jmolPopup(url) {\r
-  var popup = window.open(url, "JmolPopup",\r
-                          "left=150,top=150,height=400,width=600," +\r
-                          "directories=yes,location=yes,menubar=yes," +\r
-                          "toolbar=yes," +\r
-                          "resizable=yes,scrollbars=yes,status=yes");\r
-  if (popup.focus)\r
-    poup.focus();\r
-}\r
-\r
-function _jmolReadyCallback(name) {\r
-  if (_jmol.debugAlert)\r
-    alert(name + " is ready");\r
-  _jmol.ready["" + name] = true;\r
-}\r
-\r
-function _jmolSterilizeScript(script) {\r
-  script = script.replace(/'/g, "&#39;");\r
-  if (_jmol.debugAlert)\r
-    alert("script:\n" + script);\r
-  return script;\r
-}\r
-\r
-function _jmolSterilizeInline(model) {\r
-  model = model.replace(/\r|\n|\r\n/g, (model.indexOf("|") >= 0 ? "\\/n" : "|")).replace(/'/g, "&#39;");\r
-  if (_jmol.debugAlert)\r
-    alert("inline model:\n" + model);\r
-  return model;\r
-}\r
-\r
-function _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {\r
-  ++_jmol.radioCount;\r
-  groupName != undefined && groupName != null || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));\r
-  if (!script)\r
-    return "";\r
-  labelHtml != undefined && labelHtml != null || (labelHtml = script.substring(0, 32));\r
-  separatorHtml || (separatorHtml = "")\r
-  var scriptIndex = _jmolAddScript(script);\r
-  var eospan = "</span>"\r
-  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" \r
-       + groupName + "' id='"+id+"' type='radio' onclick='_jmolClick(this," +\r
-         scriptIndex + _jmol.targetText + ");return true;' onmouseover='_jmolMouseOver(" +\r
-         scriptIndex + ");return true;' onmouseout='_jmolMouseOut()' " +\r
-        (isChecked ? "checked='true' " : "") + _jmol.radioCssText + " />"\r
-  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {\r
-       t += eospan\r
-       eospan = "";\r
-  }\r
-  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan + separatorHtml;\r
-\r
-  return t;\r
-}\r
-\r
-function _jmolFindApplet(target) {\r
-  // first look for the target in the current window\r
-  var applet = _jmolFindAppletInWindow(_jmol.appletWindow != null ? _jmol.appletWindow : window, target);\r
-  // THEN look for the target in child frames\r
-  if (applet == undefined)\r
-    applet = _jmolSearchFrames(window, target);\r
-  // FINALLY look for the target in sibling frames\r
-  if (applet == undefined)\r
-    applet = _jmolSearchFrames(top, target); // look starting in top frame\r
-  return applet;\r
-}\r
-\r
-function _jmolGetApplet(targetSuffix){\r
- var target = "jmolApplet" + (targetSuffix ? targetSuffix : "0");\r
- var applet = _jmolFindApplet(target);\r
- if (applet) return applet\r
- _jmol.alerted || alert("could not find applet " + target);\r
- _jmol.alerted = true;\r
- return null\r
-}\r
-\r
-function _jmolSearchFrames(win, target) {\r
-  var applet;\r
-  var frames = win.frames;\r
-  if (frames && frames.length) { // look in all the frames below this window\r
-   try{\r
-    for (var i = 0; i < frames.length; ++i) {\r
-      applet = _jmolSearchFrames(frames[i], target);\r
-      if (applet)\r
-        return applet;\r
-    }\r
-   }catch(e) {\r
-       if (_jmol.debugAlert)\r
-               alert("Jmol.js _jmolSearchFrames cannot access " + win.name + ".frame[" + i + "] consider using jmolSetAppletWindow()") \r
-   }\r
-  }\r
-  return applet = _jmolFindAppletInWindow(win, target)\r
-}\r
-\r
-function _jmolFindAppletInWindow(win, target) {\r
-    var doc = win.document;\r
-               if (doc.getElementById(target))\r
-      return doc.getElementById(target);\r
-    else if (doc.applets)\r
-      return doc.applets[target];\r
-    else\r
-      return doc[target]; \r
-}\r
-\r
-function _jmolAddScript(script) {\r
-  if (!script)\r
-    return 0;\r
-  var index = _jmol.scripts.length;\r
-  _jmol.scripts[index] = script;\r
-  return index;\r
-}\r
-\r
-function _jmolClick(elementClicked, scriptIndex, targetSuffix) {\r
-  _jmol.element = elementClicked;\r
-  _jmolScriptExecute(elementClicked, _jmol.scripts[scriptIndex], targetSuffix);\r
-}\r
-\r
-function _jmolMenuSelected(menuObject, targetSuffix) {\r
-  var scriptIndex = menuObject.value;\r
-  if (scriptIndex != undefined) {\r
-    _jmolScriptExecute(menuObject, _jmol.scripts[scriptIndex], targetSuffix);\r
-    return;\r
-  }\r
-  var len = menuObject.length;\r
-  if (typeof len == "number") {\r
-    for (var i = 0; i < len; ++i) {\r
-      if (menuObject[i].selected) {\r
-        _jmolClick(menuObject[i], menuObject[i].value, targetSuffix);\r
-       return;\r
-      }\r
-    }\r
-  }\r
-  alert("?Que? menu selected bug #8734");\r
-}\r
-\r
-\r
-_jmol.checkboxMasters = {};\r
-_jmol.checkboxItems = {};\r
-\r
-function jmolSetCheckboxGroup(chkMaster,chkBox) {\r
-       var id = chkMaster;\r
-       if(typeof(id)=="number")id = "jmolCheckbox" + id;\r
-       chkMaster = document.getElementById(id);\r
-       if (!chkMaster)alert("jmolSetCheckboxGroup: master checkbox not found: " + id);\r
-       var m = _jmol.checkboxMasters[id] = {};\r
-       m.chkMaster = chkMaster;\r
-       m.chkGroup = {};\r
-       for (var i = 1; i < arguments.length; i++){\r
-               var id = arguments[i];\r
-               if(typeof(id)=="number")id = "jmolCheckbox" + id;\r
-               checkboxItem = document.getElementById(id);\r
-               if (!checkboxItem)alert("jmolSetCheckboxGroup: group checkbox not found: " + id);\r
-               m.chkGroup[id] = checkboxItem;\r
-               _jmol.checkboxItems[id] = m;\r
-       }\r
-}\r
-\r
-function _jmolNotifyMaster(m){\r
-       //called when a group item is checked\r
-       var allOn = true;\r
-       var allOff = true;\r
-       for (var chkBox in m.chkGroup){\r
-               if(m.chkGroup[chkBox].checked)\r
-                       allOff = false;\r
-               else\r
-                       allOn = false;\r
-       }\r
-       if (allOn)m.chkMaster.checked = true;   \r
-       if (allOff)m.chkMaster.checked = false;\r
-       if ((allOn || allOff) && _jmol.checkboxItems[m.chkMaster.id])\r
-               _jmolNotifyMaster(_jmol.checkboxItems[m.chkMaster.id])\r
-}\r
-\r
-function _jmolNotifyGroup(m, isOn){\r
-       //called when a master item is checked\r
-       for (var chkBox in m.chkGroup){\r
-               var item = m.chkGroup[chkBox]\r
-               item.checked = isOn;\r
-               if (_jmol.checkboxMasters[item.id])\r
-                       _jmolNotifyGroup(_jmol.checkboxMasters[item.id], isOn)\r
-       }\r
-}\r
-\r
-function _jmolCbClick(ckbox, whenChecked, whenUnchecked, targetSuffix) {\r
-  _jmol.control = ckbox\r
-  _jmolClick(ckbox, ckbox.checked ? whenChecked : whenUnchecked, targetSuffix);\r
-  if(_jmol.checkboxMasters[ckbox.id])\r
-       _jmolNotifyGroup(_jmol.checkboxMasters[ckbox.id], ckbox.checked)\r
-  if(_jmol.checkboxItems[ckbox.id])\r
-       _jmolNotifyMaster(_jmol.checkboxItems[ckbox.id])\r
-}\r
-\r
-function _jmolCbOver(ckbox, whenChecked, whenUnchecked) {\r
-  window.status = _jmol.scripts[ckbox.checked ? whenUnchecked : whenChecked];\r
-}\r
-\r
-function _jmolMouseOver(scriptIndex) {\r
-  window.status = _jmol.scripts[scriptIndex];\r
-}\r
-\r
-function _jmolMouseOut() {\r
-  window.status = " ";\r
-  return true;\r
-}\r
-\r
-function _jmolSetCodebase(codebase) {\r
-  _jmol.codebase = codebase ? codebase : ".";\r
-  if (_jmol.debugAlert)\r
-    alert("jmolCodebase=" + _jmol.codebase);\r
-}\r
-\r
-function _jmolOnloadResetForms() {\r
-  // must be evaluated ONLY once\r
-  _jmol.previousOnloadHandler = window.onload;\r
-  window.onload =\r
-  function() {\r
-    with (_jmol) {\r
-      if (buttonCount+checkboxCount+menuCount+radioCount+radioGroupCount > 0) {\r
-        var forms = document.forms;\r
-        for (var i = forms.length; --i >= 0; )\r
-          forms[i].reset();\r
-      }\r
-      if (previousOnloadHandler)\r
-        previousOnloadHandler();\r
-    }\r
-  }\r
-}\r
-\r
-////////////////////////////////////\r
-/////extensions for getProperty/////\r
-////////////////////////////////////\r
-\r
-\r
-function _jmolEvalJSON(s,key){\r
- s=s+""\r
- if(!s)return []\r
- if(s.charAt(0)!="{"){\r
-       if(s.indexOf(" | ")>=0)s=s.replace(/\ \|\ /g, "\n")\r
-       return s\r
- }\r
- var A = eval("("+s+")")\r
- if(!A)return\r
- if(key && A[key])A=A[key]\r
- return A\r
-}\r
-\r
-function _jmolEnumerateObject(A,key){\r
- var sout=""\r
- if(typeof(A) == "string" && A!="null"){\r
-       sout+="\n"+key+"=\""+A+"\""\r
- }else if(!isNaN(A)||A==null){\r
-       sout+="\n"+key+"="+(A+""==""?"null":A)\r
- }else if(A.length){\r
-    sout+=key+"=[]"\r
-    for(var i=0;i<A.length;i++){\r
-       sout+="\n"\r
-       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){\r
-               sout+=_jmolEnumerateObject(A[i],key+"["+i+"]")\r
-       }else{\r
-               sout+=key+"["+i+"]="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])\r
-       }\r
-    }\r
- }else{\r
-    if(key != ""){\r
-       sout+=key+"={}"\r
-       key+="."\r
-    }\r
-    \r
-    for(var i in A){\r
-       sout+="\n"\r
-       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){\r
-               sout+=_jmolEnumerateObject(A[i],key+i)\r
-       }else{\r
-               sout+=key+i+"="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])\r
-       }\r
-    }\r
- } \r
- return sout\r
-}\r
-\r
-\r
-function _jmolSortKey0(a,b){\r
- return (a[0]<b[0]?1:a[0]>b[0]?-1:0)\r
-}\r
-\r
-function _jmolSortMessages(A){\r
- if(!A || typeof(A)!="object")return []\r
- var B = []\r
- for(var i=A.length-1;i>=0;i--)for(var j=0;j<A[i].length;j++)B[B.length]=A[i][j]\r
- if(B.length == 0) return\r
- B=B.sort(_jmolSortKey0)\r
- return B\r
-}\r
-\r
-/////////additional extensions //////////\r
-\r
-\r
-function _jmolDomScriptLoad(URL){\r
- //open(URL) //to debug\r
- _jmol.servercall=URL\r
- var node = document.getElementById("_jmolScriptNode")\r
- if (node && _jmol.browser!="msie"){\r
-    document.getElementsByTagName("HEAD")[0].removeChild(node)\r
-    node=null\r
- }\r
- if (node) {\r
-   node.setAttribute("src",URL)\r
- } else {\r
-   node=document.createElement("script")\r
-   node.setAttribute("id","_jmolScriptNode")\r
-   node.setAttribute("type","text/javascript")\r
-   node.setAttribute("src",URL)\r
-   document.getElementsByTagName("HEAD")[0].appendChild(node)\r
- }\r
-}\r
-\r
-\r
-function _jmolExtractPostData(url){\r
- S=url.split("&POST:")\r
- var s=""\r
- for(var i=1;i<S.length;i++){\r
-       KV=S[i].split("=")\r
-       s+="&POSTKEY"+i+"="+KV[0]\r
-       s+="&POSTVALUE"+i+"="+KV[1]\r
- }\r
- return "&url="+escape(S[0])+s\r
-}\r
-\r
-function _jmolLoadModel(targetSuffix,remoteURL,array,isError,errorMessage){\r
- //called by server, but in client\r
- //overload this function to customize return\r
- _jmol.remoteURL=remoteURL\r
- isError && alert(errorMessage)\r
- jmolLoadInlineScript(array.join("\n"),_jmol.optionalscript,targetSuffix)\r
-}\r
-\r
-//////////user property/status functions/////////\r
-\r
-function jmolGetStatus(strStatus,targetSuffix){\r
- return _jmolSortMessages(jmolGetPropertyAsArray("jmolStatus",strStatus,targetSuffix))\r
-}\r
-\r
-function jmolGetPropertyAsArray(sKey,sValue,targetSuffix) {\r
- return _jmolEvalJSON(jmolGetPropertyAsJSON(sKey,sValue,targetSuffix),sKey)\r
-}\r
-\r
-function jmolGetPropertyAsString(sKey,sValue,targetSuffix) {\r
- var applet = _jmolGetApplet(targetSuffix);\r
- sValue == undefined && (sValue="");\r
- return (applet ? applet.getPropertyAsString(sKey,sValue) + "" : "")\r
-}\r
-\r
-function jmolGetPropertyAsJSON(sKey,sValue,targetSuffix) {\r
- sValue == undefined && (sValue = "")\r
- var applet = _jmolGetApplet(targetSuffix);\r
- try {\r
-  return (applet ? applet.getPropertyAsJSON(sKey,sValue) + "" : "")\r
- } catch(e) {\r
-  return ""\r
- }\r
-}\r
-\r
-function jmolGetPropertyAsJavaObject(sKey,sValue,targetSuffix) {\r
- sValue == undefined && (sValue = "")\r
- var applet = _jmolGetApplet(targetSuffix);\r
- return (applet ? applet.getProperty(sKey,sValue) : null)\r
-}\r
-\r
-\r
-function jmolDecodeJSON(s) {\r
- return _jmolEnumerateObject(_jmolEvalJSON(s),"")\r
-}\r
-\r
-\r
-///////// synchronous scripting ////////\r
-\r
-function jmolScriptWait(script, targetSuffix) {\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var Ret=jmolScriptWaitAsArray(script, targetSuffix)\r
-  var s = ""\r
-  for(var i=Ret.length;--i>=0;)\r
-  for(var j=0;j< Ret[i].length;j++)\r
-       s+=Ret[i][j]+"\n"\r
-  return s\r
-}\r
-\r
-function jmolScriptWaitOutput(script, targetSuffix) {\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var ret = ""\r
-  try{\r
-   if (script) {\r
-    _jmolCheckBrowser();\r
-    var applet=_jmolGetApplet(targetSuffix);\r
-    if (applet) ret += applet.scriptWaitOutput(script);\r
-   }\r
-  }catch(e){\r
-  }\r
- return ret;\r
-}\r
-\r
-function jmolEvaluate(molecularMath, targetSuffix) {\r
-\r
-  //carries out molecular math on a model\r
-\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var result = "" + jmolGetPropertyAsJavaObject("evaluate", molecularMath, targetSuffix);\r
-  var s = result.replace(/\-*\d+/,"")\r
-  if (s == "" && !isNaN(parseInt(result)))return parseInt(result);\r
-  var s = result.replace(/\-*\d*\.\d*/,"")\r
-  if (s == "" && !isNaN(parseFloat(result)))return parseFloat(result);\r
-  return result;\r
-}\r
-\r
-function jmolScriptEcho(script, targetSuffix) {\r
-  // returns a newline-separated list of all echos from a script\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var Ret=jmolScriptWaitAsArray(script, targetSuffix)\r
-  var s = ""\r
-  for(var i=Ret.length;--i>=0;)\r
-  for(var j=Ret[i].length;--j>=0;)\r
-        if (Ret[i][j][1] == "scriptEcho")s+=Ret[i][j][3]+"\n"\r
-  return s.replace(/ \| /g, "\n")\r
-}\r
-\r
-\r
-function jmolScriptMessage(script, targetSuffix) {\r
-  // returns a newline-separated list of all messages from a script, ending with "script completed\n"\r
-  targetSuffix == undefined && (targetSuffix="0")\r
-  var Ret=jmolScriptWaitAsArray(script, targetSuffix)\r
-  var s = ""\r
-  for(var i=Ret.length;--i>=0;)\r
-  for(var j=Ret[i].length;--j>=0;)\r
-        if (Ret[i][j][1] == "scriptStatus")s+=Ret[i][j][3]+"\n"\r
-  return s.replace(/ \| /g, "\n")\r
-}\r
-\r
-\r
-function jmolScriptWaitAsArray(script, targetSuffix) {\r
- var ret = ""\r
- try{\r
-  jmolGetStatus("scriptEcho,scriptMessage,scriptStatus,scriptError",targetSuffix)\r
-  if (script) {\r
-    _jmolCheckBrowser();\r
-    var applet=_jmolGetApplet(targetSuffix);\r
-    if (applet) ret += applet.scriptWait(script);\r
-    ret = _jmolEvalJSON(ret,"jmolStatus")\r
-    if(typeof ret == "object")\r
-       return ret\r
-  }\r
- }catch(e){\r
- }\r
-  return [[ret]]\r
-}\r
-\r
-\r
-\r
-////////////   save/restore orientation   /////////////\r
-\r
-function jmolSaveOrientation(id, targetSuffix) {  \r
- targetSuffix == undefined && (targetSuffix="0")\r
- return _jmol["savedOrientation"+id] = jmolGetPropertyAsArray("orientationInfo","info",targetSuffix).moveTo\r
-}\r
-\r
-function jmolRestoreOrientation(id, targetSuffix) {\r
- targetSuffix == undefined && (targetSuffix="0")\r
- var s=_jmol["savedOrientation"+id]\r
- if (!s || s == "")return\r
- s=s.replace(/1\.0/,"0")\r
- return jmolScriptWait(s,targetSuffix)\r
-}\r
-\r
-function jmolRestoreOrientationDelayed(id, delay, targetSuffix) {\r
- arguments.length < 2 && (delay=1)\r
- targetSuffix == undefined && (targetSuffix="0")\r
- var s=_jmol["savedOrientation"+id]\r
- if (!s || s == "")return\r
- s=s.replace(/1\.0/,delay)\r
- return jmolScriptWait(s,targetSuffix)\r
-}\r
-\r
-////////////  add parameter /////////////\r
-/*\r
- * for adding callbacks or other parameters. Use:\r
-\r
-   jmolSetDocument(0)\r
-   var s= jmolApplet(....)\r
-   s = jmolAppletAddParam(s,"messageCallback", "myFunctionName")\r
-   document.write(s)\r
-   jmolSetDocument(document) // if you want to then write buttons and such normally\r
\r
- */\r
-\r
-function jmolAppletAddParam(appletCode,name,value){\r
-  return (value == "" ? appletCode : appletCode.replace(/\<param/,"\n<param name='"+name+"' value='"+value+"' />\n<param"))\r
-}\r
-\r
-///////////////auto load Research Consortium for Structural Biology (RCSB) data ///////////\r
-\r
-function jmolLoadAjax_STOLAF_RCSB(fileformat,pdbid,optionalscript,targetSuffix){\r
-\r
- _jmol.thismodel || (_jmol.thismodel = "1crn")\r
- _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")\r
- _jmol.RCSBserver || (_jmol.RCSBserver="http://www.rcsb.org")\r
- _jmol.defaultURL_RCSB || (_jmol.defaultURL_RCSB=_jmol.RCSBserver+"/pdb/files/1CRN.CIF")\r
- fileformat || (fileformat="PDB")\r
- pdbid || (pdbid=prompt("Enter a 4-digit PDB ID:",_jmol.thismodel))\r
- if(!pdbid || pdbid.length != 4)return ""\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- var url=_jmol.defaultURL_RCSB.replace(/1CRN/g,pdbid.toUpperCase())\r
- fileformat=="CIF" || (url=url.replace(/CIF/,fileformat))\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thismodel=pdbid\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.thisurl=url\r
- _jmol.modelArray = []\r
- url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)\r
- _jmolDomScriptLoad(url)\r
- return url\r
-}\r
-\r
-\r
-///////////////auto load NIH CACTVS data -- compound name or SMILES ///////////\r
-\r
-function jmolLoadAjax_STOLAF_NIH(compoundid,optionalscript,targetSuffix){\r
- _jmol.thismodel || (_jmol.thismodel = "aspirin")\r
- _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")\r
- _jmol.defaultURL_NIH || (_jmol.defaultURL_NIH="http://cactus.nci.nih.gov/chemical/structure/FILE/file?format=sdf&get3d=True")\r
- compoundid || (compoundid=prompt("Enter a compound name or a SMILES string:",_jmol.thismodel))\r
- if(!compoundid)return ""\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- var url=_jmol.defaultURL_NIH.replace(/FILE/g,compoundid)\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thismodel=compoundid\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.thisurl=url\r
- _jmol.modelArray = []\r
- url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)\r
- _jmolDomScriptLoad(url)\r
- return url\r
-}\r
-\r
-\r
-/////////////// St. Olaf College AJAX server -- ANY URL ///////////\r
-\r
-function jmolLoadAjax_STOLAF_ANY(url, userid, optionalscript,targetSuffix){\r
- _jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm"\r
- _jmol.thisurlANY || (_jmol.thisurlANY = "http://www.stolaf.edu/depts/chemistry/mo/struc/data/ycp3-1.mol")\r
- url || (url=prompt("Enter any (uncompressed file) URL:", _jmol.thisurlANY))\r
- userid || (userid="0")\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.modelArray = []\r
- _jmol.thisurl = url\r
- url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)\r
- _jmolDomScriptLoad(url)\r
-}\r
-\r
-\r
-/////////////// Mineralogical Society of America (MSA) data /////////\r
-\r
-function jmolLoadAjax_MSA(key,value,optionalscript,targetSuffix){\r
-\r
- _jmol.thiskeyMSA || (_jmol.thiskeyMSA = "mineral")\r
- _jmol.thismodelMSA || (_jmol.thismodelMSA = "quartz")\r
- _jmol.ajaxURL_MSA || (_jmol.ajaxURL_MSA="http://rruff.geo.arizona.edu/AMS/result.php?mineral=quartz&viewing=ajaxjs")\r
- key || (key=prompt("Enter a field:", _jmol.thiskeyMSA))\r
- if(!key)return ""\r
- value || (value=prompt("Enter a "+key+":", _jmol.thismodelMSA))\r
- if(!value)return ""\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- optionalscript == 1 && (optionalscript='load "" {1 1 1}')\r
- var url=_jmol.ajaxURL_MSA.replace(/mineral/g,key).replace(/quartz/g,value)\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thiskeyMSA=key\r
- _jmol.thismodelMSA=value\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.thisurl=url\r
- _jmol.modelArray = []\r
- loadModel=_jmolLoadModel\r
- _jmolDomScriptLoad(url)\r
- return url\r
-}\r
-\r
-\r
-\r
-function jmolLoadAjaxJS(url, userid, optionalscript,targetSuffix){\r
- userid || (userid="0")\r
- targetSuffix || (targetSuffix="0")\r
- optionalscript || (optionalscript="")\r
- _jmol.optionalscript=optionalscript\r
- _jmol.thismodel=userid\r
- _jmol.thistargetsuffix=targetSuffix\r
- _jmol.modelArray = []\r
- _jmol.thisurl = url\r
- url+="&returnFunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix\r
- _jmolDomScriptLoad(url)\r
-}\r
-\r
-\r
-//// in case Jmol library has already been loaded:\r
-\r
-}catch(e){}\r
-\r
-///////////////moving atoms //////////////\r
-\r
-// HIGHLY experimental!!\r
-\r
-function jmolSetAtomCoord(i,x,y,z,targetSuffix){\r
-    _jmolCheckBrowser();\r
-      var applet=_jmolGetApplet(targetSuffix);\r
-      if (applet) applet.getProperty('jmolViewer').setAtomCoord(i,x,y,z)\r
-}\r
-\r
-function jmolSetAtomCoordRelative(i,x,y,z,targetSuffix){\r
-    _jmolCheckBrowser();\r
-      var applet=_jmolGetApplet(targetSuffix);\r
-      if (applet) applet.getProperty('jmolViewer').setAtomCoordRelative(i,x,y,z)\r
-}\r
-\r
-\r
-///////////////applet fake for testing buttons/////////////\r
-\r
-\r
-if(_jmol.useNoApplet){\r
-       jmolApplet = function(w){\r
-               var s="<table style='background-color:black' width="+w+"><tr height="+w+">"\r
-               +"<td align=center valign=center style='background-color:white'>"\r
-               +"Applet would be here"\r
-               +"<p><textarea id=fakeApplet rows=5 cols=50></textarea>"\r
-               +"</td></tr></table>"\r
-               return _jmolDocumentWrite(s)\r
-       }\r
-\r
-       _jmolFindApplet = function(){return jmolApplet0}\r
-\r
-       jmolApplet0 = {\r
-        script: function(script){document.getElementById("fakeApplet").value="\njmolScript:\n"+script}\r
-       ,scriptWait: function(script){document.getElementById("fakeApplet").value="\njmolScriptWait:\n"+script} \r
-       ,loadInline: function(data,script){document.getElementById("fakeApplet").value="\njmolLoadInline data:\n"+data+"\n\nscript:\n"+script}\r
-       }\r
-}\r
-\r
-\r
-///////////////////////////////////////////\r
-\r
-  //  This should no longer be needed, jmolResizeApplet() is better; kept for backwards compatibility\r
-  /*\r
-       Resizes absolutely (pixels) or by percent of window (w or h 0.5 means 50%).\r
-       targetSuffix is optional and defaults to zero (first applet in page).\r
-       Both w and h are optional, but needed if you want to use targetSuffix.\r
-               h defaults to w\r
-               w defaults to 100% of window\r
-       If either w or h is between 0 and 1, then it is taken as percent/100.\r
-       If either w or h is greater than 1, then it is taken as a size (pixels). \r
-       */\r
-function jmolResize(w,h,targetSuffix) {\r
- _jmol.alerted = true;\r
- var percentW = (!w ? 100 : w <= 1  && w > 0 ? w * 100 : 0);\r
- var percentH = (!h ? percentW : h <= 1 && h > 0 ? h * 100 : 0);\r
- if (_jmol.browser=="msie") {\r
-   var width=document.body.clientWidth;\r
-   var height=document.body.clientHeight;\r
- } else {\r
-   var netscapeScrollWidth=15;\r
-   var width=window.innerWidth - netscapeScrollWidth;\r
-   var height=window.innerHeight-netscapeScrollWidth;\r
- }\r
- var applet = _jmolGetApplet(targetSuffix);\r
- if(!applet)return;\r
- applet.style.width = (percentW ? width * percentW/100 : w)+"px";\r
- applet.style.height = (percentH ? height * percentH/100 : (h ? h : w))+"px";\r
- //title=width +  " " + height + " " + (new Date());\r
-}\r
-\r
-// 13 Jun 09 -- makes jmolResize() obsolete  (kept for backwards compatibility)\r
-function jmolResizeApplet(size,targetSuffix) {\r
- // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()]\r
- //  Special case: an empty value for width or height is accepted, meaning no change in that dimension.\r
- _jmol.alerted = true;\r
- var applet = _jmolGetApplet(targetSuffix);\r
- if(!applet)return;\r
- var sz = _jmolGetAppletSize(size, "px");\r
- sz[0] && (applet.style.width = sz[0]);\r
- sz[1] && (applet.style.height = sz[1]);\r
-}\r
-\r
-function _jmolGetAppletSize(size, units) {\r
-       /* Accepts single number or 2-value array, each one can be one of:\r
-          percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.)\r
-          [width, height] array of strings is returned, with units added if specified.\r
-          Percent is relative to container div or element (which should have explicitly set size).\r
-       */\r
-  var width, height;\r
-  if ( (typeof size) == "object" && size != null ) {\r
-    width = size[0]; height = size[1];\r
-  } else {\r
-    width = height = size;\r
-  }\r
-  return [_jmolFixDim(width, units), _jmolFixDim(height, units)];\r
-}\r
-\r
-function _jmolFixDim(x, units) {\r
-  var sx = "" + x;\r
-  return (sx.length == 0 ? (units ? "" : _jmol.allowedJmolSize[2])\r
-       : sx.indexOf("%") == sx.length-1 ? sx \r
-       : (x = parseFloat(x)) <= 1 && x > 0 ? x * 100 + "%"\r
-       : (isNaN(x = Math.floor(x)) ? _jmol.allowedJmolSize[2]\r
-               : x < _jmol.allowedJmolSize[0] ? _jmol.allowedJmolSize[0]\r
-           : x > _jmol.allowedJmolSize[1] ? _jmol.allowedJmolSize[1] \r
-        : x) + (units ? units : ""));\r
-}\r
-\r
-\r
-\r
-\r
+/* Jmol 12.0 script library Jmol.js 9:48 PM 1/31/2011 Bob Hanson
+
+ checkbox heirarchy -- see http://chemapps.stolaf.edu/jmol/docs/examples-11/check.htm
+
+    based on:
+ *
+ * Copyright (C) 2004-2005  Miguel, Jmol Development, www.jmol.org
+ *
+ * Contact: hansonr@stolaf.edu
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ *  02111-1307  USA.
+ */
+
+// for documentation see www.jmol.org/jslibrary
+
+try{if(typeof(_jmol)!="undefined")exit()
+
+// place "?NOAPPLET" on your command line to check applet control action with a textarea
+// place "?JMOLJAR=xxxxx" to use a specific jar file
+
+// bob hanson -- jmolResize(w,h) -- resizes absolutely or by percent (w or h 0.5 means 50%)
+//    angel herraez -- update of jmolResize(w,h,targetSuffix) so it is not tied to first applet
+// bob hanson -- jmolEvaluate -- evaluates molecular math 8:37 AM 2/23/2007
+// bob hanson -- jmolScriptMessage -- returns all "scriptStatus" messages 8:37 AM 2/23/2007
+// bob hanson -- jmolScriptEcho -- returns all "scriptEcho" messages 8:37 AM 2/23/2007
+// bob hanson -- jmolScriptWait -- 11:31 AM 5/2/2006
+// bob hanson -- remove trailing separatorHTML in radio groups -- 12:18 PM 5/6/2006
+// bob hanson -- adds support for dynamic DOM script nodes 7:04 AM 5/19/2006
+// bob hanson -- adds try/catch for wiki - multiple code passes 7:05 AM 5/19/2006
+// bob hanson -- auto-initiates to defaultdir/defaultjar -- change as desired.
+// bob hanson -- adding save/restore orientation w/ and w/o delay 11:49 AM 5/25/2006
+// bob hanson -- adding AjaxJS service 11:16 AM 6/3/2006
+// bob hanson -- fix for iframes not available for finding applet
+// bob hanson -- added applet fake ?NOAPPLET URL flag
+// bob hanson -- added jmolSetCallback(calbackName, funcName) 3:32 PM 6/13/2006
+//                     used PRIOR to jmolApplet() or jmolAppletInline()
+//               added 4th array element in jmolRadioGroup -- title
+//               added <span> and id around link, checkbox, radio, menu
+//               fixing AJAX loads for MSIE/Opera-Mozilla incompatibility
+//            -- renamed Jmol-11.js from Jmol-new.js; JmolApplet.jar from JmolAppletProto.jar
+//              renamed Jmol.js for Jmol 11 distribution
+//            -- modified jmolRestoreOrientation() to be immediate, no 1-second delay
+// bob hanson -- jmolScriptWait always returns a string -- 11:23 AM 9/16/2006
+// bh         -- jmolCommandInput()
+// bh         -- jmolSetTranslation(TF) -- forces translation even if there might be message callback issues
+// bh         -- minor fixes suggested by Angel
+// bh         -- adds jmolSetSyncId() and jmolGetSyncId()
+// bh 3/2008  -- adds jmolAppendInlineScript() and jmolAppendInlineArray()
+// bh 3/2008  -- fixes IE7 bug in relation to jmolLoadInlineArray()
+// bh 6/2008  -- adds jmolSetAppletWindow()
+// Angel H. 6/2008  -- added html <label> tags to checkboxes and radio buttons [in jmolCheckbox() and _jmolRadio() functions]
+// bh 7/2008  -- code fix "for(i..." not "for(var i..."
+// bh 12/2008 -- jmolLoadInline, jmolLoadInlineArray, jmolLoadInlineScript, jmolAppendInlineScript, jmolAppendInlineArray all return error message or null (Jmol 11.7.16)
+// bh 12/2008 -- jmolScriptWaitOutput() -- waits for script to complete and delivers output normally sent to console
+
+// bh 5/2009  -- Support for XHTML using jmolSetXHTML(id)
+// ah & bh 6/2009 -- New jmolResizeApplet() more flexible, similar to jmolApplet() size syntax
+// bh 11/2009 -- care in accessing top.document
+// bh 12/2009 -- added jmolSetParameter(name, value)
+// bh 12/2009 -- added PARAMS=name:value;name:value;name:value... for command line
+// bh 12/2009 -- overhaul of target checking
+// bh 1/2010  -- all _xxxx() methods ALWAYS have complete argument list
+// bh 1/2010  -- adds option to run a JavaScript function from any Jmol control. 
+//               This is accomplished by passing an array rather than a script:
+//               jmolHref([myfunc,"my param 1", "my param 2"], "testing")
+//               function myfunc(jmolControlObject, [myfunc,"my param 1", "my param 2"], target){...}
+//               and allows much more flexibility with responding to controls
+// bh 4/2010  -- added jmolSetMemoryMb(nMb)
+// ah 1/2011  -- wider detection of browsers; more browsers now use the object tag instead of the applet tag; 
+//               fix of object tag (removed classid) accounts for change of behavior in Chrome
+// bh 3/2011  -- added jmolLoadAjax_STOLAF_NIH
+
+var defaultdir = "."
+var defaultjar = "JmolApplet.jar"
+
+
+// Note added 12:41 PM 9/21/2008 by Bob Hanson, hansonr@stolaf.edu:
+
+// JMOLJAR=xxxxx.jar on the URL for this page will override
+// the JAR file specified in the jmolInitialize() call.
+
+// The idea is that it can be very useful to test a web page with different JAR files
+// Or for an expert user to substitute a signed applet for an unsigned one
+// so as to use a broader range of models or to create JPEG files, for example.
+
+// If the JAR file is not in the current directory (has any sort of "/" in its name)
+// then the user is presented with a warning and asked whether it is OK to change Jar files.
+// The default action, if the user just presses "OK" is to NOT allow the change. 
+// The user must type the word "yes" in the prompt box for the change to be approved.
+
+// If you don't want people to be able to switch in their own JAR file on your page,
+// simply set this next line to read "var allowJMOLJAR = false".
+
+
+var undefined; // for IE 5 ... wherein undefined is undefined
+
+////////////////////////////////////////////////////////////////
+// Basic Scripting infrastruture
+////////////////////////////////////////////////////////////////
+
+function jmolInitialize(codebaseDirectory, fileNameOrUseSignedApplet) {
+  if (_jmol.initialized)
+    return;
+  _jmol.initialized = true;
+  if(_jmol.jmoljar) {
+    var f = _jmol.jmoljar;
+    if (f.indexOf("/") >= 0) {
+      alert ("This web page URL is requesting that the applet used be " + f + ". This is a possible security risk, particularly if the applet is signed, because signed applets can read and write files on your local machine or network.")
+      var ok = prompt("Do you want to use applet " + f + "? ","yes or no")
+      if (ok == "yes") {
+        codebaseDirectory = f.substring(0, f.lastIndexOf("/"));
+        fileNameOrUseSignedApplet = f.substring(f.lastIndexOf("/") + 1);
+      } else {
+       _jmolGetJarFilename(fileNameOrUseSignedApplet);
+        alert("The web page URL was ignored. Continuing using " + _jmol.archivePath + ' in directory "' + codebaseDirectory + '"');
+      }
+    } else {
+      fileNameOrUseSignedApplet = f;
+    }
+  }
+  _jmolSetCodebase(codebaseDirectory);
+  _jmolGetJarFilename(fileNameOrUseSignedApplet);
+  _jmolOnloadResetForms();
+}
+
+function jmolSetTranslation(TF) {
+  _jmol.params.doTranslate = ''+TF;
+}
+
+function _jmolGetJarFilename(fileNameOrFlag) {
+  _jmol.archivePath =
+    (typeof(fileNameOrFlag) == "string"  ? fileNameOrFlag : (fileNameOrFlag ?  "JmolAppletSigned" : "JmolApplet") + "0.jar");
+}
+
+function jmolSetDocument(doc) {
+  _jmol.currentDocument = doc;
+}
+
+function jmolSetAppletColor(boxbgcolor, boxfgcolor, progresscolor) {
+  _jmolInitCheck();
+  _jmol.params.boxbgcolor = boxbgcolor;
+  if (boxfgcolor)
+    _jmol.params.boxfgcolor = boxfgcolor
+  else if (boxbgcolor == "white" || boxbgcolor == "#FFFFFF")
+    _jmol.params.boxfgcolor = "black";
+  else
+    _jmol.params.boxfgcolor = "white";
+  if (progresscolor)
+    _jmol.params.progresscolor = progresscolor;
+  if (_jmol.debugAlert)
+    alert(" boxbgcolor=" + _jmol.params.boxbgcolor +
+          " boxfgcolor=" + _jmol.params.boxfgcolor +
+          " progresscolor=" + _jmol.params.progresscolor);
+}
+
+function jmolSetAppletWindow(w) {
+  _jmol.appletWindow = w;
+}
+
+function jmolApplet(size, script, nameSuffix) {
+  _jmolInitCheck();
+  return _jmolApplet(size, null, script, nameSuffix);
+}
+
+////////////////////////////////////////////////////////////////
+// Basic controls
+////////////////////////////////////////////////////////////////
+
+// undefined means it wasn't there; null means it was explicitly listed as null (so as to skip it)
+
+function jmolButton(script, label, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolButton" + _jmol.buttonCount);
+  label != undefined && label != null || (label = script.substring(0, 32));
+  ++_jmol.buttonCount;
+  var scriptIndex = _jmolAddScript(script);
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='button' name='" + id + "' id='" + id +
+          "' value='" + label +
+          "' onclick='_jmolClick(this," + scriptIndex + _jmol.targetText +
+          ")' onmouseover='_jmolMouseOver(" + scriptIndex +
+          ");return true' onmouseout='_jmolMouseOut()' " +
+          _jmol.buttonCssText + " /></span>";
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolCheckbox(scriptWhenChecked, scriptWhenUnchecked,
+                      labelHtml, isChecked, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolCheckbox" + _jmol.checkboxCount);
+  ++_jmol.checkboxCount;
+  if (scriptWhenChecked == undefined || scriptWhenChecked == null ||
+      scriptWhenUnchecked == undefined || scriptWhenUnchecked == null) {
+    alert("jmolCheckbox requires two scripts");
+    return;
+  }
+  if (labelHtml == undefined || labelHtml == null) {
+    alert("jmolCheckbox requires a label");
+    return;
+  }
+  var indexChecked = _jmolAddScript(scriptWhenChecked);
+  var indexUnchecked = _jmolAddScript(scriptWhenUnchecked);
+  var eospan = "</span>"
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input type='checkbox' name='" + id + "' id='" + id +
+          "' onclick='_jmolCbClick(this," +
+          indexChecked + "," + indexUnchecked + _jmol.targetText +
+          ")' onmouseover='_jmolCbOver(this," + indexChecked + "," +
+          indexUnchecked +
+          ");return true' onmouseout='_jmolMouseOut()' " +
+         (isChecked ? "checked='true' " : "")+ _jmol.checkboxCssText + " />" 
+  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {
+       t += eospan
+       eospan = "";
+  }
+  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan;
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolStartNewRadioGroup() {
+  ++_jmol.radioGroupCount;
+}
+
+function jmolRadioGroup(arrayOfRadioButtons, separatorHtml, groupName, id, title) {
+  /*
+
+    array: [radio1,radio2,radio3...]
+    where radioN = ["script","label",isSelected,"id","title"]
+
+  */
+
+  _jmolInitCheck();
+  var type = typeof arrayOfRadioButtons;
+  if (type != "object" || type == null || ! arrayOfRadioButtons.length) {
+    alert("invalid arrayOfRadioButtons");
+    return;
+  }
+  separatorHtml != undefined && separatorHtml != null || (separatorHtml = "&nbsp; ");
+  var len = arrayOfRadioButtons.length;
+  jmolStartNewRadioGroup();
+  groupName || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));
+  var t = "<span id='"+(id ? id : groupName)+"'>";
+  for (var i = 0; i < len; ++i) {
+    if (i == len - 1)
+      separatorHtml = "";
+    var radio = arrayOfRadioButtons[i];
+    type = typeof radio;
+    if (type == "object") {
+      t += _jmolRadio(radio[0], radio[1], radio[2], separatorHtml, groupName, (radio.length > 3 ? radio[3]: (id ? id : groupName)+"_"+i), (radio.length > 4 ? radio[4] : 0), title);
+    } else {
+      t += _jmolRadio(radio, null, null, separatorHtml, groupName, (id ? id : groupName)+"_"+i, title);
+    }
+  }
+  t+="</span>"
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+
+function jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {
+  _jmolInitCheck();
+  if (_jmol.radioGroupCount == 0)
+    ++_jmol.radioGroupCount;
+  var t = _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, (id ? id : groupName + "_" + _jmol.radioCount), title ? title : 0);
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolLink(script, label, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolLink" + _jmol.linkCount);
+  label != undefined && label != null || (label = script.substring(0, 32));
+  ++_jmol.linkCount;
+  var scriptIndex = _jmolAddScript(script);
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><a name='" + id + "' id='" + id + 
+          "' href='javascript:_jmolClick(this," + scriptIndex + _jmol.targetText + ");' onmouseover='_jmolMouseOver(" + scriptIndex +
+          ");return true;' onmouseout='_jmolMouseOut()' " +
+          _jmol.linkCssText + ">" + label + "</a></span>";
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function jmolCommandInput(label, size, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolCmd" + _jmol.cmdCount);
+  label != undefined && label != null || (label = "Execute");
+  size != undefined && !isNaN(size) || (size = 60);
+  ++_jmol.cmdCount;
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" + id + "' id='" + id + 
+          "' size='"+size+"' onkeypress='_jmolCommandKeyPress(event,\""+id+"\"" + _jmol.targetText + ")'><input type=button value = '"+label+"' onclick='jmolScript(document.getElementById(\""+id+"\").value" + _jmol.targetText + ")' /></span>";
+  if (_jmol.debugAlert)
+    alert(t);
+  return _jmolDocumentWrite(t);
+}
+
+function _jmolCommandKeyPress(e, id, target) {
+       var keycode = (window.event ? window.event.keyCode : e ? e.which : 0);
+       if (keycode == 13) {
+               var inputBox = document.getElementById(id)
+               _jmolScriptExecute(inputBox, inputBox.value, target)
+       }
+}
+
+function _jmolScriptExecute(element,script,target) {
+       if (typeof(script) == "object")
+               script[0](element, script, target)
+       else
+               jmolScript(script, target) 
+}
+
+function jmolMenu(arrayOfMenuItems, size, id, title) {
+  _jmolInitCheck();
+  id != undefined && id != null || (id = "jmolMenu" + _jmol.menuCount);
+  ++_jmol.menuCount;
+  var type = typeof arrayOfMenuItems;
+  if (type != null && type == "object" && arrayOfMenuItems.length) {
+    var len = arrayOfMenuItems.length;
+    if (typeof size != "number" || size == 1)
+      size = null;
+    else if (size < 0)
+      size = len;
+    var sizeText = size ? " size='" + size + "' " : "";
+    var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><select name='" + id + "' id='" + id +
+            "' onChange='_jmolMenuSelected(this" + _jmol.targetText + ")'" +
+            sizeText + _jmol.menuCssText + ">";
+    for (var i = 0; i < len; ++i) {
+      var menuItem = arrayOfMenuItems[i];
+      type = typeof menuItem;
+      var script, text;
+      var isSelected = undefined;
+      if (type == "object" && menuItem != null) {
+        script = menuItem[0];
+        text = menuItem[1];
+        isSelected = menuItem[2];
+      } else {
+        script = text = menuItem;
+      }
+      text != undefined && text != null || (text = script);            
+      if (script=="#optgroup") {
+        t += "<optgroup label='" + text + "'>";          
+         } else if (script=="#optgroupEnd") {
+        t += "</optgroup>";      
+         } else {              
+        var scriptIndex = _jmolAddScript(script);
+        var selectedText = isSelected ? "' selected='true'>" : "'>";
+        t += "<option value='" + scriptIndex + selectedText + text + "</option>";
+      }
+    }
+    t += "</select></span>";
+    if (_jmol.debugAlert)
+      alert(t);
+    return _jmolDocumentWrite(t);
+  }
+}
+
+function jmolHtml(html) {
+  return _jmolDocumentWrite(html);
+}
+
+function jmolBr() {
+  return _jmolDocumentWrite("<br />");
+}
+
+////////////////////////////////////////////////////////////////
+// advanced scripting functions
+////////////////////////////////////////////////////////////////
+
+function jmolDebugAlert(enableAlerts) {
+  _jmol.debugAlert = (enableAlerts == undefined || enableAlerts)
+}
+
+function jmolAppletInline(size, inlineModel, script, nameSuffix) {
+  _jmolInitCheck();
+  return _jmolApplet(size, _jmolSterilizeInline(inlineModel),
+                     script, nameSuffix);
+}
+
+function jmolSetTarget(targetSuffix) {
+  _jmol.targetSuffix = targetSuffix;
+  _jmol.targetText = targetSuffix ? ",\"" + targetSuffix + "\"" : ",0";
+}
+
+function jmolScript(script, targetSuffix) {
+  if (script) {
+    _jmolCheckBrowser();
+    if (targetSuffix == "all") {
+      with (_jmol) {
+       for (var i = 0; i < appletSuffixes.length; ++i) {
+         var applet = _jmolGetApplet(appletSuffixes[i]);
+          if (applet) applet.script(script);
+        }
+      }
+    } else {
+      var applet=_jmolGetApplet(targetSuffix);
+      if (applet) applet.script(script);
+    }
+  }
+}
+
+function jmolLoadInline(model, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  if (typeof(model) == "string")
+    return applet.loadInlineString(model, "", false);
+  else
+    return applet.loadInlineArray(model, "", false);
+}
+
+
+function jmolLoadInlineScript(model, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  return applet.loadInlineString(model, script, false);
+}
+
+
+function jmolLoadInlineArray(ModelArray, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  script || (script="")
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  try {
+    return applet.loadInlineArray(ModelArray, script, false);
+  } catch (err) {
+    //IE 7 bug
+    return applet.loadInlineString(ModelArray.join("\n"), script, false);
+  }
+}
+
+function jmolAppendInlineArray(ModelArray, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  script || (script="")
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  try {
+    return applet.loadInlineArray(ModelArray, script, true);
+  } catch (err) {
+    //IE 7 bug
+    return applet.loadInlineString(ModelArray.join("\n"), script, true);
+  }
+}
+
+function jmolAppendInlineScript(model, script, targetSuffix) {
+  if (!model)return "ERROR: NO MODEL"
+  var applet=_jmolGetApplet(targetSuffix);
+  if (!applet)return "ERROR: NO APPLET"
+  return applet.loadInlineString(model, script, true);
+}
+
+function jmolCheckBrowser(action, urlOrMessage, nowOrLater) {
+  if (typeof action == "string") {
+    action = action.toLowerCase();
+    action == "alert" || action == "redirect" || action == "popup" || (action = null);
+  }
+  if (typeof action != "string")
+    alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +
+          "action must be 'alert', 'redirect', or 'popup'");
+  else {
+    if (typeof urlOrMessage != "string")
+      alert("jmolCheckBrowser(action, urlOrMessage, nowOrLater)\n\n" +
+            "urlOrMessage must be a string");
+    else {
+      _jmol.checkBrowserAction = action;
+      _jmol.checkBrowserUrlOrMessage = urlOrMessage;
+    }
+  }
+  if (typeof nowOrLater == "string" && nowOrLater.toLowerCase() == "now")
+    _jmolCheckBrowser();
+}
+
+////////////////////////////////////////////////////////////////
+// Cascading Style Sheet Class support
+////////////////////////////////////////////////////////////////
+
+function jmolSetAppletCssClass(appletCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.appletCssClass = appletCssClass;
+    _jmol.appletCssText = appletCssClass ? "class='" + appletCssClass + "' " : "";
+  }
+}
+
+function jmolSetButtonCssClass(buttonCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.buttonCssClass = buttonCssClass;
+    _jmol.buttonCssText = buttonCssClass ? "class='" + buttonCssClass + "' " : "";
+  }
+}
+
+function jmolSetCheckboxCssClass(checkboxCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.checkboxCssClass = checkboxCssClass;
+    _jmol.checkboxCssText = checkboxCssClass ? "class='" + checkboxCssClass + "' " : "";
+  }
+}
+
+function jmolSetRadioCssClass(radioCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.radioCssClass = radioCssClass;
+    _jmol.radioCssText = radioCssClass ? "class='" + radioCssClass + "' " : "";
+  }
+}
+
+function jmolSetLinkCssClass(linkCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.linkCssClass = linkCssClass;
+    _jmol.linkCssText = linkCssClass ? "class='" + linkCssClass + "' " : "";
+  }
+}
+
+function jmolSetMenuCssClass(menuCssClass) {
+  if (_jmol.hasGetElementById) {
+    _jmol.menuCssClass = menuCssClass;
+    _jmol.menuCssText = menuCssClass ? "class='" + menuCssClass + "' " : "";
+  }
+}
+
+////////////////////////////////////////////////////////////////
+// functions for INTERNAL USE ONLY which are subject to change
+// use at your own risk ... you have been WARNED!
+////////////////////////////////////////////////////////////////
+var _jmol = {
+  currentDocument: document,
+
+  debugAlert: false,
+  
+  codebase: "",
+  modelbase: ".",
+  
+  appletCount: 0,
+  appletSuffixes: [],
+  appletWindow: null,
+  allowedJmolSize: [25, 2048, 300],   // min, max, default (pixels)
+         /*  By setting the _jmol.allowedJmolSize[] variable in the webpage 
+             before calling jmolApplet(), limits for applet size can be overriden.
+                   2048 standard for GeoWall (http://geowall.geo.lsa.umich.edu/home.html)
+         */  
+  buttonCount: 0,
+  checkboxCount: 0,
+  linkCount: 0,
+  cmdCount: 0,
+  menuCount: 0,
+  radioCount: 0,
+  radioGroupCount: 0,
+  
+  appletCssClass: null,
+  appletCssText: "",
+  buttonCssClass: null,
+  buttonCssText: "",
+  checkboxCssClass: null,
+  checkboxCssText: "",
+  java_arguments: "-Xmx512m",
+  radioCssClass: null,
+  radioCssText: "",
+  linkCssClass: null,
+  linkCssText: "",
+  menuCssClass: null,
+  menuCssText: "",
+  
+  targetSuffix: 0,
+  targetText: ",0",
+  scripts: [""],
+  params: {
+       syncId: ("" + Math.random()).substring(3),
+       progressbar: "true",
+       progresscolor: "blue",
+       boxbgcolor: "black",
+       boxfgcolor: "white",
+       boxmessage: "Downloading JmolApplet ..."
+  },
+  ua: navigator.userAgent.toLowerCase(),
+  // uaVersion: parseFloat(navigator.appVersion),  // not used
+  
+  os: "unknown",
+  browser: "unknown",
+  browserVersion: 0,
+  hasGetElementById: !!document.getElementById,
+  isJavaEnabled: navigator.javaEnabled(),
+  // isNetscape47Win: false,  // not used, N4.7 is no longer supported even for detection
+  useIEObject: false,
+  useHtml4Object: false,
+  
+  windowsClassId: "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93",
+  windowsCabUrl:
+   "http://java.sun.com/update/1.6.0/jinstall-6u22-windows-i586.cab",
+
+  isBrowserCompliant: false,
+  isJavaCompliant: false,
+  isFullyCompliant: false,
+
+  initialized: false,
+  initChecked: false,
+  
+  browserChecked: false,
+  checkBrowserAction: "alert",
+  checkBrowserUrlOrMessage: null,
+
+  archivePath: null, // JmolApplet0.jar OR JmolAppletSigned0.jar
+
+  previousOnloadHandler: null,
+
+  jmoljar: null,  
+  useNoApplet: false,
+
+  ready: {}
+}
+
+with (_jmol) {
+  function _jmolTestUA(candidate) {
+    var ua = _jmol.ua;
+    var index = ua.indexOf(candidate);
+    if (index < 0)
+      return false;
+    _jmol.browser = candidate;
+    _jmol.browserVersion = parseFloat(ua.substring(index+candidate.length+1));
+    return true;
+  }
+  
+  function _jmolTestOS(candidate) {
+    if (_jmol.ua.indexOf(candidate) < 0)
+      return false;
+    _jmol.os = candidate;
+    return true;
+  }
+  
+  _jmolTestUA("konqueror") ||
+  _jmolTestUA("webkit") ||
+  _jmolTestUA("omniweb") ||
+  _jmolTestUA("opera") ||
+  _jmolTestUA("webtv") ||
+  _jmolTestUA("icab") ||
+  _jmolTestUA("msie") ||
+  (_jmol.ua.indexOf("compatible") < 0 && _jmolTestUA("mozilla")); //Netscape, Mozilla, Seamonkey, Firefox and anything assimilated
+  
+  _jmolTestOS("linux") ||
+  _jmolTestOS("unix") ||
+  _jmolTestOS("mac") ||
+  _jmolTestOS("win");
+
+  /* not used:
+       isNetscape47Win = (os == "win" && browser == "mozilla" &&
+                     browserVersion >= 4.78 && browserVersion <= 4.8);
+       */
+
+  if (os == "win") {
+    isBrowserCompliant = hasGetElementById;
+  } else if (os == "mac") { // mac is the problem child :-(
+    if (browser == "mozilla" && browserVersion >= 5) {
+      // miguel 2004 11 17
+      // checking the plugins array does not work because
+      // Netscape 7.2 OS X still has Java 1.3.1 listed even though
+      // javaplugin.sf.net is installed to upgrade to 1.4.2
+      eval("try {var v = java.lang.System.getProperty('java.version');" +
+           " _jmol.isBrowserCompliant = v >= '1.4.2';" +
+           " } catch (e) { }");
+    } else if (browser == "opera" && browserVersion <= 7.54) {
+      isBrowserCompliant = false;
+    } else {
+      isBrowserCompliant = hasGetElementById &&
+        !((browser == "msie") ||
+          (browser == "webkit" && browserVersion < 125.12));
+    }
+  } else if (os == "linux" || os == "unix") {
+    if (browser == "konqueror" && browserVersion <= 3.3)
+      isBrowserCompliant = false;
+    else
+      isBrowserCompliant = hasGetElementById;
+  } else { // other OS
+    isBrowserCompliant = hasGetElementById;
+  }
+
+  // possibly more checks in the future for this
+  isJavaCompliant = isJavaEnabled;
+
+  isFullyCompliant = isBrowserCompliant && isJavaCompliant;
+
+  useIEObject = (os == "win" && browser == "msie" && browserVersion >= 5.5);
+  useHtml4Object =
+   (browser == "mozilla" && browserVersion >= 5) ||
+   (browser == "opera" && browserVersion >= 8) ||
+   (browser == "webkit" && browserVersion >= 412.2);
+ try {
+  if (top.location.search.indexOf("JMOLJAR=")>=0)
+    jmoljar = top.location.search.split("JMOLJAR=")[1].split("&")[0];
+ } catch(e) {
+  // can't access top.location
+ }
+ try {
+  useNoApplet = (top.location.search.indexOf("NOAPPLET")>=0);
+ } catch(e) {
+  // can't access top.document
+ }
+}
+
+function jmolSetMemoryMb(nMb) {
+  _jmol.java_arguments = "-Xmx" + Math.round(nMb) + "m"
+}
+
+function jmolSetParameter(name,value) {
+  _jmol.params[name] = value
+}
+
+function jmolSetCallback(callbackName,funcName) {
+  _jmol.params[callbackName] = funcName
+}
+
+ try {
+// note this is done FIRST, so it cannot override a setting done by the developer
+  if (top.location.search.indexOf("PARAMS=")>=0) {
+    var pars = unescape(top.location.search.split("PARAMS=")[1].split("&")[0]).split(";");
+    for (var i = 0; i < pars.length; i++) {
+      var p = pars[i].split(":");
+      jmolSetParameter(p[0],p[1]);
+    }
+  }
+ } catch(e) {
+  // can't access top.location
+ }
+
+function jmolSetSyncId(n) {
+  return _jmol.params["syncId"] = n
+}
+
+function jmolGetSyncId() {
+  return _jmol.params["syncId"]
+}
+
+function jmolSetLogLevel(n) {
+  _jmol.params.logLevel = ''+n;
+}
+
+       /*  AngelH, mar2007:
+               By (re)setting these variables in the webpage before calling jmolApplet(), 
+               a custom message can be provided (e.g. localized for user's language) when no Java is installed.
+       */
+if (noJavaMsg==undefined) var noJavaMsg = 
+        "You do not have Java applets enabled in your web browser, or your browser is blocking this applet.<br />\n" +
+        "Check the warning message from your browser and/or enable Java applets in<br />\n" +
+        "your web browser preferences, or install the Java Runtime Environment from <a href='http://www.java.com'>www.java.com</a><br />";
+if (noJavaMsg2==undefined) var noJavaMsg2 = 
+        "You do not have the<br />\n" +
+        "Java Runtime Environment<br />\n" +
+        "installed for applet support.<br />\n" +
+        "Visit <a href='http://www.java.com'>www.java.com</a>";
+function _jmolApplet(size, inlineModel, script, nameSuffix) {
+       /*  AngelH, mar2007
+               Fixed percent / pixel business, to avoid browser errors:
+               put "px" where needed, avoid where not.
+
+           Bob Hanson, 1/2010
+               Fixed inline escape changing returns to |               
+       */
+  with (_jmol) {
+    nameSuffix == undefined && (nameSuffix = appletCount);
+    appletSuffixes.push(nameSuffix);
+    ++appletCount;
+    script || (script = "select *");
+    var sz = _jmolGetAppletSize(size);
+    var widthAndHeight = " width='" + sz[0] + "' height='" + sz[1] + "' ";
+    var tHeader, tFooter;
+    codebase || jmolInitialize(".");
+    if (useIEObject || useHtml4Object) {
+      params.archive = archivePath;
+      params.mayscript = 'true';
+      params.codebase = codebase;
+      params.code = 'JmolApplet';
+      tHeader = 
+        "<object name='jmolApplet" + nameSuffix +
+        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +
+                               widthAndHeight + "\n";
+      tFooter = "</object>";
+    }
+    if (java_arguments)
+      params.java_arguments = java_arguments;
+    if (useIEObject) { // use MSFT IE6 object tag with .cab file reference
+      tHeader += " classid='" + windowsClassId + "'\n" +
+      (windowsCabUrl ? " codebase='" + windowsCabUrl + "'\n" : "") + ">\n";
+    } else if (useHtml4Object) { // use HTML4 object tag
+      tHeader += " type='application/x-java-applet'\n>\n";
+                               /*      " classid='java:JmolApplet'\n" +        AH removed this
+                                 Chromium Issue 62076:         Java Applets using an <object> with a classid paramater don't load.
+                                       http://code.google.com/p/chromium/issues/detail?id=62076
+                                       They say this is the correct behavior according to the spec, and there's no indication at this point 
+                                       that WebKit will be changing the handling, so eventually Safari will acquire this behavior too.
+                                       Removing the classid parameter seems to be well tolerated by all browsers (even IE!).
+                               */
+    } else { // use applet tag
+      tHeader = 
+        "<applet name='jmolApplet" + nameSuffix +
+        "' id='jmolApplet" + nameSuffix + "' " + appletCssText + "\n" +
+                               widthAndHeight + "\n" +
+        " code='JmolApplet'" +
+        " archive='" + archivePath + "' codebase='" + codebase + "'\n" +
+        " mayscript='true'>\n";
+      tFooter = "</applet>";
+    }
+    var visitJava;
+    if (useIEObject || useHtml4Object) {
+               var szX = "width:" + sz[0]
+               if ( szX.indexOf("%")==-1 ) szX+="px" 
+               var szY = "height:" + sz[1]
+               if ( szY.indexOf("%")==-1 ) szY+="px" 
+      visitJava =
+        "<p style='background-color:yellow; color:black; " +
+               szX + ";" + szY + ";" +
+        // why doesn't this vertical-align work?
+       "text-align:center;vertical-align:middle;'>\n" +
+               noJavaMsg +
+        "</p>";
+    } else {
+      visitJava =
+        "<table bgcolor='yellow'><tr>" +
+        "<td align='center' valign='middle' " + widthAndHeight + "><font color='black'>\n" +
+               noJavaMsg2 +
+        "</font></td></tr></table>";
+    }
+    params.loadInline = (inlineModel ? inlineModel : "");
+    params.script = (script ? _jmolSterilizeScript(script) : "");
+    var t = tHeader + _jmolParams() + visitJava + tFooter;
+    jmolSetTarget(nameSuffix);
+    ready["jmolApplet" + nameSuffix] = false;
+    if (_jmol.debugAlert)
+      alert(t);
+    return _jmolDocumentWrite(t);
+  }
+}
+
+function _jmolParams() {
+ var t = "";
+ for (var i in _jmol.params)
+       if(_jmol.params[i]!="")
+                t+="  <param name='"+i+"' value='"+_jmol.params[i]+"' />\n";
+ return t
+}
+
+function _jmolInitCheck() {
+  if (_jmol.initChecked)
+    return;
+  _jmol.initChecked = true;
+  jmolInitialize(defaultdir, defaultjar)
+}
+
+function _jmolCheckBrowser() {
+  with (_jmol) {
+    if (browserChecked)
+      return;
+    browserChecked = true;
+  
+    if (isFullyCompliant)
+      return true;
+
+    if (checkBrowserAction == "redirect")
+      location.href = checkBrowserUrlOrMessage;
+    else if (checkBrowserAction == "popup")
+      _jmolPopup(checkBrowserUrlOrMessage);
+    else {
+      var msg = checkBrowserUrlOrMessage;
+      if (msg == null)
+        msg = "Your web browser is not fully compatible with Jmol\n\n" +
+              "browser: " + browser +
+              "   version: " + browserVersion +
+              "   os: " + os +
+              "   isBrowserCompliant: " + isBrowserCompliant +
+              "   isJavaCompliant: " + isJavaCompliant +
+              "\n\n" + ua;
+      alert(msg);
+    }
+  }
+  return false;
+}
+
+function jmolSetXHTML(id) {
+       _jmol.isXHTML = true
+       _jmol.XhtmlElement = null
+       _jmol.XhtmlAppendChild = false
+       if (id){
+               _jmol.XhtmlElement = document.getElementById(id)
+               _jmol.XhtmlAppendChild = true
+       }
+}
+
+function _jmolDocumentWrite(text) {
+       if (_jmol.currentDocument) {
+               if (_jmol.isXHTML && !_jmol.XhtmlElement) {
+                       var s = document.getElementsByTagName("script")
+                       _jmol.XhtmlElement = s.item(s.length - 1)
+                       _jmol.XhtmlAppendChild = false
+               }
+               if (_jmol.XhtmlElement) {
+                       _jmolDomDocumentWrite(text)
+               } else {
+                       _jmol.currentDocument.write(text);
+               }
+       }
+       return text;
+}
+
+function _jmolDomDocumentWrite(data) {
+       var pt = 0
+       var Ptr = []
+       Ptr[0] = 0
+       while (Ptr[0] < data.length) {
+               var child = _jmolGetDomElement(data, Ptr)
+               if (!child)break
+               if (_jmol.XhtmlAppendChild)
+                       _jmol.XhtmlElement.appendChild(child)
+               else
+                       _jmol.XhtmlElement.parentNode.insertBefore(child, _jmol.XhtmlElement); 
+       }
+}
+function _jmolGetDomElement(data, Ptr, closetag, lvel) {
+       var e = document.createElement("span")
+       e.innerHTML = data
+       Ptr[0] = data.length
+       return e
+
+//unnecessary?
+
+       closetag || (closetag = "")
+       lvel || (lvel = 0)
+       var pt0 = Ptr[0]
+       var pt = pt0
+       while (pt < data.length && data.charAt(pt) != "<") pt++
+       if (pt != pt0) {
+               var text = data.substring(pt0, pt)
+               Ptr[0] = pt
+               return document.createTextNode(text)
+       }       
+       pt0 = ++pt
+       var ch
+       while (pt < data.length && "\n\r\t >".indexOf(ch = data.charAt(pt)) < 0) pt++
+       var tagname = data.substring(pt0, pt)
+       var e = (tagname == closetag  || tagname == "/" ? "" 
+               : document.createElementNS ? document.createElementNS('http://www.w3.org/1999/xhtml', tagname)
+               : document.createElement(tagname));
+       if (ch == ">") {
+               Ptr[0] = ++pt
+               return e
+       }
+       while (pt < data.length && (ch = data.charAt(pt)) != ">") {
+               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++
+               pt0 = pt
+               while (pt < data.length && "\n\r\t =/>".indexOf(ch = data.charAt(pt)) < 0) pt++
+               var attrname = data.substring(pt0, pt).toLowerCase()
+               if (attrname && ch != "=") 
+                       e.setAttribute(attrname, "true")
+               while (pt < data.length && "\n\r\t ".indexOf(ch = data.charAt(pt)) >= 0) pt++
+               if (ch == "/") {
+                       Ptr[0] = pt + 2
+                       return e
+               } else if (ch == "=") {
+                       var quote = data.charAt(++pt)
+                       pt0 = ++pt
+                       while (pt < data.length && (ch = data.charAt(pt)) != quote) pt++
+                       var attrvalue = data.substring(pt0, pt)
+                       e.setAttribute(attrname, attrvalue)
+                       pt++
+               }
+       }
+       Ptr[0] = ++pt
+       while (Ptr[0] < data.length) {
+               var child = _jmolGetDomElement(data, Ptr, "/" + tagname, lvel+1)
+               if (!child)break
+               e.appendChild(child)
+       }
+       return e
+}
+
+function _jmolPopup(url) {
+  var popup = window.open(url, "JmolPopup",
+                          "left=150,top=150,height=400,width=600," +
+                          "directories=yes,location=yes,menubar=yes," +
+                          "toolbar=yes," +
+                          "resizable=yes,scrollbars=yes,status=yes");
+  if (popup.focus)
+    poup.focus();
+}
+
+function _jmolReadyCallback(name) {
+  if (_jmol.debugAlert)
+    alert(name + " is ready");
+  _jmol.ready["" + name] = true;
+}
+
+function _jmolSterilizeScript(script) {
+  script = script.replace(/'/g, "&#39;");
+  if (_jmol.debugAlert)
+    alert("script:\n" + script);
+  return script;
+}
+
+function _jmolSterilizeInline(model) {
+  model = model.replace(/\r|\n|\r\n/g, (model.indexOf("|") >= 0 ? "\\/n" : "|")).replace(/'/g, "&#39;");
+  if (_jmol.debugAlert)
+    alert("inline model:\n" + model);
+  return model;
+}
+
+function _jmolRadio(script, labelHtml, isChecked, separatorHtml, groupName, id, title) {
+  ++_jmol.radioCount;
+  groupName != undefined && groupName != null || (groupName = "jmolRadioGroup" + (_jmol.radioGroupCount - 1));
+  if (!script)
+    return "";
+  labelHtml != undefined && labelHtml != null || (labelHtml = script.substring(0, 32));
+  separatorHtml || (separatorHtml = "")
+  var scriptIndex = _jmolAddScript(script);
+  var eospan = "</span>"
+  var t = "<span id=\"span_"+id+"\""+(title ? " title=\"" + title + "\"":"")+"><input name='" 
+       + groupName + "' id='"+id+"' type='radio' onclick='_jmolClick(this," +
+         scriptIndex + _jmol.targetText + ");return true;' onmouseover='_jmolMouseOver(" +
+         scriptIndex + ");return true;' onmouseout='_jmolMouseOut()' " +
+        (isChecked ? "checked='true' " : "") + _jmol.radioCssText + " />"
+  if (labelHtml.toLowerCase().indexOf("<td>")>=0) {
+       t += eospan
+       eospan = "";
+  }
+  t += "<label for=\"" + id + "\">" + labelHtml + "</label>" +eospan + separatorHtml;
+
+  return t;
+}
+
+function _jmolFindApplet(target) {
+  // first look for the target in the current window
+  var applet = _jmolFindAppletInWindow(_jmol.appletWindow != null ? _jmol.appletWindow : window, target);
+  // THEN look for the target in child frames
+  if (applet == undefined)
+    applet = _jmolSearchFrames(window, target);
+  // FINALLY look for the target in sibling frames
+  if (applet == undefined)
+    applet = _jmolSearchFrames(top, target); // look starting in top frame
+  return applet;
+}
+
+function _jmolGetApplet(targetSuffix){
+ var target = "jmolApplet" + (targetSuffix ? targetSuffix : "0");
+ var applet = _jmolFindApplet(target);
+ if (applet) return applet
+ _jmol.alerted || alert("could not find applet " + target);
+ _jmol.alerted = true;
+ return null
+}
+
+function _jmolSearchFrames(win, target) {
+  var applet;
+  var frames = win.frames;
+  if (frames && frames.length) { // look in all the frames below this window
+   try{
+    for (var i = 0; i < frames.length; ++i) {
+      applet = _jmolSearchFrames(frames[i], target);
+      if (applet)
+        return applet;
+    }
+   }catch(e) {
+       if (_jmol.debugAlert)
+               alert("Jmol.js _jmolSearchFrames cannot access " + win.name + ".frame[" + i + "] consider using jmolSetAppletWindow()") 
+   }
+  }
+  return applet = _jmolFindAppletInWindow(win, target)
+}
+
+function _jmolFindAppletInWindow(win, target) {
+    var doc = win.document;
+               if (doc.getElementById(target))
+      return doc.getElementById(target);
+    else if (doc.applets)
+      return doc.applets[target];
+    else
+      return doc[target]; 
+}
+
+function _jmolAddScript(script) {
+  if (!script)
+    return 0;
+  var index = _jmol.scripts.length;
+  _jmol.scripts[index] = script;
+  return index;
+}
+
+function _jmolClick(elementClicked, scriptIndex, targetSuffix) {
+  _jmol.element = elementClicked;
+  _jmolScriptExecute(elementClicked, _jmol.scripts[scriptIndex], targetSuffix);
+}
+
+function _jmolMenuSelected(menuObject, targetSuffix) {
+  var scriptIndex = menuObject.value;
+  if (scriptIndex != undefined) {
+    _jmolScriptExecute(menuObject, _jmol.scripts[scriptIndex], targetSuffix);
+    return;
+  }
+  var len = menuObject.length;
+  if (typeof len == "number") {
+    for (var i = 0; i < len; ++i) {
+      if (menuObject[i].selected) {
+        _jmolClick(menuObject[i], menuObject[i].value, targetSuffix);
+       return;
+      }
+    }
+  }
+  alert("?Que? menu selected bug #8734");
+}
+
+
+_jmol.checkboxMasters = {};
+_jmol.checkboxItems = {};
+
+function jmolSetCheckboxGroup(chkMaster,chkBox) {
+       var id = chkMaster;
+       if(typeof(id)=="number")id = "jmolCheckbox" + id;
+       chkMaster = document.getElementById(id);
+       if (!chkMaster)alert("jmolSetCheckboxGroup: master checkbox not found: " + id);
+       var m = _jmol.checkboxMasters[id] = {};
+       m.chkMaster = chkMaster;
+       m.chkGroup = {};
+       for (var i = 1; i < arguments.length; i++){
+               var id = arguments[i];
+               if(typeof(id)=="number")id = "jmolCheckbox" + id;
+               checkboxItem = document.getElementById(id);
+               if (!checkboxItem)alert("jmolSetCheckboxGroup: group checkbox not found: " + id);
+               m.chkGroup[id] = checkboxItem;
+               _jmol.checkboxItems[id] = m;
+       }
+}
+
+function _jmolNotifyMaster(m){
+       //called when a group item is checked
+       var allOn = true;
+       var allOff = true;
+       for (var chkBox in m.chkGroup){
+               if(m.chkGroup[chkBox].checked)
+                       allOff = false;
+               else
+                       allOn = false;
+       }
+       if (allOn)m.chkMaster.checked = true;   
+       if (allOff)m.chkMaster.checked = false;
+       if ((allOn || allOff) && _jmol.checkboxItems[m.chkMaster.id])
+               _jmolNotifyMaster(_jmol.checkboxItems[m.chkMaster.id])
+}
+
+function _jmolNotifyGroup(m, isOn){
+       //called when a master item is checked
+       for (var chkBox in m.chkGroup){
+               var item = m.chkGroup[chkBox]
+               item.checked = isOn;
+               if (_jmol.checkboxMasters[item.id])
+                       _jmolNotifyGroup(_jmol.checkboxMasters[item.id], isOn)
+       }
+}
+
+function _jmolCbClick(ckbox, whenChecked, whenUnchecked, targetSuffix) {
+  _jmol.control = ckbox
+  _jmolClick(ckbox, ckbox.checked ? whenChecked : whenUnchecked, targetSuffix);
+  if(_jmol.checkboxMasters[ckbox.id])
+       _jmolNotifyGroup(_jmol.checkboxMasters[ckbox.id], ckbox.checked)
+  if(_jmol.checkboxItems[ckbox.id])
+       _jmolNotifyMaster(_jmol.checkboxItems[ckbox.id])
+}
+
+function _jmolCbOver(ckbox, whenChecked, whenUnchecked) {
+  window.status = _jmol.scripts[ckbox.checked ? whenUnchecked : whenChecked];
+}
+
+function _jmolMouseOver(scriptIndex) {
+  window.status = _jmol.scripts[scriptIndex];
+}
+
+function _jmolMouseOut() {
+  window.status = " ";
+  return true;
+}
+
+function _jmolSetCodebase(codebase) {
+  _jmol.codebase = codebase ? codebase : ".";
+  if (_jmol.debugAlert)
+    alert("jmolCodebase=" + _jmol.codebase);
+}
+
+function _jmolOnloadResetForms() {
+  // must be evaluated ONLY once
+  _jmol.previousOnloadHandler = window.onload;
+  window.onload =
+  function() {
+    with (_jmol) {
+      if (buttonCount+checkboxCount+menuCount+radioCount+radioGroupCount > 0) {
+        var forms = document.forms;
+        for (var i = forms.length; --i >= 0; )
+          forms[i].reset();
+      }
+      if (previousOnloadHandler)
+        previousOnloadHandler();
+    }
+  }
+}
+
+////////////////////////////////////
+/////extensions for getProperty/////
+////////////////////////////////////
+
+
+function _jmolEvalJSON(s,key){
+ s=s+""
+ if(!s)return []
+ if(s.charAt(0)!="{"){
+       if(s.indexOf(" | ")>=0)s=s.replace(/\ \|\ /g, "\n")
+       return s
+ }
+ var A = eval("("+s+")")
+ if(!A)return
+ if(key && A[key])A=A[key]
+ return A
+}
+
+function _jmolEnumerateObject(A,key){
+ var sout=""
+ if(typeof(A) == "string" && A!="null"){
+       sout+="\n"+key+"=\""+A+"\""
+ }else if(!isNaN(A)||A==null){
+       sout+="\n"+key+"="+(A+""==""?"null":A)
+ }else if(A.length){
+    sout+=key+"=[]"
+    for(var i=0;i<A.length;i++){
+       sout+="\n"
+       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){
+               sout+=_jmolEnumerateObject(A[i],key+"["+i+"]")
+       }else{
+               sout+=key+"["+i+"]="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])
+       }
+    }
+ }else{
+    if(key != ""){
+       sout+=key+"={}"
+       key+="."
+    }
+    
+    for(var i in A){
+       sout+="\n"
+       if(typeof(A[i]) == "object"||typeof(A[i]) == "array"){
+               sout+=_jmolEnumerateObject(A[i],key+i)
+       }else{
+               sout+=key+i+"="+(typeof(A[i]) == "string" && A[i]!="null"?"\""+A[i].replace(/\"/g,"\\\"")+"\"":A[i])
+       }
+    }
+ } 
+ return sout
+}
+
+
+function _jmolSortKey0(a,b){
+ return (a[0]<b[0]?1:a[0]>b[0]?-1:0)
+}
+
+function _jmolSortMessages(A){
+ if(!A || typeof(A)!="object")return []
+ var B = []
+ for(var i=A.length-1;i>=0;i--)for(var j=0;j<A[i].length;j++)B[B.length]=A[i][j]
+ if(B.length == 0) return
+ B=B.sort(_jmolSortKey0)
+ return B
+}
+
+/////////additional extensions //////////
+
+
+function _jmolDomScriptLoad(URL){
+ //open(URL) //to debug
+ _jmol.servercall=URL
+ var node = document.getElementById("_jmolScriptNode")
+ if (node && _jmol.browser!="msie"){
+    document.getElementsByTagName("HEAD")[0].removeChild(node)
+    node=null
+ }
+ if (node) {
+   node.setAttribute("src",URL)
+ } else {
+   node=document.createElement("script")
+   node.setAttribute("id","_jmolScriptNode")
+   node.setAttribute("type","text/javascript")
+   node.setAttribute("src",URL)
+   document.getElementsByTagName("HEAD")[0].appendChild(node)
+ }
+}
+
+
+function _jmolExtractPostData(url){
+ S=url.split("&POST:")
+ var s=""
+ for(var i=1;i<S.length;i++){
+       KV=S[i].split("=")
+       s+="&POSTKEY"+i+"="+KV[0]
+       s+="&POSTVALUE"+i+"="+KV[1]
+ }
+ return "&url="+escape(S[0])+s
+}
+
+function _jmolLoadModel(targetSuffix,remoteURL,array,isError,errorMessage){
+ //called by server, but in client
+ //overload this function to customize return
+ _jmol.remoteURL=remoteURL
+ isError && alert(errorMessage)
+ jmolLoadInlineScript(array.join("\n"),_jmol.optionalscript,targetSuffix)
+}
+
+//////////user property/status functions/////////
+
+function jmolGetStatus(strStatus,targetSuffix){
+ return _jmolSortMessages(jmolGetPropertyAsArray("jmolStatus",strStatus,targetSuffix))
+}
+
+function jmolGetPropertyAsArray(sKey,sValue,targetSuffix) {
+ return _jmolEvalJSON(jmolGetPropertyAsJSON(sKey,sValue,targetSuffix),sKey)
+}
+
+function jmolGetPropertyAsString(sKey,sValue,targetSuffix) {
+ var applet = _jmolGetApplet(targetSuffix);
+ sValue == undefined && (sValue="");
+ return (applet ? applet.getPropertyAsString(sKey,sValue) + "" : "")
+}
+
+function jmolGetPropertyAsJSON(sKey,sValue,targetSuffix) {
+ sValue == undefined && (sValue = "")
+ var applet = _jmolGetApplet(targetSuffix);
+ try {
+  return (applet ? applet.getPropertyAsJSON(sKey,sValue) + "" : "")
+ } catch(e) {
+  return ""
+ }
+}
+
+function jmolGetPropertyAsJavaObject(sKey,sValue,targetSuffix) {
+ sValue == undefined && (sValue = "")
+ var applet = _jmolGetApplet(targetSuffix);
+ return (applet ? applet.getProperty(sKey,sValue) : null)
+}
+
+
+function jmolDecodeJSON(s) {
+ return _jmolEnumerateObject(_jmolEvalJSON(s),"")
+}
+
+
+///////// synchronous scripting ////////
+
+function jmolScriptWait(script, targetSuffix) {
+  targetSuffix == undefined && (targetSuffix="0")
+  var Ret=jmolScriptWaitAsArray(script, targetSuffix)
+  var s = ""
+  for(var i=Ret.length;--i>=0;)
+  for(var j=0;j< Ret[i].length;j++)
+       s+=Ret[i][j]+"\n"
+  return s
+}
+
+function jmolScriptWaitOutput(script, targetSuffix) {
+  targetSuffix == undefined && (targetSuffix="0")
+  var ret = ""
+  try{
+   if (script) {
+    _jmolCheckBrowser();
+    var applet=_jmolGetApplet(targetSuffix);
+    if (applet) ret += applet.scriptWaitOutput(script);
+   }
+  }catch(e){
+  }
+ return ret;
+}
+
+function jmolEvaluate(molecularMath, targetSuffix) {
+
+  //carries out molecular math on a model
+
+  targetSuffix == undefined && (targetSuffix="0")
+  var result = "" + jmolGetPropertyAsJavaObject("evaluate", molecularMath, targetSuffix);
+  var s = result.replace(/\-*\d+/,"")
+  if (s == "" && !isNaN(parseInt(result)))return parseInt(result);
+  var s = result.replace(/\-*\d*\.\d*/,"")
+  if (s == "" && !isNaN(parseFloat(result)))return parseFloat(result);
+  return result;
+}
+
+function jmolScriptEcho(script, targetSuffix) {
+  // returns a newline-separated list of all echos from a script
+  targetSuffix == undefined && (targetSuffix="0")
+  var Ret=jmolScriptWaitAsArray(script, targetSuffix)
+  var s = ""
+  for(var i=Ret.length;--i>=0;)
+  for(var j=Ret[i].length;--j>=0;)
+        if (Ret[i][j][1] == "scriptEcho")s+=Ret[i][j][3]+"\n"
+  return s.replace(/ \| /g, "\n")
+}
+
+
+function jmolScriptMessage(script, targetSuffix) {
+  // returns a newline-separated list of all messages from a script, ending with "script completed\n"
+  targetSuffix == undefined && (targetSuffix="0")
+  var Ret=jmolScriptWaitAsArray(script, targetSuffix)
+  var s = ""
+  for(var i=Ret.length;--i>=0;)
+  for(var j=Ret[i].length;--j>=0;)
+        if (Ret[i][j][1] == "scriptStatus")s+=Ret[i][j][3]+"\n"
+  return s.replace(/ \| /g, "\n")
+}
+
+
+function jmolScriptWaitAsArray(script, targetSuffix) {
+ var ret = ""
+ try{
+  jmolGetStatus("scriptEcho,scriptMessage,scriptStatus,scriptError",targetSuffix)
+  if (script) {
+    _jmolCheckBrowser();
+    var applet=_jmolGetApplet(targetSuffix);
+    if (applet) ret += applet.scriptWait(script);
+    ret = _jmolEvalJSON(ret,"jmolStatus")
+    if(typeof ret == "object")
+       return ret
+  }
+ }catch(e){
+ }
+  return [[ret]]
+}
+
+
+
+////////////   save/restore orientation   /////////////
+
+function jmolSaveOrientation(id, targetSuffix) {  
+ targetSuffix == undefined && (targetSuffix="0")
+ return _jmol["savedOrientation"+id] = jmolGetPropertyAsArray("orientationInfo","info",targetSuffix).moveTo
+}
+
+function jmolRestoreOrientation(id, targetSuffix) {
+ targetSuffix == undefined && (targetSuffix="0")
+ var s=_jmol["savedOrientation"+id]
+ if (!s || s == "")return
+ s=s.replace(/1\.0/,"0")
+ return jmolScriptWait(s,targetSuffix)
+}
+
+function jmolRestoreOrientationDelayed(id, delay, targetSuffix) {
+ arguments.length < 2 && (delay=1)
+ targetSuffix == undefined && (targetSuffix="0")
+ var s=_jmol["savedOrientation"+id]
+ if (!s || s == "")return
+ s=s.replace(/1\.0/,delay)
+ return jmolScriptWait(s,targetSuffix)
+}
+
+////////////  add parameter /////////////
+/*
+ * for adding callbacks or other parameters. Use:
+
+   jmolSetDocument(0)
+   var s= jmolApplet(....)
+   s = jmolAppletAddParam(s,"messageCallback", "myFunctionName")
+   document.write(s)
+   jmolSetDocument(document) // if you want to then write buttons and such normally
+ */
+
+function jmolAppletAddParam(appletCode,name,value){
+  return (value == "" ? appletCode : appletCode.replace(/\<param/,"\n<param name='"+name+"' value='"+value+"' />\n<param"))
+}
+
+///////////////auto load Research Consortium for Structural Biology (RCSB) data ///////////
+
+function jmolLoadAjax_STOLAF_RCSB(fileformat,pdbid,optionalscript,targetSuffix){
+
+ _jmol.thismodel || (_jmol.thismodel = "1crn")
+ _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")
+ _jmol.RCSBserver || (_jmol.RCSBserver="http://www.rcsb.org")
+ _jmol.defaultURL_RCSB || (_jmol.defaultURL_RCSB=_jmol.RCSBserver+"/pdb/files/1CRN.CIF")
+ fileformat || (fileformat="PDB")
+ pdbid || (pdbid=prompt("Enter a 4-digit PDB ID:",_jmol.thismodel))
+ if(!pdbid || pdbid.length != 4)return ""
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ var url=_jmol.defaultURL_RCSB.replace(/1CRN/g,pdbid.toUpperCase())
+ fileformat=="CIF" || (url=url.replace(/CIF/,fileformat))
+ _jmol.optionalscript=optionalscript
+ _jmol.thismodel=pdbid
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.thisurl=url
+ _jmol.modelArray = []
+ url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)
+ _jmolDomScriptLoad(url)
+ return url
+}
+
+
+///////////////auto load NIH CACTVS data -- compound name or SMILES ///////////
+
+function jmolLoadAjax_STOLAF_NIH(compoundid,optionalscript,targetSuffix){
+ _jmol.thismodel || (_jmol.thismodel = "aspirin")
+ _jmol.serverURL || (_jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm")
+ _jmol.defaultURL_NIH || (_jmol.defaultURL_NIH="http://cactus.nci.nih.gov/chemical/structure/FILE/file?format=sdf&get3d=True")
+ compoundid || (compoundid=prompt("Enter a compound name or a SMILES string:",_jmol.thismodel))
+ if(!compoundid)return ""
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ var url=_jmol.defaultURL_NIH.replace(/FILE/g,compoundid)
+ _jmol.optionalscript=optionalscript
+ _jmol.thismodel=compoundid
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.thisurl=url
+ _jmol.modelArray = []
+ url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)
+ _jmolDomScriptLoad(url)
+ return url
+}
+
+
+/////////////// St. Olaf College AJAX server -- ANY URL ///////////
+
+function jmolLoadAjax_STOLAF_ANY(url, userid, optionalscript,targetSuffix){
+ _jmol.serverURL="http://fusion.stolaf.edu/chemistry/jmol/getajaxjs.cfm"
+ _jmol.thisurlANY || (_jmol.thisurlANY = "http://www.stolaf.edu/depts/chemistry/mo/struc/data/ycp3-1.mol")
+ url || (url=prompt("Enter any (uncompressed file) URL:", _jmol.thisurlANY))
+ userid || (userid="0")
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ _jmol.optionalscript=optionalscript
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.modelArray = []
+ _jmol.thisurl = url
+ url=_jmol.serverURL+"?returnfunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix+_jmolExtractPostData(url)
+ _jmolDomScriptLoad(url)
+}
+
+
+/////////////// Mineralogical Society of America (MSA) data /////////
+
+function jmolLoadAjax_MSA(key,value,optionalscript,targetSuffix){
+
+ _jmol.thiskeyMSA || (_jmol.thiskeyMSA = "mineral")
+ _jmol.thismodelMSA || (_jmol.thismodelMSA = "quartz")
+ _jmol.ajaxURL_MSA || (_jmol.ajaxURL_MSA="http://rruff.geo.arizona.edu/AMS/result.php?mineral=quartz&viewing=ajaxjs")
+ key || (key=prompt("Enter a field:", _jmol.thiskeyMSA))
+ if(!key)return ""
+ value || (value=prompt("Enter a "+key+":", _jmol.thismodelMSA))
+ if(!value)return ""
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ optionalscript == 1 && (optionalscript='load "" {1 1 1}')
+ var url=_jmol.ajaxURL_MSA.replace(/mineral/g,key).replace(/quartz/g,value)
+ _jmol.optionalscript=optionalscript
+ _jmol.thiskeyMSA=key
+ _jmol.thismodelMSA=value
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.thisurl=url
+ _jmol.modelArray = []
+ loadModel=_jmolLoadModel
+ _jmolDomScriptLoad(url)
+ return url
+}
+
+
+
+function jmolLoadAjaxJS(url, userid, optionalscript,targetSuffix){
+ userid || (userid="0")
+ targetSuffix || (targetSuffix="0")
+ optionalscript || (optionalscript="")
+ _jmol.optionalscript=optionalscript
+ _jmol.thismodel=userid
+ _jmol.thistargetsuffix=targetSuffix
+ _jmol.modelArray = []
+ _jmol.thisurl = url
+ url+="&returnFunction=_jmolLoadModel&returnArray=_jmol.modelArray&id="+targetSuffix
+ _jmolDomScriptLoad(url)
+}
+
+
+//// in case Jmol library has already been loaded:
+
+}catch(e){}
+
+///////////////moving atoms //////////////
+
+// HIGHLY experimental!!
+
+function jmolSetAtomCoord(i,x,y,z,targetSuffix){
+    _jmolCheckBrowser();
+      var applet=_jmolGetApplet(targetSuffix);
+      if (applet) applet.getProperty('jmolViewer').setAtomCoord(i,x,y,z)
+}
+
+function jmolSetAtomCoordRelative(i,x,y,z,targetSuffix){
+    _jmolCheckBrowser();
+      var applet=_jmolGetApplet(targetSuffix);
+      if (applet) applet.getProperty('jmolViewer').setAtomCoordRelative(i,x,y,z)
+}
+
+
+///////////////applet fake for testing buttons/////////////
+
+
+if(_jmol.useNoApplet){
+       jmolApplet = function(w){
+               var s="<table style='background-color:black' width="+w+"><tr height="+w+">"
+               +"<td align=center valign=center style='background-color:white'>"
+               +"Applet would be here"
+               +"<p><textarea id=fakeApplet rows=5 cols=50></textarea>"
+               +"</td></tr></table>"
+               return _jmolDocumentWrite(s)
+       }
+
+       _jmolFindApplet = function(){return jmolApplet0}
+
+       jmolApplet0 = {
+        script: function(script){document.getElementById("fakeApplet").value="\njmolScript:\n"+script}
+       ,scriptWait: function(script){document.getElementById("fakeApplet").value="\njmolScriptWait:\n"+script} 
+       ,loadInline: function(data,script){document.getElementById("fakeApplet").value="\njmolLoadInline data:\n"+data+"\n\nscript:\n"+script}
+       }
+}
+
+
+///////////////////////////////////////////
+
+  //  This should no longer be needed, jmolResizeApplet() is better; kept for backwards compatibility
+  /*
+       Resizes absolutely (pixels) or by percent of window (w or h 0.5 means 50%).
+       targetSuffix is optional and defaults to zero (first applet in page).
+       Both w and h are optional, but needed if you want to use targetSuffix.
+               h defaults to w
+               w defaults to 100% of window
+       If either w or h is between 0 and 1, then it is taken as percent/100.
+       If either w or h is greater than 1, then it is taken as a size (pixels). 
+       */
+function jmolResize(w,h,targetSuffix) {
+ _jmol.alerted = true;
+ var percentW = (!w ? 100 : w <= 1  && w > 0 ? w * 100 : 0);
+ var percentH = (!h ? percentW : h <= 1 && h > 0 ? h * 100 : 0);
+ if (_jmol.browser=="msie") {
+   var width=document.body.clientWidth;
+   var height=document.body.clientHeight;
+ } else {
+   var netscapeScrollWidth=15;
+   var width=window.innerWidth - netscapeScrollWidth;
+   var height=window.innerHeight-netscapeScrollWidth;
+ }
+ var applet = _jmolGetApplet(targetSuffix);
+ if(!applet)return;
+ applet.style.width = (percentW ? width * percentW/100 : w)+"px";
+ applet.style.height = (percentH ? height * percentH/100 : (h ? h : w))+"px";
+ //title=width +  " " + height + " " + (new Date());
+}
+
+// 13 Jun 09 -- makes jmolResize() obsolete  (kept for backwards compatibility)
+function jmolResizeApplet(size,targetSuffix) {
+ // See _jmolGetAppletSize() for the formats accepted as size [same used by jmolApplet()]
+ //  Special case: an empty value for width or height is accepted, meaning no change in that dimension.
+ _jmol.alerted = true;
+ var applet = _jmolGetApplet(targetSuffix);
+ if(!applet)return;
+ var sz = _jmolGetAppletSize(size, "px");
+ sz[0] && (applet.style.width = sz[0]);
+ sz[1] && (applet.style.height = sz[1]);
+}
+
+function _jmolGetAppletSize(size, units) {
+       /* Accepts single number or 2-value array, each one can be one of:
+          percent (text string ending %), decimal 0 to 1 (percent/100), number, or text string (interpreted as nr.)
+          [width, height] array of strings is returned, with units added if specified.
+          Percent is relative to container div or element (which should have explicitly set size).
+       */
+  var width, height;
+  if ( (typeof size) == "object" && size != null ) {
+    width = size[0]; height = size[1];
+  } else {
+    width = height = size;
+  }
+  return [_jmolFixDim(width, units), _jmolFixDim(height, units)];
+}
+
+function _jmolFixDim(x, units) {
+  var sx = "" + x;
+  return (sx.length == 0 ? (units ? "" : _jmol.allowedJmolSize[2])
+       : sx.indexOf("%") == sx.length-1 ? sx 
+       : (x = parseFloat(x)) <= 1 && x > 0 ? x * 100 + "%"
+       : (isNaN(x = Math.floor(x)) ? _jmol.allowedJmolSize[2]
+               : x < _jmol.allowedJmolSize[0] ? _jmol.allowedJmolSize[0]
+           : x > _jmol.allowedJmolSize[1] ? _jmol.allowedJmolSize[1] 
+        : x) + (units ? units : ""));
+}
+
+
+
+
index 53698a4..72c062d 100755 (executable)
@@ -1,60 +1,60 @@
->FER_CAPAA Ferredoxin\r
------------------------------------------------------------ASYKVKLITPDGP\r
-IEFDCPDDVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV\r
-TIETHKEAELVG-\r
->FER_CAPAN Ferredoxin, chloroplast precursor\r
-MA------SVSATMISTSFMPRKPAVTSL-KPIPNVGE--ALFGLKS-A--NGGKVTCMASYKVKLITPDGP\r
-IEFDCPDNVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV\r
-TIETHKEAELVG-\r
->FER1_SOLLC Ferredoxin-1, chloroplast precursor\r
-MA------SISGTMISTSFLPRKPAVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPEGP\r
-IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGSVDQSDGNFLDEDQEAAGFVLTCVAYPKGDV\r
-TIETHKEEELTA-\r
->Q93XJ9_SOLTU Ferredoxin I precursor\r
-MA------SISGTMISTSFLPRKPVVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPDGP\r
-IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGTVDQSDGKFLDDDQEAAGFVLTCVAYPKCDV\r
-TIETHKEEELTA-\r
->FER1_PEA Ferredoxin-1, chloroplast precursor\r
-MATT---PALYGTAVSTSFLRTQPMPMSV-TTTKAFSN--GFLGLKT-SLKRGDLAVAMASYKVKLVTPDGT\r
-QEFECPSDVYILDHAEEVGIDLPYSCRAGSCSSCAGKVVGGEVDQSDGSFLDDEQIEAGFVLTCVAYPTSDV\r
-VIETHKEEDLTA-\r
->Q7XA98_TRIPR Ferredoxin I\r
-MATT---PALYGTAVSTSFMRRQPVPMSV-ATTTTTKAFPSGFGLKSVSTKRGDLAVAMATYKVKLITPEGP\r
-QEFDCPDDVYILDHAEEVGIELPYSCRAGSCSSCAGKVVNGNVNQEDGSFLDDEQIEGGWVLTCVAFPTSDV\r
-TIETHKEEELTA-\r
->FER1_MESCR Ferredoxin-1, chloroplast precursor\r
-MAAT--TAALSGATMSTAFAPK--TPPMTAALPTNVGR--ALFGLKS-SASR-GRVTAMAAYKVTLVTPEGK\r
-QELECPDDVYILDAAEEAGIDLPYSCRAGSCSSCAGKVTSGSVNQDDGSFLDDDQIKEGWVLTCVAYPTGDV\r
-TIETHKEEELTA-\r
->FER1_SPIOL Ferredoxin-1, chloroplast precursor\r
-MAAT--TTTMMG--MATTFVPKPQAPPMMAALPSNTGR--SLFGLKT-GSR--GGRMTMAAYKVTLVTPTGN\r
-VEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLDDDQIDEGWVLTCAAYPVSDV\r
-TIETHKEEELTA-\r
->FER3_RAPSA Ferredoxin, leaf L-A\r
------------------------------------------------------------ATYKVKFITPEGE\r
-QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDDQIAEGFVLTCAAYPTSDV\r
-TIETHREEDMV--\r
->FER1_ARATH Ferredoxin-1, chloroplast precursor\r
-MAST----ALSSAIVGTSFIRRSPAPISLRSLPSANTQ--SLFGLKS-GTARGGRVTAMATYKVKFITPEGE\r
-LEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDEQIGEGFVLTCAAYPTSDV\r
-TIETHKEEDIV--\r
->FER_BRANA Ferredoxin\r
------------------------------------------------------------ATYKVKFITPEGE\r
-QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGFVDQSDESFLDDDQIAEGFVLTCAAYPTSDV\r
-TIETHKEEELV--\r
->FER2_ARATH Ferredoxin-2, chloroplast precursor\r
-MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE\r
-QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDDEQMSEGYVLTCVAYPTSDV\r
-VIETHKEEAIM--\r
->Q93Z60_ARATH At1g10960/T19D16_12\r
-MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE\r
-QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDD-------------------\r
--------------\r
->FER1_MAIZE Ferredoxin-1, chloroplast precursor\r
-MATVLGSPRAPAFFFSSSSLRAAPAPTAV--ALPAAKV--GIMGRSA-SSRR--RLRAQATYNVKLITPEGE\r
-VELQVPDDVYILDQAEEDGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSYLDDGQIADGWVLTCHAYPTSDV\r
-VIETHKEEELTGA\r
->O80429_MAIZE Ferredoxin\r
-MAAT---------ALSMSILR---APPPCFSSPLRLRV--AVAKPLA-APMRRQLLRAQATYNVKLITPEGE\r
-VELQVPDDVYILDFAEEEGIDLPFSCRAGSCSSCAGKVVSGSVDQSDQSFLNDNQVADGWVLTCAAYPTSDV\r
-VIETHKEDDLL--\r
+>FER_CAPAA Ferredoxin
+-----------------------------------------------------------ASYKVKLITPDGP
+IEFDCPDDVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV
+TIETHKEAELVG-
+>FER_CAPAN Ferredoxin, chloroplast precursor
+MA------SVSATMISTSFMPRKPAVTSL-KPIPNVGE--ALFGLKS-A--NGGKVTCMASYKVKLITPDGP
+IEFDCPDNVYILDQAEEAGHDLPYSCRAGSCSSCAGKIAGGAVDQTDGNFLDDDQLEEGWVLTCVAYPQSDV
+TIETHKEAELVG-
+>FER1_SOLLC Ferredoxin-1, chloroplast precursor
+MA------SISGTMISTSFLPRKPAVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPEGP
+IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGSVDQSDGNFLDEDQEAAGFVLTCVAYPKGDV
+TIETHKEEELTA-
+>Q93XJ9_SOLTU Ferredoxin I precursor
+MA------SISGTMISTSFLPRKPVVTSL-KAISNVGE--ALFGLKS-G--RNGRITCMASYKVKLITPDGP
+IEFECPDDVYILDQAEEEGHDLPYSCRAGSCSSCAGKVTAGTVDQSDGKFLDDDQEAAGFVLTCVAYPKCDV
+TIETHKEEELTA-
+>FER1_PEA Ferredoxin-1, chloroplast precursor
+MATT---PALYGTAVSTSFLRTQPMPMSV-TTTKAFSN--GFLGLKT-SLKRGDLAVAMASYKVKLVTPDGT
+QEFECPSDVYILDHAEEVGIDLPYSCRAGSCSSCAGKVVGGEVDQSDGSFLDDEQIEAGFVLTCVAYPTSDV
+VIETHKEEDLTA-
+>Q7XA98_TRIPR Ferredoxin I
+MATT---PALYGTAVSTSFMRRQPVPMSV-ATTTTTKAFPSGFGLKSVSTKRGDLAVAMATYKVKLITPEGP
+QEFDCPDDVYILDHAEEVGIELPYSCRAGSCSSCAGKVVNGNVNQEDGSFLDDEQIEGGWVLTCVAFPTSDV
+TIETHKEEELTA-
+>FER1_MESCR Ferredoxin-1, chloroplast precursor
+MAAT--TAALSGATMSTAFAPK--TPPMTAALPTNVGR--ALFGLKS-SASR-GRVTAMAAYKVTLVTPEGK
+QELECPDDVYILDAAEEAGIDLPYSCRAGSCSSCAGKVTSGSVNQDDGSFLDDDQIKEGWVLTCVAYPTGDV
+TIETHKEEELTA-
+>FER1_SPIOL Ferredoxin-1, chloroplast precursor
+MAAT--TTTMMG--MATTFVPKPQAPPMMAALPSNTGR--SLFGLKT-GSR--GGRMTMAAYKVTLVTPTGN
+VEFQCPDDVYILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLDDDQIDEGWVLTCAAYPVSDV
+TIETHKEEELTA-
+>FER3_RAPSA Ferredoxin, leaf L-A
+-----------------------------------------------------------ATYKVKFITPEGE
+QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDDQIAEGFVLTCAAYPTSDV
+TIETHREEDMV--
+>FER1_ARATH Ferredoxin-1, chloroplast precursor
+MAST----ALSSAIVGTSFIRRSPAPISLRSLPSANTQ--SLFGLKS-GTARGGRVTAMATYKVKFITPEGE
+LEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSFLDDEQIGEGFVLTCAAYPTSDV
+TIETHKEEDIV--
+>FER_BRANA Ferredoxin
+-----------------------------------------------------------ATYKVKFITPEGE
+QEVECDDDVYVLDAAEEAGIDLPYSCRAGSCSSCAGKVVSGFVDQSDESFLDDDQIAEGFVLTCAAYPTSDV
+TIETHKEEELV--
+>FER2_ARATH Ferredoxin-2, chloroplast precursor
+MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE
+QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDDEQMSEGYVLTCVAYPTSDV
+VIETHKEEAIM--
+>Q93Z60_ARATH At1g10960/T19D16_12
+MAST----ALSSAIVSTSFLRRQQTPISLRSLPFANTQ--SLFGLKS-STARGGRVTAMATYKVKFITPEGE
+QEVECEEDVYVLDAAEEAGLDLPYSCRAGSCSSCAGKVVSGSIDQSDQSFLDD-------------------
+-------------
+>FER1_MAIZE Ferredoxin-1, chloroplast precursor
+MATVLGSPRAPAFFFSSSSLRAAPAPTAV--ALPAAKV--GIMGRSA-SSRR--RLRAQATYNVKLITPEGE
+VELQVPDDVYILDQAEEDGIDLPYSCRAGSCSSCAGKVVSGSVDQSDQSYLDDGQIADGWVLTCHAYPTSDV
+VIETHKEEELTGA
+>O80429_MAIZE Ferredoxin
+MAAT---------ALSMSILR---APPPCFSSPLRLRV--AVAKPLA-APMRRQLLRAQATYNVKLITPEGE
+VELQVPDDVYILDFAEEEGIDLPFSCRAGSCSSCAGKVVSGSVDQSDQSFLNDNQVADGWVLTCAAYPTSDV
+VIETHKEDDLL--
index 064d6bc..eba1dd9 100755 (executable)
@@ -1,61 +1,61 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>\r
-<!--\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)\r
- * Copyright (C) 2014 The Jalview Authors\r
- * \r
- * This file is part of Jalview.\r
- * \r
- * Jalview is free software: you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License \r
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\r
- *  \r
- * Jalview is distributed in the hope that it will be useful, but \r
- * WITHOUT ANY WARRANTY; without even the implied warranty \r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
- * PURPOSE.  See the GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
- * The Jalview Authors are detailed in the 'AUTHORS' file.\r
--->\r
-<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 1.0//EN" "http://java.sun.com/products/javahelp/helpset_1_0.dtd">\r
-<helpset version="1.0">\r
-   <!-- title -->\r
-   <title>Jalview Documentation</title>\r
-   <!-- maps -->\r
-   <maps>\r
-     <homeID>home</homeID>\r
-     <mapref location="help.jhm" />\r
-   </maps>\r
-   <!-- views -->\r
-   <view>\r
-      <name>TOC</name>\r
-      <label>Table Of Contents</label>\r
-      <type>javax.help.TOCView</type>\r
-      <data>helpTOC.xml</data>\r
-   </view>\r
-  <view>\r
-    <name>Search</name>\r
-    <label>Search</label>\r
-    <type>javax.help.SearchView</type>\r
-    <data engine="com.sun.java.help.search.DefaultSearchEngine">\r
-      JavaHelpSearch\r
-    </data>\r
-  </view>\r
-<presentation default="true" displayviews="true" displayviewimages="false">\r
-    <name>TOPALi</name>\r
-    <size width="800" height="700" />\r
-    <location x="200" y="50" />\r
-    <title>Jalview Documentation</title>\r
-    <image>helpIcon</image>\r
-    <toolbar>\r
-               <helpaction image="backIcon">javax.help.BackAction</helpaction>\r
-               <helpaction image="forwardIcon">javax.help.ForwardAction</helpaction>\r
-               <helpaction image="homeIcon">javax.help.HomeAction</helpaction>\r
-               <helpaction>javax.help.SeparatorAction</helpaction>\r
-               <!--<helpaction image="reloadIcon">javax.help.ReloadAction</helpaction>-->\r
-               <!--<helpaction image="addBookmarkIcon">javax.help.FavoritesAction</helpaction>-->\r
-               <helpaction image="printIcon">javax.help.PrintAction</helpaction>\r
-               <helpaction image="printSetupIcon">javax.help.PrintSetupAction</helpaction>\r
-       </toolbar>\r
-  </presentation>\r
-</helpset>\r
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!--
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+-->
+<!DOCTYPE helpset PUBLIC "-//Sun Microsystems Inc.//DTD JavaHelp HelpSet Version 1.0//EN" "http://java.sun.com/products/javahelp/helpset_1_0.dtd">
+<helpset version="1.0">
+   <!-- title -->
+   <title>Jalview Documentation</title>
+   <!-- maps -->
+   <maps>
+     <homeID>home</homeID>
+     <mapref location="help.jhm" />
+   </maps>
+   <!-- views -->
+   <view>
+      <name>TOC</name>
+      <label>Table Of Contents</label>
+      <type>javax.help.TOCView</type>
+      <data>helpTOC.xml</data>
+   </view>
+  <view>
+    <name>Search</name>
+    <label>Search</label>
+    <type>javax.help.SearchView</type>
+    <data engine="com.sun.java.help.search.DefaultSearchEngine">
+      JavaHelpSearch
+    </data>
+  </view>
+<presentation default="true" displayviews="true" displayviewimages="false">
+    <name>TOPALi</name>
+    <size width="800" height="700" />
+    <location x="200" y="50" />
+    <title>Jalview Documentation</title>
+    <image>helpIcon</image>
+    <toolbar>
+               <helpaction image="backIcon">javax.help.BackAction</helpaction>
+               <helpaction image="forwardIcon">javax.help.ForwardAction</helpaction>
+               <helpaction image="homeIcon">javax.help.HomeAction</helpaction>
+               <helpaction>javax.help.SeparatorAction</helpaction>
+               <!--<helpaction image="reloadIcon">javax.help.ReloadAction</helpaction>-->
+               <!--<helpaction image="addBookmarkIcon">javax.help.FavoritesAction</helpaction>-->
+               <helpaction image="printIcon">javax.help.PrintAction</helpaction>
+               <helpaction image="printSetupIcon">javax.help.PrintSetupAction</helpaction>
+       </toolbar>
+  </presentation>
+</helpset>
index 8e9bcdf..49128c2 100755 (executable)
@@ -46,16 +46,23 @@ menu, which is obtained by clicking anywhere on the annotation row labels
 area (below the sequence ID area).
 </p>
 <ul>
-  <li>Add New Row<br>
+  <li><strong>Add New Row</strong><br>
     <em>Adds a new, named annotation row (a dialog box will pop up for you to 
     enter the label for the new row). </em> </li>
-  <li>Hide Row<br>
+  <li><strong>Edit Label/Description</strong><br>
+    <em>This opens a dialog where you can change the name (displayed label), or the description
+    (as shown on the label tooltip) of the clicked annotation. </em> </li>
+  <li><strong>Hide This Row</strong><br>
     <em>Hides the annotation row whose label was clicked in order to bring up 
     the menu.</em> </li>
-  <li>Delete Row<br>
+  <li><strong>Hide All <em>&lt;label&gt;</em></strong><br>
+    <em>Hides all annotation rows whose label matches the one clicked. 
+    (This option is only shown for annotations that relate to individual sequences, 
+    not for whole alignment annotations. Since Jalview 2.8.2.)</em> </li>
+  <li><strong>Delete This Row</strong><br>
     <em>Deletes the annotation row whose label was clicked in order to bring up 
     the menu.</em> </li>
-  <li>Show All Hidden Rows<br>
+  <li><strong>Show All Hidden Rows</strong><br>
     <em>Shows all hidden annotation rows.</em> </li>
           <li><strong>Export Annotation</strong> <em>(Application only)</em><br>
        <em>Annotations can be saved to file or output to a text window in either the 
index 41d2b69..141379f 100755 (executable)
@@ -193,7 +193,7 @@ SEQUENCE_REF&#9;FER1_MESCR&#9;5
 BAR_GRAPH&#9;Bar Graph 1&#9;&lt;html&gt;an &lt;em&gt;html tooltip&lt;/em&gt; for Bar graph 1.&lt;/html&gt;&#9;||-100,-|-200,-|-300,-|-400,-|200,+|300,+|150,+
 LINE_GRAPH&#9;Green Values&#9;1.1|2.2|1.3|3.4|0.7|1.4|3.3|2.2|2.1|-1.1|3.2
 LINE_GRAPH&#9;Red Values&#9;2.1|3.2|1.3|-1.4|5.5|1.4|1.3|4.2|-1.1|1.1|3.2
-BAR_GRAPH&#9;Bar Graph&#9;2 1,.|2,*|3,:|4,.|5,*|4,:|3,.|2|1|1|2|3|4|5|4
+BAR_GRAPH&#9;Bar Graph 2&#9;1,.|2,*|3,:|4,.|5,*|4,:|3,.|2|1|1|2|3|4|5|4
 NO_GRAPH&#9;Icons &#9;||||E,Sheet1|E|E||||H,Sheet 2|H|H|H||||||
 NO_GRAPH&#9;Purple Letters&#9;m|y|p|r|o|t|e|i|n
 COLOUR&#9;Bar Graph 2&#9;blue
index 35fe675..7bfc435 100755 (executable)
@@ -43,7 +43,7 @@ jalview tries to detect some text or formatting unique to one of the formats:
 <tr>
 <td width="17%">FASTA</td>
 <td width="60%">&gt;SequenceName<br>
-THISISASEQENCE<br></td>
+THISISASEQUENCE<br></td>
 <td width="23%">.fa, .fasta</td>
 </tr><tr><td width="17%">MSF</td>
 <td width="60%">!! AA_MULTIPLE_ALIGNMENT 1.0<br>
@@ -64,7 +64,7 @@ THISISASEQENCE<br></td>
 &gt;Seq2</td>
 <td width="23%">.blc</td>
 </tr><tr><td width="17%">PFAM</td>
-<td width="60%">SequenceName THISISASEQENCE</td>
+<td width="60%">SequenceName THISISASEQUENCE</td>
 <td width="23%">.pfam</td>
 </tr><tr>
 <td width="17%">Stockholm</td>
index f219269..a7cb733 100755 (executable)
                                </li>
                                <li><strong>Load Associated Tree<br> </strong><em>Jalview
                                                can <a href="../calculations/treeviewer.html">view trees</a>
-                                               stored in the Newick file format, and associate them with the
+                                                stored in the Newick file format, and associate them with the
                                                alignment. Note: the ids of the tree file and your alignment MUST
                                                be the same.</em></li>
                                <li><strong>Load Features / Annotations<br> </strong><em>Load
                                                conservation calculation, quality calculation and consensus values
                                                as bar charts. </em>
                                </li>
+                         <li><strong>Show All Annotations</strong><em><br>
+                           Show all available annotations on the alignment. You can selectively hide these from the <a href="./popupMenu.html">Popup</a> 
+                           or <a href="../features/annotation.html">Annotation</a> menus. (Since Jalview 2.8.2)</em></li>
+                         <li><strong>Hide All Annotations</strong><em><br>
+                           Hide all annotations on the alignment. (Since Jalview 2.8.2)</em></li>
                                <li><strong>Autocalculated Annotation<br> </strong><em>Settings
                                        for the display of autocalculated annotation.</em>
                                        <ul>
                                <li><strong>Show Sequence Features</strong><br> <em>Show
                                                or hide sequence features on this alignment.</em>
                                </li>
-                               <li><strong><a href="../features/featuresettings.html">Seqence
+                               <li><strong><a href="../features/featuresettings.html">Sequence
                                                        Feature Settings...</a> </strong><em><br> <em>Opens the
                                                        Sequence Feature Settings dialog box to control the colour and
                                                        display of sequence features on the alignment, and configure and
index 4b89049..7375e63 100755 (executable)
       <li><strong> Add New Row</strong><br>
         <em>Adds a new, named annotation row (a dialog box will pop up for you 
         to enter the label for the new row). </em> </li>
-      <li><strong>Hide Row</strong><br>
-        <em>Hides the annotation row whose label was clicked in order to bring 
-        up the menu.</em> </li>
+         <li><strong>Edit Label/Description</strong><br>
+           <em>This opens a dialog where you can change the name (displayed label), or the description
+           (as shown on the label tooltip) of the clicked annotation. </em> </li>
+         <li><strong>Hide This Row</strong><br>
+           <em>Hides the annotation row whose label was clicked in order to bring up 
+           the menu.</em> </li>
+         <li><strong>Hide All <em>&lt;label&gt;</em></strong><br>
+           <em>Hides all annotation rows whose label matches the one clicked. 
+           (This option is only shown for annotations that relate to individual sequences, 
+           not for whole alignment annotations. Since Jalview 2.8.2.)</em> </li>
       <li><strong>Delete Row</strong><br>
         <em>Deletes the annotation row whose label was clicked in order to bring 
         up the menu.</em> </li>
index 3d2d3be..cb38708 100755 (executable)
     </strong><em>If this is selected the &quot;Annotation Panel&quot; will be 
     displayed below the alignment. The default setting is to display the conservation 
     calculation, quality calculation and consensus values as bar charts. </em></li>
+  <li><strong>Show All Annotations</strong><em><br>
+    Show all available annotations on the alignment. You can selectively hide these from the <a href="./popupMenu.html">Popup</a> 
+    &nbsp;or <a href="../features/annotation.html">Annotation</a>&nbsp;menus. (Since Jalview 2.8.2)</em></li>
+  <li><strong>Hide All Annotations</strong><em><br>
+    Hide all annotations on the alignment. (Since Jalview 2.8.2)</em></li>
     <li><strong>Autocalculated Annotation<br></strong>Settings for the display of autocalculated annotation.
     <ul><li>
        <strong>Apply to all groups<br></strong>
@@ -77,7 +82,7 @@
   </li>
   <li><strong>Show Sequence Features</strong><br>
     <em>Show or hide sequence features on this alignment.</em></li>
-  <li><strong><a href="../features/featuresettings.html">Seqence Feature Settings...</a></strong><em><br>
+  <li><strong><a href="../features/featuresettings.html">Sequence Feature Settings...</a></strong><em><br>
     Opens the Sequence Feature Settings dialog box to control the colour and display 
     of sequence features on the alignment, and configure and retrieve features 
     from DAS annotation servers.</em></li>
index e28c7e1..511b85f 100755 (executable)
@@ -31,14 +31,24 @@ not be accessible when in 'Cursor Mode' (toggled with the F2 key).</em></p>
 <ul>
   <li><strong>Selection</strong> 
     <ul>
-      <li><a name="sqreport"><strong>Sequence Details ...<br>
+      <li><a name="sqreport"><strong>Sequence Details...<br>
           </strong></a><em>(Since Jalview 2.8)<br>Open an <a href="../io/exportseqreport.html">HTML report containing the annotation
-            and database cross references</a> normally shown in the sequence's
+            and database cross references</a>&nbsp;normally shown in the sequence's
             tooltip.</em></li>
+      <li><strong>Show Annotations...<br>
+          </strong><em>Choose to show (unhide) either All or 
+          a selected type of annotation for the selected sequences. (Since Jalview 2.8.2)</em></li>
+      <li><strong>Hide Annotations...<br>
+          </strong><em>Choose to hide either All or 
+          a selected type of annotation for the selected sequences. (Since Jalview 2.8.2)</em></li>
+      <li><strong>Add Reference Annotations...<br>
+          </strong><em>Add to the alignment window any annotations on the selected sequences
+          which have been read from reference sources or calculated (for example, 
+          secondary structure derived from 3D structure). (Since Jalview 2.8.2)</em></li>
       <li><strong>Edit </strong> 
         <ul>
           <li><strong>Copy</strong><br>
-            <em>Copys the selected region. In the applet version, the copied sequences 
+            <em>Copies the selected region. In the applet version, the copied sequences 
             are not available to the system clipboard.</em></li>
           <li><strong>Cut<br>
             </strong><em>Cuts the selected region from the alignment. In the applet 
@@ -186,9 +196,7 @@ not be accessible when in 'Cursor Mode' (toggled with the F2 key).</em></p>
     (The View representative structures option was introduced in
         Jalview 2.8.1)</em></li>
   </ul>
-  <br> <li>
-      
-      </li>
+  <br> 
     </ul>
   </li>
   <li><strong>Hide Sequences</strong><br>
similarity index 53%
rename from lib/VARNAv3-9.jar
rename to lib/VARNAv3-91.jar
index 86ac411..edfbca5 100644 (file)
Binary files a/lib/VARNAv3-9.jar and b/lib/VARNAv3-91.jar differ
index 0a7a0d7..f23275a 100644 (file)
-action.refresh_services = Refresh Services\r
-action.reset_services = Reset Services\r
-action.merge_results = Merge Results\r
-action.load_scheme = Load scheme\r
-action.save_scheme = Save scheme\r
-action.save_image = Save Image\r
-action.paste = Paste\r
-action.show_html_source = Show HTML Source\r
-action.print = Print\r
-action.web_service = Web Service\r
-action.cancel_job = Cancel Job\r
-action.start_job = Start Job\r
-action.revert = Revert\r
-action.move_down = Move Down\r
-action.move_up = Move Up\r
-action.remove_return_datatype = Remove return datatype\r
-action.add_return_datatype = Add return datatype\r
-action.remove_input_parameter = Remove selected input parameter\r
-action.add_input_parameter = Add input parameter\r
-action.edit = Edit\r
-action.new = New\r
-action.open_file = Open file\r
-action.show_unconserved = Show Unconserved\r
-action.open_new_aligmnent = Open new alignment\r
-action.raise_associated_windows = Raise Associated Windows\r
-action.minimize_associated_windows = Minimize Associated Windows\r
-action.close_all = Close all\r
-action.load_project = Load Project\r
-action.save_project = Save Project\r
-action.quit = Quit\r
-action.expand_views = Expand Views\r
-action.gather_views = Gather Views\r
-action.page_setup = Page Setup\r
-action.reload = Reload\r
-action.load = Load\r
-action.open = Open\r
-action.cancel = Cancel\r
-action.create = Create\r
-action.update = Update\r
-action.delete = Delete\r
-action.snapshot = Snapshot\r
-action.clear = Clear\r
-action.accept = Accept\r
-action.select_ddbb = --- Select Database ---\r
-action.undo = Undo\r
-action.redo = Redo\r
-action.reset = Reset\r
-action.remove_left = Remove left\r
-action.remove_right = Remove right\r
-action.remove_empty_columns = Remove Empty Columns\r
-action.remove_all_gaps = Remove All Gaps\r
-action.left_justify_alignment = Left Justify Alignment\r
-action.right_justify_alignment = Right Justify Alignment\r
-action.boxes = Boxes\r
-action.text = Text\r
-action.by_pairwise_id = by Pairwise Identity\r
-action.by_id = by Id\r
-action.by_length = by Length\r
-action.by_group = by Group\r
-action.remove = Remove\r
-action.remove_redundancy = Remove Redundancy\r
-action.pairwise_alignment = Pairwise Alignments...\r
-action.by_rna_helixes = by RNA Helices\r
-action.user_defined = User Defined...\r
-action.by_conservation = By Conservation\r
-action.wrap = Wrap\r
-action.show_gaps = Show Gaps\r
-action.show_hidden_markers = Show Hidden Markers\r
-action.find = Find\r
-action.undefine_groups = Undefine Groups\r
-action.create_groups = Create Groups\r
-action.make_groups_selection = Make Groups For Selection\r
-action.copy = Copy\r
-action.cut = Cut\r
-action.font = Font...\r
-action.scale_above = Scale Above\r
-action.scale_left = Scale Left\r
-action.scale_right = Scale Right\r
-action.by_tree_order = By Tree Order\r
-action.sort = Sort\r
-action.calculate_tree = Calculate Tree\r
-action.help = Help\r
-action.by_annotation = by Annotation...\r
-action.invert_sequence_selection = Invert Sequence Selection\r
-action.invert_column_selection = Invert Column Selection\r
-action.show = Show\r
-action.hide = Hide\r
-action.ok = OK\r
-action.set_defaults = Defaults\r
-action.create_group = Create Group\r
-action.remove_group = Remove Group\r
-action.edit_group = Edit Group\r
-action.border_colour = Border colour\r
-action.edit_new_group = Edit New Group\r
-action.hide_sequences = Hide Sequences\r
-action.sequences = Sequences\r
-action.ids = IDS\r
-action.ids_sequences = IDS and sequences\r
-action.reveal_all = Reveal All\r
-action.reveal_sequences = Reveal Sequences\r
-action.find_all = Find all\r
-action.find_next = Find next\r
-action.file = File\r
-action.view = View\r
-action.change_params = Change Parameters\r
-action.apply = Apply\r
-action.apply_threshold_all_groups = Apply threshold to all groups\r
-action.apply_all_groups = Apply to all Groups\r
-action.by_chain = By chain\r
-action.by_sequence = By Sequence\r
-action.paste_annotations = Paste Annotations\r
-action.format = Format\r
-action.select = Select\r
-action.new_view = New View\r
-action.close = Close\r
-action.add = Add\r
-action.save_as_default = Save as default\r
-action.save_as = Save as\r
-action.save = Save\r
-action.cancel_fetch = Cancel Fetch\r
-action.save_omit_hidden_columns = Save / Omit Hidden Columns\r
-action.change_font = Change Font\r
-action.change_font_tree_panel = Change Font (Tree Panel)\r
-action.colour = Colour\r
-action.calculate = Calculate\r
-action.select_all = Select all\r
-action.deselect_all = Deselect all\r
-action.invert_selection = Invert selection\r
-action.using_jmol = Using Jmol\r
-action.link = Link\r
-action.group_link = Group Link\r
-action.show_chain = Show Chain\r
-action.show_group = Show Group\r
-action.fetch_db_references = Fetch DB References\r
-action.view_flanking_regions = Show flanking regions\r
-label.view_flanking_regions = Show sequence data either side of the subsequences involved in this alignment\r
-label.str = Str:\r
-label.seq = Seq:\r
-label.structures_manager = Structures Manager\r
-label.nickname = Nickname:\r
-label.url = URL:\r
-label.input_file_url = Enter URL or Input File\r
-label.select_feature = Select feature:\r
-label.name = Name\r
-label.name_param = Name: {0}\r
-label.group = Group\r
-label.group_name = Group Name\r
-label.group_description = Group Description\r
-label.edit_group_name_description = Edit Group Name/Description\r
-label.colour = Colour:\r
-label.description = Description:\r
-label.start = Start:\r
-label.end = End:\r
-label.current_parameter_set_name = Current parameter set name:\r
-label.service_action = Service Action:\r
-label.post_url = POST URL:\r
-label.url_suffix = URL Suffix\r
-label.sequence_source = Sequence Source\r
-label.per_seq = per Sequence\r
-label.result_vertically_separable = Results are vertically separable\r
-label.amend = Amend\r
-label.undo_command = Undo {0}\r
-label.redo_command = Redo {0}\r
-label.principal_component_analysis = Principal Component Analysis\r
-label.average_distance_identity = Average Distance Using % Identity\r
-label.neighbour_joining_identity = Neighbour Joining Using % Identity\r
-label.treecalc_title = {0} Using {1}\r
-label.tree_calc_av = Average Distance\r
-label.tree_calc_nj = Neighbour Joining\r
-label.select_score_model = Select score model\r
-label.score_model_pid = % Identity\r
-label.score_model_blosum62 = BLOSUM62\r
-label.score_model_pam250 = PAM 250\r
-label.score_model_conservation = Physicochemical property conservation\r
-label.score_model_enhconservation = Physicochemical property conservation\r
-label.status_bar = Status bar\r
-label.out_to_textbox = Output to Textbox\r
-label.clustalx = Clustalx\r
-label.clustal = Clustal\r
-label.zappo = Zappo\r
-label.taylor = Taylor\r
-label.blc = BLC\r
-label.fasta = Fasta\r
-label.msf = MSF\r
-label.pfam = PFAM\r
-label.pileup = Pileup\r
-label.pir = PIR\r
-label.hydrophobicity = Hydrophobicity\r
-label.helix_propensity = Helix Propensity\r
-label.strand_propensity = Strand Propensity\r
-label.turn_propensity = Turn Propensity\r
-label.buried_index = Buried Index\r
-label.purine_pyrimidine = Purine/Pyrimidine\r
-label.percentage_identity = Percentage Identity\r
-label.blosum62 = BLOSUM62\r
-label.blosum62_score = BLOSUM62 Score\r
-label.tcoffee_scores = T-Coffee Scores\r
-label.average_distance_bloslum62 = Average Distance Using BLOSUM62\r
-label.neighbour_blosum62 = Neighbour Joining Using BLOSUM62\r
-label.show_annotations = Show annotations\r
-label.colour_text = Colour Text\r
-label.show_non_conversed = Show nonconserved\r
-label.overview_window = Overview Window\r
-label.none = None\r
-label.above_identity_threshold = Above Identity Threshold\r
-label.show_sequence_features = Show Sequence Features\r
-label.nucleotide = Nucleotide\r
-label.to_new_alignment = To New Alignment\r
-label.to_this_alignment = Add To This Alignment\r
-label.apply_colour_to_all_groups = Apply Colour To All Groups\r
-label.modify_identity_thereshold = Modify Identity Threshold...\r
-label.modify_conservation_thereshold = Modify Conservation Threshold...\r
-label.input_from_textbox = Input from textbox\r
-label.centre_column_labels = Centre column labels\r
-label.automatic_scrolling = Automatic Scrolling\r
-label.documentation = Documentation\r
-label.about = About...\r
-label.show_sequence_limits = Show Sequence Limits\r
-label.feature_settings = Feature Settings...\r
-label.sequence_features = Sequence Features\r
-label.all_columns = All Columns\r
-label.all_sequences = All Sequences\r
-label.selected_columns = Selected Columns \r
-label.selected_sequences = Selected Sequences\r
-label.all_but_selected_region = All but Selected Region (Shift+Ctrl+H)\r
-label.selected_region = Selected Region\r
-label.all_sequences_columns = All Sequences and Columns\r
-label.group_consensus = Group Consensus\r
-label.group_conservation = Group Conservation\r
-label.show_consensus_histogram = Show Consensus Histogram\r
-label.show_consensus_logo = Show Consensus Logo\r
-label.norm_consensus_logo = Normalise Consensus Logo\r
-label.apply_all_groups = Apply to all groups\r
-label.autocalculated_annotation = Autocalculated Annotation\r
-label.min_colour = Minimum Colour\r
-label.max_colour = Maximum Colour\r
-label.use_original_colours = Use Original Colours\r
-label.threshold_minmax = Threshold is min/max\r
-label.represent_group_with = Represent Group with {0}\r
-label.selection = Selection\r
-label.group_colour = Group Colour\r
-label.sequence = Sequence\r
-label.view_pdb_structure = View PDB Structure\r
-label.min = Min:\r
-label.max = Max:\r
-label.colour_by_label = Colour by label\r
-label.new_feature = New Feature\r
-label.match_case = Match Case\r
-label.view_alignment_editor = View in alignment editor\r
-label.labels = Labels\r
-label.output_values = Output Values...\r
-label.output_points = Output points...\r
-label.output_transformed_points = Output transformed points\r
-label.input_data = Input Data...\r
-label.nucleotide_matrix = Nucleotide matrix\r
-label.protein_matrix = Protein matrix\r
-label.show_bootstrap_values = Show Bootstrap Values\r
-label.show_distances = Show distances\r
-label.mark_unassociated_leaves = Mark Unassociated Leaves\r
-label.fit_to_window = Fit To Window\r
-label.newick_format = Newick Format\r
-label.select_newick_like_tree_file = Select a newick-like tree file\r
-label.colours = Colours\r
-label.view_mapping = View Mapping\r
-label.wireframe = Wireframe\r
-label.depthcue = Depthcue\r
-label.z_buffering = Z Buffering\r
-label.charge_cysteine = Charge & Cysteine\r
-label.all_chains_visible = All Chains Visible\r
-label.successfully_added_features_alignment = Successfully added features to alignment\r
-label.keyboard_editing_mode = Keyboard editing mode is {0}\r
-label.paste_features_annotations_Tcoffee_here = Paste your features / annotations / T-coffee score file here.\r
-label.removed_columns = Removed {0} columns.\r
-label.removed_empty_columns = Removed {0} empty columns.\r
-label.paste_newick_tree_file = Paste your Newick tree file here.\r
-label.order_by_params = Order by {0}\r
-label.html_content = <html>{0}</html>\r
-label.paste_pdb_file= Paste your PDB file here.\r
-label.paste_pdb_file_for_sequence = Paste PDB file for sequence {0}\r
-label.could_not_parse_newick_file  = Could not parse Newick file\!\n {0}\r
-label.successfully_pasted_tcoffee_scores_to_alignment= Successfully pasted T-Coffee scores to alignment.\r
-label.failed_add_tcoffee_scores = Failed to add T-Coffee scores: \r
-label.successfully_pasted_annotation_to_alignment= Successfully pasted annotation to alignment.\r
-label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file = Couldn't parse pasted text as a valid annotation, feature, GFF, or T-Coffee score file\r
-label.successfully_pasted_alignment_file = Successfully pasted alignment file\r
-label.paste_your_alignment_file = Paste your alignment file here\r
-label.paste_your = Paste your\r
-label.finished_searching = Finished searching\r
-label.search_results= Search results {0} : {1}\r
-label.found_match_for = Found match for {0}\r
-label.font = Font:\r
-label.size = Size:\r
-label.style = Style:\r
-label.enter_redundancy_threshold = Enter the redundancy threshold\r
-label.calculating = Calculating....\r
-label.modify_conservation_visibility = Modify conservation visibility\r
-label.colour_residues_above_occurence = Colour residues above % occurence\r
-label.set_this_label_text = set this label text\r
-label.sequences_from = Sequences from {0}\r
-label.successfully_loaded_file  = Successfully loaded file {0}\r
-label.successfully_saved_to_file_in_format = Successfully saved to file: {0} in {1} format.\r
-label.copied_sequences_to_clipboard = Copied {0} sequences to clipboard.\r
-label.check_file_matches_sequence_ids_alignment = Check that the file matches sequence IDs in the alignment.\r
-label.problem_reading_tcoffee_score_file = Problem reading T-COFFEE score file\r
-label.source_to_target = {0} ... {1}\r
-label.per_sequence_only= Per-sequence only\r
-label.to_file = to File\r
-label.to_textbox = to Textbox\r
-label.jalview = Jalview\r
-label.csv_spreadsheet = CSV (Spreadsheet)\r
-label.status = Status\r
-label.channels = Channels\r
-label.channel_title_item_count = {0} ({1})\r
-label.blog_item_published_on_date = {0} {1} \r
-label.select_das_service_from_table = Select a DAS service from the table to read a full description here.</font></html>\r
-label.session_update = Session Update\r
-label.new_vamsas_session = New Vamsas Session\r
-label.load_vamsas_session = Load Vamsas Session\r
-label.save_vamsas_session = Save Vamsas Session\r
-label.select_vamsas_session_opened_as_new_vamsas_session= Select a vamsas session to be opened as a new vamsas session.\r
-label.open_saved_vamsas_session = Open a saved VAMSAS session\r
-label.groovy_console = Groovy Console...\r
-label.lineart = Lineart\r
-label.dont_ask_me_again = Don't ask me again\r
-label.select_eps_character_rendering_style = Select EPS character rendering style\r
-label.invert_selection = Invert Selection\r
-label.optimise_order = Optimise Order\r
-label.seq_sort_by_score = Seq sort by Score\r
-label.load_colours = Load Colours\r
-label.save_colours = Save Colours\r
-label.fetch_das_features = Fetch DAS Features\r
-label.selected_database_to_fetch_from = Selected {0} database {1} to fetch from {2} \r
-label.database_param = Database: {0}\r
-label.example = Example\r
-label.example_param = Example: {0}\r
-label.select_file_format_before_saving = You must select a file format before saving!\r
-label.file_format_not_specified = File format not specified\r
-label.alignment_contains_hidden_columns = The Alignment contains hidden columns.\nDo you want to save only the visible alignment?\r
-label.couldnt_save_file = Couldn't save file: {0}\r
-label.error_saving_file = Error Saving File\r
-label.remove_from_default_list = Remove from default list?\r
-label.remove_user_defined_colour = Remove user defined colour\r
-label.you_must_select_least_two_sequences = You must select at least 2 sequences.\r
-label.invalid_selection = Invalid Selection\r
-label.principal_component_analysis_must_take_least_four_input_sequences = Principal component analysis must take\nat least 4 input sequences.\r
-label.sequence_selection_insufficient = Sequence selection insufficient\r
-label.you_need_more_two_sequences_selected_build_tree = You need to have more than two sequences selected to build a tree!\r
-label.not_enough_sequences = Not enough sequences\r
-label.selected_region_to_tree_may_only_contain_residues_or_gaps =  The selected region to create a tree may\nonly contain residues or gaps.\nTry using the Pad function in the edit menu,\nor one of the multiple sequence alignment web services.\r
-label.sequences_selection_not_aligned = Sequences in selection are not aligned\r
-label.sequences_must_be_aligned_before_creating_tree = The sequences must be aligned before creating a tree.\nTry using the Pad function in the edit menu,\n or one of the multiple sequence alignment web services.\r
-label.sequences_not_aligned = Sequences not aligned\r
-label.problem_reading_tree_file =  Problem reading tree file\r
-label.possible_problem_with_tree_file = Possible problem with tree file\r
-label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation = Please select at least three bases in at least one sequence in order to perform a cDNA translation.\r
-label.translation_failed = Translation Failed\r
-label.error_when_translating_sequences_submit_bug_report = Unfortunately, something went wrong when translating your sequences.\nPlease take a look in the Jalview java console\nand submit a bug report including the stacktrace.\r
-label.implementation_error  = Implementation error:\r
-label.automatically_associate_pdb_files_with_sequences_same_name = Do you want to automatically associate the {0} PDB files with sequences in the alignment that have the same name?\r
-label.automatically_associate_pdb_files_by_name = Automatically Associate PDB files by name\r
-label.ignore_unmatched_dropped_files_info = <html>Do you want to <em>ignore</em> the {0} files whose names did not match any sequence IDs ?</html>\r
-label.ignore_unmatched_dropped_files = Ignore unmatched dropped files?\r
-label.enter_view_name = Enter View Name\r
-label.enter_label = Enter label\r
-label.enter_label_for_the_structure = Enter a label for the structure?\r
-label.pdb_entry_is_already_displayed = {0} is already displayed.\nDo you want to re-use this viewer ?\r
-label.map_sequences_to_visible_window = Map Sequences to Visible Window: {0}\r
-label.add_pdbentry_to_view = Do you want to add {0} to the view called\n{1}\n\r
-label.align_to_existing_structure_view = Align to existing structure view\r
-label.pdb_entries_couldnt_be_retrieved = The following pdb entries could not be retrieved from the PDB\:\n{0}\nPlease try downloading them manually.\r
-label.couldnt_load_file = Couldn't load file\r
-label.couldnt_find_pdb_id_in_file = Couldn't find a PDB id in the file supplied. Please enter an Id to identify this structure.\r
-label.no_pdb_id_in_file = No PDB Id in File\r
-label.couldnt_read_pasted_text = Couldn't read the pasted text {0}\r
-label.error_parsing_text = Error parsing text\r
-label.enter_local_das_source = Enter Nickname & URL of Local DAS Source\r
-label.you_can_only_edit_or_remove_local_das_sources = You can only edit or remove local DAS Sources!\r
-label.public_das_source = Public DAS source - not editable\r
-label.input_alignment_from_url = Input Alignment From URL\r
-label.input_alignment = Input Alignment\r
-label.couldnt_import_as_vamsas_session = Couldn't import {0} as a new vamsas session.\r
-label.vamsas_document_import_failed = Vamsas Document Import Failed\r
-label.couldnt_locate = Couldn't locate {0}\r
-label.url_not_found = URL not found\r
-label.no_link_selected = No link selected\r
-label.new_sequence_url_link = New sequence URL link\r
-label.cannot_edit_annotations_in_wrapped_view = Cannot edit annotations in wrapped view\r
-label.wrapped_view_no_edit = Wrapped view - no edit\r
-label.error_retrieving_data = Error Retrieving Data\r
-label.user_colour_scheme_must_have_name = User colour scheme must have a name\r
-label.no_name_colour_scheme = No name for colour scheme\r
-label.invalid_url = Invalid URL !\r
-label.error_loading_file = Error loading file\r
-label.problems_opening_file = Encountered problems opening {0}!!\r
-label.file_open_error = File open error\r
-label.no_das_sources_selected_warn = No das sources were selected.\nPlease select some sources and\ntry again.\r
-label.no_das_sources_selected_title = No DAS Sources Selected\r
-label.colour_scheme_exists_overwrite = Colour scheme {0} exists.\nContinue saving colour scheme as {1}?"\r
-label.duplicate_scheme_name = Duplicate scheme name\r
-label.jalview_new_questionnaire = There is a new Questionnaire available. Would you like to complete it now ?\n\r
-label.jalview_user_survey = Jalview User Survey\r
-label.alignment_properties = Alignment Properties: {0}\r
-label.alignment_props = Alignment Properties\r
-label.input_cut_paste = Cut & Paste Input\r
-label.input_cut_paste_params = Cut & Paste Input - {0}\r
-label.alignment_output_command = Alignment output - {0}\r
-label.annotations = Annotations\r
-label.features = Features\r
-label.overview_params = Overview {0}\r
-label.paste_newick_file = Paste Newick file\r
-label.load_tree_from_file = From File - \r
-label.colour_by_annotation = Colour by Annotation\r
-label.selection_output_command = Selection output - {0}\r
-label.annotation_for_displayid = <p><h2>Annotation for {0} </h2></p><p>\r
-label.pdb_sequence_mapping = PDB - Sequence Mapping\r
-label.pca_details = PCA details\r
-label.redundancy_threshold_selection = Redundancy threshold selection\r
-label.user_defined_colours = User defined colours\r
-label.jalviewLite_release = JalviewLite - Release {0}\r
-label.jaview_build_date = Build date: {0}\r
-label.jalview_authors_1 = Authors: :  Jim Procter, Andrew Waterhouse, Lauren Lui, Jan Engelhardt, Natasha Sherstnev,\r
-label.jalview_authors_2 = Daniel Barton, Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton.\r
-label.jalview_dev_managers = Development managed by The Barton Group, University of Dundee, Scotland, UK.\r
-label.jalview_distribution_lists = For help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list\r
-label.jalview_please_cite = If  you use Jalview, please cite:\r
-label.jalview_cite_1_authors = Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)\r
-label.jalview_cite_1_title = Jalview Version 2 - a multiple sequence alignment editor and analysis workbench\r
-label.jalview_cite_1_ref = Bioinformatics doi: 10.1093/bioinformatics/btp033\r
-label.right_click = Right click\r
-label.to_add_annotation = to add annotation\r
-label.alignment_has_no_annotations = Alignment has no annotations\r
-label.retrieving_pdb_data = Retrieving PDB data...\r
-label.label = Label\r
-label.no_features_added_to_this_alignment = No Features added to this alignment!!\r
-label.features_can_be_added_from_searches_1 = (Features can be added from searches or\r
-label.features_can_be_added_from_searches_2 = from Jalview / GFF features files)\r
-label.calculating_pca= Calculating PCA\r
-label.reveal_columns = Reveal Columns\r
-label.jalview_cannot_open_file = Jalview can't open file\r
-label.jalview_applet = Jalview applet\r
-label.loading_data = Loading data\r
-label.memory_stats = Total Free Memory: {0} MB; Max Memory: {1} MB; {2} %\r
-label.calculating_tree = Calculating tree\r
-label.state_queueing = queuing\r
-label.state_running = running\r
-label.state_complete = complete\r
-label.state_completed = finished\r
-label.state_job_cancelled = job cancelled!!\r
-label.state_job_error = job error!\r
-label.server_error_try_later = Server Error! (try later)\r
-label.error_loading_pdb_data = Error loading PDB data!!\r
-label.fetching_pdb_data = Fetching PDB data...\r
-label.structure_type = Structure type\r
-label.settings_for_type = Settings for {0}\r
-label.view_full_application = View in Full Application\r
-label.load_associated_tree = Load Associated Tree ...\r
-label.load_features_annotations = Load Features/Annotations ...\r
-label.export_features = Export Features\r
-label.export_annotations = Export Annotations\r
-label.jalview_copy = Copy (Jalview Only)\r
-label.jalview_cut = Cut (Jalview Only)\r
-label.to_upper_case = To Upper Case\r
-label.to_lower_case = To Lower Case\r
-label.toggle_case = Toggle Case\r
-label.edit_name_description = Edit Name/Description ...\r
-label.create_sequence_feature = Create Sequence Feature ...\r
-label.edit_sequence = Edit Sequence\r
-label.edit_sequences = Edit Sequences\r
-label.sequence_details = Sequence Details\r
-label.jmol_help = Jmol Help\r
-label.all = All\r
-label.sort_by = Sort by\r
-label.sort_by_score = Sort by Score\r
-label.sort_by_density = Sort by Density\r
-label.sequence_sort_by_density = Sequence sort by Density\r
-label.reveal = Reveal\r
-label.hide_columns = Hide Columns\r
-label.load_jalview_annotations = Load Jalview Annotations or Features File\r
-label.load_tree_file = Load a tree file\r
-label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences = Retrieve and parse sequence database records for the alignment or the currently selected sequences\r
-label.standard_databases = Standard Databases\r
-label.fetch_embl_uniprot = Fetch from EMBL/EMBLCDS or Uniprot/PDB and any selected DAS sources\r
-label.reset_min_max_colours_to_defaults = Reset min and max colours to defaults from user preferences.\r
-label.align_structures_using_linked_alignment_views = Align structures using {0} linked alignment views\r
-label.connect_to_session = Connect to session {0}\r
-label.threshold_feature_display_by_score = Threshold the feature display by score.\r
-label.threshold_feature_no_thereshold = No Threshold\r
-label.threshold_feature_above_thereshold = Above Threshold\r
-label.threshold_feature_below_thereshold = Below Threshold\r
-label.adjust_thereshold = Adjust threshold\r
-label.toggle_absolute_relative_display_threshold = Toggle between absolute and relative display threshold.\r
-label.display_features_same_type_different_label_using_different_colour = Display features of the same type with a different label using a different colour. (e.g. domain features)\r
-label.select_colour_minimum_value = Select Colour for Minimum Value\r
-label.select_colour_maximum_value = Select Colour for Maximum Value\r
-label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment = Open a new Jmol view with all structures associated with the current selection and superimpose them using the alignment.\r
-label.open_url_param = Open URL {0}\r
-label.open_url_seqs_param = Open URL ({0}..) ({1} seqs)\r
-label.load_pdb_file_associate_with_sequence = Load a PDB file and associate it with sequence {0}\r
-label.reveal_hidden_columns = Reveal Hidden Columns with Right Mouse Button\r
-label.dark_colour = Dark Colour\r
-label.light_colour = Light Colour\r
-label.highlightnode = Left click to select leaves.<br>Double-click to invert leaves.<br>Right click to change colour.\r
-label.load_colour_scheme = Load colour scheme\r
-label.toggle_enabled_views = When enabled, allows many views to be selected.\r
-label.edit_notes_parameter_set = Click to edit the notes for this parameter set.\r
-label.open_local_file = Open local file\r
-label.enable_automatically_sort_alignment_when_open_new_tree = Enable this to automatically sort<br>the alignment when you open<br> a new tree.\r
-label.listen_for_selections = Listen for selections\r
-label.selections_mirror_selections_made_same_sequences_other_views = When selected, selections in this view will mirror<br>selections made on the same sequences in other views.\r
-label.toggle_sequence_visibility = Shift+H toggles sequence visiblity\r
-label.toggle_columns_visibility = Ctrl+H toggles column visiblity.\r
-label.toggles_visibility_hidden_selected_regions = H toggles visibility of hidden or selected regions\r
-label.rename_tab_eXpand_reGroup=  Right-click to rename tab <br> Press X to eXpand tabs, G to reGroup.\r
-label.right_align_sequence_id = Right Align Sequence Id\r
-label.sequence_id_tooltip = Sequence ID Tooltip\r
-label.no_services = <No Services>\r
-label.select_copy_raw_html = Select this if you want to copy raw html\r
-label.share_data_vamsas_applications = Share data with other vamsas applications\r
-label.connect_to = Connect to\r
-label.join_existing_vamsas_session = Join an existing vamsas session\r
-label.from_url = from URL\r
-label.any_trees_calculated_or_loaded_alignment_automatically_sort = When selected, any trees calculated or loaded onto the alignment will automatically sort the alignment\r
-label.sort_with_new_tree = Sort With New Tree\r
-label.from_textbox = from Textbox\r
-label.window = Window\r
-label.preferences = Preferences\r
-label.tools = Tools\r
-label.fetch_sequences = Fetch Sequence(s)\r
-label.stop_vamsas_session = Stop Vamsas Session\r
-label.collect_garbage = Collect Garbage\r
-label.show_memory_usage = Show Memory Usage\r
-label.show_java_console = Show Java Console\r
-label.show_jalview_news = Show Jalview News\r
-label.take_snapshot = Take snapshot\r
-label.monospaced_fonts_faster_to_render = Monospaced fonts are faster to render\r
-label.anti_alias_fonts = Anti-alias Fonts (Slower to render)\r
-label.monospaced_font= Monospaced\r
-label.quality = Quality\r
-label.maximize_window = Maximize Window\r
-label.conservation = Conservation\r
-label.consensus = Consensus\r
-label.histogram = Histogram\r
-label.logo = Logo\r
-label.non_positional_features = Non-positional Features\r
-label.database_references = Database References\r
-label.share_selection_across_views = Share selection across views\r
-label.scroll_highlighted_regions = Scroll to highlighted regions\r
-label.gap_symbol = Gap Symbol\r
-label.alignment_colour = Alignment Colour\r
-label.address = Address\r
-label.port = Port\r
-label.default_browser_unix = Default Browser (Unix)\r
-label.send_usage_statistics = Send usage statistics\r
-label.check_for_questionnaires = Check for questionnaires\r
-label.check_for_latest_version = Check for latest version\r
-label.url_linkfrom_sequence_id = URL link from Sequence ID\r
-label.use_proxy_server = Use a proxy server\r
-label.eps_rendering_style = EPS rendering style\r
-label.append_start_end = Append /start-end (/15-380)\r
-label.full_sequence_id = Full Sequence Id\r
-label.smooth_font = Smooth Font\r
-label.autocalculate_consensus = AutoCalculate Consensus\r
-label.pad_gaps = Pad Gaps\r
-label.pad_gaps_when_editing = Pad Gaps When Editing\r
-label.automatically_set_id_width = Automatically set ID width\r
-label.figure_id_column_width = Figure ID column width\r
-label.use_modeller_output = Use Modeller Output\r
-label.wrap_alignment = Wrap Alignment\r
-label.right_align_ids = Right Align Ids\r
-label.sequence_name_italics = Sequence Name Italics\r
-label.open_overview = Open Overview\r
-label.default_colour_scheme_for_alignment = Default Colour Scheme for alignment\r
-label.annotation_shading_default = Annotation Shading Default\r
-label.default_minimum_colour_annotation_shading = Default Minimum Colour for annotation shading\r
-label.default_maximum_colour_annotation_shading = Default Maximum Colour for annotation shading\r
-label.visual = Visual\r
-label.connections = Connections\r
-label.output = Output\r
-label.editing = Editing\r
-label.das_settings = DAS Settings\r
-label.web_services = Web Services\r
-label.right_click_to_edit_currently_selected_parameter = Right click to edit currently selected parameter.\r
-label.let_jmol_manage_structure_colours = Let Jmol manage structure colours\r
-label.marks_leaves_tree_not_associated_with_sequence = Marks leaves of tree not associated with a sequence\r
-label.index_web_services_menu_by_host_site = Index web services in menu by the host site\r
-label.option_want_informed_web_service_URL_cannot_be_accessed_jalview_when_starts_up = Check this option if you want to be informed<br>when a web service URL cannot be accessed by Jalview<br>when it starts up\r
-label.new_service_url = New Service URL\r
-label.edit_service_url = Edit Service URL\r
-label.delete_service_url = Delete Service URL\r
-label.details = Details\r
-label.options = Options\r
-label.parameters = Parameters\r
-label.available_das_sources = Available DAS Sources\r
-label.full_details = Full Details\r
-label.authority = Authority\r
-label.type = Type\r
-label.proxy_server = Proxy Server\r
-label.file_output = File Output\r
-label.select_input_type = Select input type\r
-label.set_options_for_type = Set options for type\r
-label.data_input_parameters = Data input parameters\r
-label.data_returned_by_service = Data returned by service\r
-label.rsbs_encoded_service = RSBS Encoded Service\r
-label.parsing_errors = Parsing errors\r
-label.simple_bioinformatics_rest_services = Simple Bioinformatics Rest Services\r
-label.web_service_discovery_urls = Web Service Discovery URLS\r
-label.input_parameter_name = Input Parameter name\r
-label.short_descriptive_name_for_service = Short descriptive name for service\r
-label.function_service_performs = What kind of function the service performs (e.g. alignment, analysis, search, etc).\r
-label.brief_description_service = Brief description of service\r
-label.url_post_data_service = URL to post data to service. Include any special parameters needed here\r
-label.optional_suffix = Optional suffix added to URL when retrieving results from service\r
-label.preferred_gap_character = Which gap character does this service prefer?\r
-label.gap_character = Gap character\r
-label.move_return_type_up_order= Move return type up order\r
-label.move_return_type_down_order= Move return type down order\r
-label.update_user_parameter_set = Update this existing user parameter set\r
-label.delete_user_parameter_set = Delete the currently selected user parameter set\r
-label.create_user_parameter_set = Create a new parameter set with the current settings.\r
-label.revert_changes_user_parameter_set = Undo all changes to the current parameter set\r
-label.start_job_current_settings = Start Job with current settings\r
-label.cancel_job_close_dialog = Close this dialog and cancel job\r
-label.input_output = Input/Output\r
-label.cut_paste = Cut'n'Paste\r
-label.adjusting_parameters_for_calculation = Adjusting parameters for existing Calculation\r
-label.2d_rna_structure_line = 2D RNA {0}\r
-label.2d_rna_sequence_name = 2D RNA - {0}\r
-label.edit_name_and_description_current_group = Edit name and description of current group.\r
-label.view_structure_for = View structure for {0}\r
-label.view_all_structures = View all {0} structures.\r
-label.view_all_representative_structures = View all {0} representative structures.\r
-label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment = Opens a new Jmol view with all representative structures\nassociated with the current selection\nsuperimposed with the current alignment.\r
-label.associate_structure_with_sequence = Associate Structure with Sequence\r
-label.from_file = from file\r
-label.enter_pdb_id = Enter PDB Id\r
-label.discover_pdb_ids = Discover PDB ids\r
-label.text_colour = Text Colour\r
-label.structure = Structure\r
-label.view_structure = View Structure\r
-label.clustalx_colours = Clustalx colours\r
-label.above_identity_percentage = Above % Identity\r
-label.create_sequence_details_report_annotation_for = Annotation for {0}\r
-label.sequece_details_for = Sequece Details for {0}\r
-label.sequence_name = Sequence Name\r
-label.sequence_description = Sequence Description\r
-label.edit_sequence_name_description = Edit Sequence Name/Description\r
-label.spaces_converted_to_backslashes = Spaces have been converted to _\r
-label.no_spaces_allowed_sequence_name = No spaces allowed in Sequence Name\r
-label.select_outline_colour = Select Outline Colour\r
-label.web_browser_not_found_unix = Unixers\: Couldn't find default web browser.\nAdd the full path to your browser in Preferences."\r
-label.web_browser_not_found = Web browser not found\r
-label.select_pdb_file_for = Select a PDB file for {0}\r
-label.html = HTML\r
-label.wrap = Wrap\r
-label.show_database_refs = Show Database Refs\r
-label.show_non_positional_features = Show Non-Positional Features\r
-label.save_png_image = Save As PNG Image\r
-label.load_tree_for_sequence_set = Load a tree for this sequence set\r
-label.export_image = Export Image\r
-label.vamsas_store = VAMSAS store\r
-label.translate_cDNA = Translate cDNA\r
-label.extract_scores = Extract Scores\r
-label.get_cross_refs = Get Cross References\r
-label.sort_alignment_new_tree = Sort Alignment With New Tree\r
-label.add_sequences = Add Sequences\r
-label.new_window = New Window\r
-label.refresh_available_sources = Refresh Available Sources\r
-label.use_registry = Use Registry\r
-label.add_local_source = Add Local Source\r
-label.set_as_default = Set as Default\r
-label.show_labels = Show labels\r
-label.background_colour = Background Colour\r
-label.associate_nodes_with = Associate Nodes With\r
-label.jalview_pca_calculation = Jalview PCA Calculation\r
-label.link_name = Link Name\r
-label.pdb_file = PDB file\r
-label.colour_with_jmol = Colour with Jmol\r
-label.align_structures = Align structures\r
-label.jmol = Jmol\r
-label.sort_alignment_by_tree = Sort Alignment By Tree\r
-label.mark_unlinked_leaves = Mark Unlinked Leaves\r
-label.associate_leaves_with = Associate Leaves With\r
-label.save_colour_scheme_with_unique_name_added_to_colour_menu = Save your colour scheme with a unique name and it will be added to the Colour menu\r
-label.case_sensitive = Case Sensitive\r
-label.lower_case_colour = Lower Case Colour\r
-label.index_by_host = Index by host\r
-label.index_by_type = Index by type\r
-label.enable_jabaws_services = Enable JABAWS Services\r
-label.display_warnings = Display warnings\r
-label.move_url_up = Move URL up\r
-label.move_url_down = Move URL down\r
-label.add_sbrs_definition = Add a SBRS definition\r
-label.edit_sbrs_definition = Edit SBRS definition\r
-label.delete_sbrs_definition = Delete SBRS definition\r
-label.your_sequences_have_been_verified = Your sequences have been verified against known sequence databases. Some of the ids have been\n altered, most likely the start/end residue will have been updated.\n Save your alignment to maintain the updated id.\n\n\r
-label.sequence_names_updated = Sequence names updated\r
-label.dbref_search_completed = DBRef search completed\r
-label.show_all_chains = Show all chains\r
-label.fetch_all_param = Fetch all {0}\r
-label.paste_new_window = Paste To New Window\r
-label.settings_for_param = Settings for {0}\r
-label.view_params = View {0}\r
-label.select_all_views = Select all views\r
-label.align_sequences_to_existing_alignment = Align sequences to an existing alignment\r
-label.realign_with_params = Realign with {0}\r
-label.calcname_with_default_settings = {0} with Defaults\r
-label.action_with_default_settings = {0} with default settings\r
-label.edit_settings_and_run = Edit settings and run...\r
-label.view_and_change_parameters_before_alignment = View and change the parameters before alignment\r
-label.run_with_preset_params = Run {0} with preset\r
-label.view_and_change_parameters_before_running_calculation = View and change parameters before running calculation\r
-label.view_documentation = View documentation\r
-label.select_return_type = Select return type\r
-label.translation_of_params = Translation of {0}\r
-label.features_for_params = Features for - {0}\r
-label.annotations_for_params = Annotations for - {0}\r
-label.generating_features_for_params = Generating features for - {0}\r
-label.generating_annotations_for_params = Generating annotations for - {0}\r
-label.varna_params = VARNA - {0}\r
-label.sequence_feature_settings = Sequence Feature Settings\r
-label.pairwise_aligned_sequences = Pairwise Aligned Sequences\r
-label.original_data_for_params = Original Data for {0}\r
-label.points_for_params = Points for {0}\r
-label.transformed_points_for_params = Transformed points for {0}\r
-label.graduated_color_for_params = Graduated Feature Colour for {0}\r
-label.select_backgroud_colour = Select Background Colour\r
-label.invalid_font = Invalid Font\r
-label.separate_multiple_accession_ids = Separate multiple accession ids with semi colon ";"\r
-label.replace_commas_semicolons = Replace commas with semi-colons\r
-label.parsing_failed_syntax_errors_shown_below_param = Parsing failed. Syntax errors shown below {0}\r
-label.parsing_failed_unrecoverable_exception_thrown_param = \nParsing failed. An unrecoverable exception was thrown\:\n {0}\r
-label.example_query_param = Example query: {0}\r
-label.enter_value_increase_conservation_visibility = Enter value to increase conservation visibility\r
-label.enter_percentage_identity_above_which_colour_residues = Enter % identity above which to colour residues\r
-label.wswublast_client_credits = To display sequence features an exact Uniprot id with 100% sequence identity match must be entered.\nIn order to display these features, try changing the names of your sequences to the ids suggested below.\n\nRunning WSWUBlast at EBI.\nPlease quote Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez R.\nSOAP-based services provided by the European Bioinformatics Institute.\nNucleic Acids Res. 33(1)\:W25-W28 (2005));\r
+action.refresh_services = Refresh Services
+action.reset_services = Reset Services
+action.merge_results = Merge Results
+action.load_scheme = Load scheme
+action.save_scheme = Save scheme
+action.save_image = Save Image
+action.paste = Paste
+action.show_html_source = Show HTML Source
+action.print = Print
+action.web_service = Web Service
+action.cancel_job = Cancel Job
+action.start_job = Start Job
+action.revert = Revert
+action.move_down = Move Down
+action.move_up = Move Up
+action.remove_return_datatype = Remove return datatype
+action.add_return_datatype = Add return datatype
+action.remove_input_parameter = Remove selected input parameter
+action.add_input_parameter = Add input parameter
+action.edit = Edit
+action.new = New
+action.open_file = Open file
+action.show_unconserved = Show Unconserved
+action.open_new_aligmnent = Open new alignment
+action.raise_associated_windows = Raise Associated Windows
+action.minimize_associated_windows = Minimize Associated Windows
+action.close_all = Close all
+action.load_project = Load Project
+action.save_project = Save Project
+action.quit = Quit
+action.expand_views = Expand Views
+action.gather_views = Gather Views
+action.page_setup = Page Setup
+action.reload = Reload
+action.load = Load
+action.open = Open
+action.cancel = Cancel
+action.create = Create
+action.update = Update
+action.delete = Delete
+action.snapshot = Snapshot
+action.clear = Clear
+action.accept = Accept
+action.select_ddbb = --- Select Database ---
+action.undo = Undo
+action.redo = Redo
+action.reset = Reset
+action.remove_left = Remove left
+action.remove_right = Remove right
+action.remove_empty_columns = Remove Empty Columns
+action.remove_all_gaps = Remove All Gaps
+action.left_justify_alignment = Left Justify Alignment
+action.right_justify_alignment = Right Justify Alignment
+action.boxes = Boxes
+action.text = Text
+action.by_pairwise_id = by Pairwise Identity
+action.by_id = by Id
+action.by_length = by Length
+action.by_group = by Group
+action.remove = Remove
+action.remove_redundancy = Remove Redundancy
+action.pairwise_alignment = Pairwise Alignments...
+action.by_rna_helixes = by RNA Helices
+action.user_defined = User Defined...
+action.by_conservation = By Conservation
+action.wrap = Wrap
+action.show_gaps = Show Gaps
+action.show_hidden_markers = Show Hidden Markers
+action.find = Find
+action.undefine_groups = Undefine Groups
+action.create_groups = Create Groups
+action.make_groups_selection = Make Groups For Selection
+action.copy = Copy
+action.cut = Cut
+action.font = Font...
+action.scale_above = Scale Above
+action.scale_left = Scale Left
+action.scale_right = Scale Right
+action.by_tree_order = By Tree Order
+action.sort = Sort
+action.calculate_tree = Calculate Tree
+action.help = Help
+action.by_annotation = by Annotation...
+action.invert_sequence_selection = Invert Sequence Selection
+action.invert_column_selection = Invert Column Selection
+action.show = Show
+action.hide = Hide
+action.ok = OK
+action.set_defaults = Defaults
+action.create_group = Create Group
+action.remove_group = Remove Group
+action.edit_group = Edit Group
+action.border_colour = Border colour
+action.edit_new_group = Edit New Group
+action.hide_sequences = Hide Sequences
+action.sequences = Sequences
+action.ids = IDS
+action.ids_sequences = IDS and sequences
+action.reveal_all = Reveal All
+action.reveal_sequences = Reveal Sequences
+action.find_all = Find all
+action.find_next = Find next
+action.file = File
+action.view = View
+action.change_params = Change Parameters
+action.apply = Apply
+action.apply_threshold_all_groups = Apply threshold to all groups
+action.apply_all_groups = Apply to all Groups
+action.by_chain = By chain
+action.by_sequence = By Sequence
+action.paste_annotations = Paste Annotations
+action.format = Format
+action.select = Select
+action.new_view = New View
+action.close = Close
+action.add = Add
+action.save_as_default = Save as default
+action.save_as = Save as
+action.save = Save
+action.cancel_fetch = Cancel Fetch
+action.save_omit_hidden_columns = Save / Omit Hidden Columns
+action.change_font = Change Font
+action.change_font_tree_panel = Change Font (Tree Panel)
+action.colour = Colour
+action.calculate = Calculate
+action.select_all = Select all
+action.deselect_all = Deselect all
+action.invert_selection = Invert selection
+action.using_jmol = Using Jmol
+action.link = Link
+action.group_link = Group Link
+action.show_chain = Show Chain
+action.show_group = Show Group
+action.fetch_db_references = Fetch DB References
+action.view_flanking_regions = Show flanking regions
+label.view_flanking_regions = Show sequence data either side of the subsequences involved in this alignment
+label.str = Str:
+label.seq = Seq:
+label.structures_manager = Structures Manager
+label.nickname = Nickname:
+label.url = URL:
+label.input_file_url = Enter URL or Input File
+label.select_feature = Select feature:
+label.name = Name
+label.name_param = Name: {0}
+label.group = Group
+label.group_name = Group Name
+label.group_description = Group Description
+label.edit_group_name_description = Edit Group Name/Description
+label.colour = Colour:
+label.description = Description:
+label.start = Start:
+label.end = End:
+label.current_parameter_set_name = Current parameter set name:
+label.service_action = Service Action:
+label.post_url = POST URL:
+label.url_suffix = URL Suffix
+label.sequence_source = Sequence Source
+label.per_seq = per Sequence
+label.result_vertically_separable = Results are vertically separable
+label.amend = Amend
+label.undo_command = Undo {0}
+label.redo_command = Redo {0}
+label.principal_component_analysis = Principal Component Analysis
+label.average_distance_identity = Average Distance Using % Identity
+label.neighbour_joining_identity = Neighbour Joining Using % Identity
+label.treecalc_title = {0} Using {1}
+label.tree_calc_av = Average Distance
+label.tree_calc_nj = Neighbour Joining
+label.select_score_model = Select score model
+label.score_model_pid = % Identity
+label.score_model_blosum62 = BLOSUM62
+label.score_model_pam250 = PAM 250
+label.score_model_conservation = Physicochemical property conservation
+label.score_model_enhconservation = Physicochemical property conservation
+label.status_bar = Status bar
+label.out_to_textbox = Output to Textbox
+label.clustalx = Clustalx
+label.clustal = Clustal
+label.zappo = Zappo
+label.taylor = Taylor
+label.blc = BLC
+label.fasta = Fasta
+label.msf = MSF
+label.pfam = PFAM
+label.pileup = Pileup
+label.pir = PIR
+label.hydrophobicity = Hydrophobicity
+label.helix_propensity = Helix Propensity
+label.strand_propensity = Strand Propensity
+label.turn_propensity = Turn Propensity
+label.buried_index = Buried Index
+label.purine_pyrimidine = Purine/Pyrimidine
+label.percentage_identity = Percentage Identity
+label.blosum62 = BLOSUM62
+label.blosum62_score = BLOSUM62 Score
+label.tcoffee_scores = T-Coffee Scores
+label.average_distance_bloslum62 = Average Distance Using BLOSUM62
+label.neighbour_blosum62 = Neighbour Joining Using BLOSUM62
+label.show_annotations = Show annotations
+label.hide_annotations = Hide annotations
+label.show_all_annotations = Show all annotations
+label.hide_all_annotations = Hide all annotations
+label.hide_all = Hide all
+label.add_reference_annotations = Add reference annotations
+label.find_tip = Search alignment, selection or sequence ids for a subsequence (ignoring gaps).<br>Accepts regular expressions - search Help for 'regex' for details.
+label.colour_text = Colour Text
+label.show_non_conversed = Show nonconserved
+label.overview_window = Overview Window
+label.none = None
+label.above_identity_threshold = Above Identity Threshold
+label.show_sequence_features = Show Sequence Features
+label.nucleotide = Nucleotide
+label.to_new_alignment = To New Alignment
+label.to_this_alignment = Add To This Alignment
+label.apply_colour_to_all_groups = Apply Colour To All Groups
+label.modify_identity_thereshold = Modify Identity Threshold...
+label.modify_conservation_thereshold = Modify Conservation Threshold...
+label.input_from_textbox = Input from textbox
+label.centre_column_labels = Centre column labels
+label.automatic_scrolling = Automatic Scrolling
+label.documentation = Documentation
+label.about = About...
+label.show_sequence_limits = Show Sequence Limits
+label.feature_settings = Feature Settings...
+label.sequence_features = Sequence Features
+label.all_columns = All Columns
+label.all_sequences = All Sequences
+label.selected_columns = Selected Columns 
+label.selected_sequences = Selected Sequences
+label.all_but_selected_region = All but Selected Region (Shift+Ctrl+H)
+label.selected_region = Selected Region
+label.all_sequences_columns = All Sequences and Columns
+label.group_consensus = Group Consensus
+label.group_conservation = Group Conservation
+label.show_consensus_histogram = Show Consensus Histogram
+label.show_consensus_logo = Show Consensus Logo
+label.norm_consensus_logo = Normalise Consensus Logo
+label.apply_all_groups = Apply to all groups
+label.autocalculated_annotation = Autocalculated Annotation
+label.min_colour = Minimum Colour
+label.max_colour = Maximum Colour
+label.use_original_colours = Use Original Colours
+label.threshold_minmax = Threshold is min/max
+label.represent_group_with = Represent Group with {0}
+label.selection = Selection
+label.group_colour = Group Colour
+label.sequence = Sequence
+label.view_pdb_structure = View PDB Structure
+label.min = Min:
+label.max = Max:
+label.colour_by_label = Colour by label
+label.new_feature = New Feature
+label.match_case = Match Case
+label.view_alignment_editor = View in alignment editor
+label.labels = Labels
+label.output_values = Output Values...
+label.output_points = Output points...
+label.output_transformed_points = Output transformed points
+label.input_data = Input Data...
+label.nucleotide_matrix = Nucleotide matrix
+label.protein_matrix = Protein matrix
+label.show_bootstrap_values = Show Bootstrap Values
+label.show_distances = Show distances
+label.mark_unassociated_leaves = Mark Unassociated Leaves
+label.fit_to_window = Fit To Window
+label.newick_format = Newick Format
+label.select_newick_like_tree_file = Select a newick-like tree file
+label.colours = Colours
+label.view_mapping = View Mapping
+label.wireframe = Wireframe
+label.depthcue = Depthcue
+label.z_buffering = Z Buffering
+label.charge_cysteine = Charge & Cysteine
+label.all_chains_visible = All Chains Visible
+label.successfully_added_features_alignment = Successfully added features to alignment
+label.keyboard_editing_mode = Keyboard editing mode is {0}
+label.paste_features_annotations_Tcoffee_here = Paste your features / annotations / T-coffee score file here.
+label.removed_columns = Removed {0} columns.
+label.removed_empty_columns = Removed {0} empty columns.
+label.paste_newick_tree_file = Paste your Newick tree file here.
+label.order_by_params = Order by {0}
+label.html_content = <html>{0}</html>
+label.paste_pdb_file= Paste your PDB file here.
+label.paste_pdb_file_for_sequence = Paste PDB file for sequence {0}
+label.could_not_parse_newick_file  = Could not parse Newick file\!\n {0}
+label.successfully_pasted_tcoffee_scores_to_alignment= Successfully pasted T-Coffee scores to alignment.
+label.failed_add_tcoffee_scores = Failed to add T-Coffee scores: 
+label.successfully_pasted_annotation_to_alignment= Successfully pasted annotation to alignment.
+label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file = Couldn't parse pasted text as a valid annotation, feature, GFF, or T-Coffee score file
+label.successfully_pasted_alignment_file = Successfully pasted alignment file
+label.paste_your_alignment_file = Paste your alignment file here
+label.paste_your = Paste your
+label.finished_searching = Finished searching
+label.search_results= Search results {0} : {1}
+label.found_match_for = Found match for {0}
+label.font = Font:
+label.size = Size:
+label.style = Style:
+label.enter_redundancy_threshold = Enter the redundancy threshold
+label.calculating = Calculating....
+label.modify_conservation_visibility = Modify conservation visibility
+label.colour_residues_above_occurence = Colour residues above % occurence
+label.set_this_label_text = set this label text
+label.sequences_from = Sequences from {0}
+label.successfully_loaded_file  = Successfully loaded file {0}
+label.successfully_saved_to_file_in_format = Successfully saved to file: {0} in {1} format.
+label.copied_sequences_to_clipboard = Copied {0} sequences to clipboard.
+label.check_file_matches_sequence_ids_alignment = Check that the file matches sequence IDs in the alignment.
+label.problem_reading_tcoffee_score_file = Problem reading T-COFFEE score file
+label.source_to_target = {0} ... {1}
+label.per_sequence_only= Per-sequence only
+label.to_file = to File
+label.to_textbox = to Textbox
+label.jalview = Jalview
+label.csv_spreadsheet = CSV (Spreadsheet)
+label.status = Status
+label.channels = Channels
+label.channel_title_item_count = {0} ({1})
+label.blog_item_published_on_date = {0} {1} 
+label.select_das_service_from_table = Select a DAS service from the table to read a full description here.</font></html>
+label.session_update = Session Update
+label.new_vamsas_session = New Vamsas Session
+label.load_vamsas_session = Load Vamsas Session
+label.save_vamsas_session = Save Vamsas Session
+label.select_vamsas_session_opened_as_new_vamsas_session= Select a vamsas session to be opened as a new vamsas session.
+label.open_saved_vamsas_session = Open a saved VAMSAS session
+label.groovy_console = Groovy Console...
+label.lineart = Lineart
+label.dont_ask_me_again = Don't ask me again
+label.select_eps_character_rendering_style = Select EPS character rendering style
+label.invert_selection = Invert Selection
+label.optimise_order = Optimise Order
+label.seq_sort_by_score = Seq sort by Score
+label.load_colours = Load Colours
+label.save_colours = Save Colours
+label.fetch_das_features = Fetch DAS Features
+label.selected_database_to_fetch_from = Selected {0} database {1} to fetch from {2} 
+label.database_param = Database: {0}
+label.example = Example
+label.example_param = Example: {0}
+label.select_file_format_before_saving = You must select a file format before saving!
+label.file_format_not_specified = File format not specified
+label.alignment_contains_hidden_columns = The Alignment contains hidden columns.\nDo you want to save only the visible alignment?
+label.couldnt_save_file = Couldn't save file: {0}
+label.error_saving_file = Error Saving File
+label.remove_from_default_list = Remove from default list?
+label.remove_user_defined_colour = Remove user defined colour
+label.you_must_select_least_two_sequences = You must select at least 2 sequences.
+label.invalid_selection = Invalid Selection
+label.principal_component_analysis_must_take_least_four_input_sequences = Principal component analysis must take\nat least 4 input sequences.
+label.sequence_selection_insufficient = Sequence selection insufficient
+label.you_need_more_two_sequences_selected_build_tree = You need to have more than two sequences selected to build a tree!
+label.not_enough_sequences = Not enough sequences
+label.selected_region_to_tree_may_only_contain_residues_or_gaps =  The selected region to create a tree may\nonly contain residues or gaps.\nTry using the Pad function in the edit menu,\nor one of the multiple sequence alignment web services.
+label.sequences_selection_not_aligned = Sequences in selection are not aligned
+label.sequences_must_be_aligned_before_creating_tree = The sequences must be aligned before creating a tree.\nTry using the Pad function in the edit menu,\n or one of the multiple sequence alignment web services.
+label.sequences_not_aligned = Sequences not aligned
+label.problem_reading_tree_file =  Problem reading tree file
+label.possible_problem_with_tree_file = Possible problem with tree file
+label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation = Please select at least three bases in at least one sequence in order to perform a cDNA translation.
+label.translation_failed = Translation Failed
+label.error_when_translating_sequences_submit_bug_report = Unfortunately, something went wrong when translating your sequences.\nPlease take a look in the Jalview java console\nand submit a bug report including the stacktrace.
+label.implementation_error  = Implementation error:
+label.automatically_associate_pdb_files_with_sequences_same_name = Do you want to automatically associate the {0} PDB files with sequences in the alignment that have the same name?
+label.automatically_associate_pdb_files_by_name = Automatically Associate PDB files by name
+label.ignore_unmatched_dropped_files_info = <html>Do you want to <em>ignore</em> the {0} files whose names did not match any sequence IDs ?</html>
+label.ignore_unmatched_dropped_files = Ignore unmatched dropped files?
+label.enter_view_name = Enter View Name
+label.enter_label = Enter label
+label.enter_label_for_the_structure = Enter a label for the structure?
+label.pdb_entry_is_already_displayed = {0} is already displayed.\nDo you want to re-use this viewer ?
+label.map_sequences_to_visible_window = Map Sequences to Visible Window: {0}
+label.add_pdbentry_to_view = Do you want to add {0} to the view called\n{1}\n
+label.align_to_existing_structure_view = Align to existing structure view
+label.pdb_entries_couldnt_be_retrieved = The following pdb entries could not be retrieved from the PDB\:\n{0}\nPlease try downloading them manually.
+label.couldnt_load_file = Couldn't load file
+label.couldnt_find_pdb_id_in_file = Couldn't find a PDB id in the file supplied. Please enter an Id to identify this structure.
+label.no_pdb_id_in_file = No PDB Id in File
+label.couldnt_read_pasted_text = Couldn't read the pasted text {0}
+label.error_parsing_text = Error parsing text
+label.enter_local_das_source = Enter Nickname & URL of Local DAS Source
+label.you_can_only_edit_or_remove_local_das_sources = You can only edit or remove local DAS Sources!
+label.public_das_source = Public DAS source - not editable
+label.input_alignment_from_url = Input Alignment From URL
+label.input_alignment = Input Alignment
+label.couldnt_import_as_vamsas_session = Couldn't import {0} as a new vamsas session.
+label.vamsas_document_import_failed = Vamsas Document Import Failed
+label.couldnt_locate = Couldn't locate {0}
+label.url_not_found = URL not found
+label.no_link_selected = No link selected
+label.new_sequence_url_link = New sequence URL link
+label.cannot_edit_annotations_in_wrapped_view = Cannot edit annotations in wrapped view
+label.wrapped_view_no_edit = Wrapped view - no edit
+label.error_retrieving_data = Error Retrieving Data
+label.user_colour_scheme_must_have_name = User colour scheme must have a name
+label.no_name_colour_scheme = No name for colour scheme
+label.invalid_url = Invalid URL !
+label.error_loading_file = Error loading file
+label.problems_opening_file = Encountered problems opening {0}!!
+label.file_open_error = File open error
+label.no_das_sources_selected_warn = No das sources were selected.\nPlease select some sources and\ntry again.
+label.no_das_sources_selected_title = No DAS Sources Selected
+label.colour_scheme_exists_overwrite = Colour scheme {0} exists.\nContinue saving colour scheme as {1}?"
+label.duplicate_scheme_name = Duplicate scheme name
+label.jalview_new_questionnaire = There is a new Questionnaire available. Would you like to complete it now ?\n
+label.jalview_user_survey = Jalview User Survey
+label.alignment_properties = Alignment Properties: {0}
+label.alignment_props = Alignment Properties
+label.input_cut_paste = Cut & Paste Input
+label.input_cut_paste_params = Cut & Paste Input - {0}
+label.alignment_output_command = Alignment output - {0}
+label.annotations = Annotations
+label.features = Features
+label.overview_params = Overview {0}
+label.paste_newick_file = Paste Newick file
+label.load_tree_from_file = From File - 
+label.colour_by_annotation = Colour by Annotation
+label.selection_output_command = Selection output - {0}
+label.annotation_for_displayid = <p><h2>Annotation for {0} </h2></p><p>
+label.pdb_sequence_mapping = PDB - Sequence Mapping
+label.pca_details = PCA details
+label.redundancy_threshold_selection = Redundancy threshold selection
+label.user_defined_colours = User defined colours
+label.jalviewLite_release = JalviewLite - Release {0}
+label.jaview_build_date = Build date: {0}
+label.jalview_authors_1 = Authors: :  Jim Procter, Andrew Waterhouse, Lauren Lui, Jan Engelhardt, Natasha Sherstnev,
+label.jalview_authors_2 = Daniel Barton, Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton.
+label.jalview_dev_managers = Development managed by The Barton Group, University of Dundee, Scotland, UK.
+label.jalview_distribution_lists = For help, see the FAQ at www.jalview.org and/or join the jalview-discuss@jalview.org mailing list
+label.jalview_please_cite = If  you use Jalview, please cite:
+label.jalview_cite_1_authors = Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)
+label.jalview_cite_1_title = Jalview Version 2 - a multiple sequence alignment editor and analysis workbench
+label.jalview_cite_1_ref = Bioinformatics doi: 10.1093/bioinformatics/btp033
+label.right_click = Right click
+label.to_add_annotation = to add annotation
+label.alignment_has_no_annotations = Alignment has no annotations
+label.retrieving_pdb_data = Retrieving PDB data...
+label.label = Label
+label.no_features_added_to_this_alignment = No Features added to this alignment!!
+label.features_can_be_added_from_searches_1 = (Features can be added from searches or
+label.features_can_be_added_from_searches_2 = from Jalview / GFF features files)
+label.calculating_pca= Calculating PCA
+label.reveal_columns = Reveal Columns
+label.jalview_cannot_open_file = Jalview can't open file
+label.jalview_applet = Jalview applet
+label.loading_data = Loading data
+label.memory_stats = Total Free Memory: {0} MB; Max Memory: {1} MB; {2} %
+label.calculating_tree = Calculating tree
+label.state_queueing = queuing
+label.state_running = running
+label.state_complete = complete
+label.state_completed = finished
+label.state_job_cancelled = job cancelled!!
+label.state_job_error = job error!
+label.server_error_try_later = Server Error! (try later)
+label.error_loading_pdb_data = Error loading PDB data!!
+label.fetching_pdb_data = Fetching PDB data...
+label.structure_type = Structure type
+label.settings_for_type = Settings for {0}
+label.view_full_application = View in Full Application
+label.load_associated_tree = Load Associated Tree ...
+label.load_features_annotations = Load Features/Annotations ...
+label.export_features = Export Features
+label.export_annotations = Export Annotations
+label.jalview_copy = Copy (Jalview Only)
+label.jalview_cut = Cut (Jalview Only)
+label.to_upper_case = To Upper Case
+label.to_lower_case = To Lower Case
+label.toggle_case = Toggle Case
+label.edit_name_description = Edit Name/Description ...
+label.create_sequence_feature = Create Sequence Feature ...
+label.edit_sequence = Edit Sequence
+label.edit_sequences = Edit Sequences
+label.sequence_details = Sequence Details
+label.jmol_help = Jmol Help
+label.all = All
+label.sort_by = Sort by
+label.sort_by_score = Sort by Score
+label.sort_by_density = Sort by Density
+label.sequence_sort_by_density = Sequence sort by Density
+label.reveal = Reveal
+label.hide_columns = Hide Columns
+label.load_jalview_annotations = Load Jalview Annotations or Features File
+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.reset_min_max_colours_to_defaults = Reset min and max colours to defaults from user preferences.
+label.align_structures_using_linked_alignment_views = Align structures using {0} linked alignment views
+label.connect_to_session = Connect to session {0}
+label.threshold_feature_display_by_score = Threshold the feature display by score.
+label.threshold_feature_no_thereshold = No Threshold
+label.threshold_feature_above_thereshold = Above Threshold
+label.threshold_feature_below_thereshold = Below Threshold
+label.adjust_thereshold = Adjust threshold
+label.toggle_absolute_relative_display_threshold = Toggle between absolute and relative display threshold.
+label.display_features_same_type_different_label_using_different_colour = Display features of the same type with a different label using a different colour. (e.g. domain features)
+label.select_colour_minimum_value = Select Colour for Minimum Value
+label.select_colour_maximum_value = Select Colour for Maximum Value
+label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment = Open a new Jmol view with all structures associated with the current selection and superimpose them using the alignment.
+label.open_url_param = Open URL {0}
+label.open_url_seqs_param = Open URL ({0}..) ({1} seqs)
+label.load_pdb_file_associate_with_sequence = Load a PDB file and associate it with sequence {0}
+label.reveal_hidden_columns = Reveal Hidden Columns with Right Mouse Button
+label.dark_colour = Dark Colour
+label.light_colour = Light Colour
+label.highlightnode = Left click to select leaves.<br>Double-click to invert leaves.<br>Right click to change colour.
+label.load_colour_scheme = Load colour scheme
+label.toggle_enabled_views = When enabled, allows many views to be selected.
+label.edit_notes_parameter_set = Click to edit the notes for this parameter set.
+label.open_local_file = Open local file
+label.enable_automatically_sort_alignment_when_open_new_tree = Enable this to automatically sort<br>the alignment when you open<br> a new tree.
+label.listen_for_selections = Listen for selections
+label.selections_mirror_selections_made_same_sequences_other_views = When selected, selections in this view will mirror<br>selections made on the same sequences in other views.
+label.toggle_sequence_visibility = Shift+H toggles sequence visiblity
+label.toggle_columns_visibility = Ctrl+H toggles column visiblity.
+label.toggles_visibility_hidden_selected_regions = H toggles visibility of hidden or selected regions
+label.rename_tab_eXpand_reGroup=  Right-click to rename tab <br> Press X to eXpand tabs, G to reGroup.
+label.right_align_sequence_id = Right Align Sequence Id
+label.sequence_id_tooltip = Sequence ID Tooltip
+label.no_services = <No Services>
+label.select_copy_raw_html = Select this if you want to copy raw html
+label.share_data_vamsas_applications = Share data with other vamsas applications
+label.connect_to = Connect to
+label.join_existing_vamsas_session = Join an existing vamsas session
+label.from_url = from URL
+label.any_trees_calculated_or_loaded_alignment_automatically_sort = When selected, any trees calculated or loaded onto the alignment will automatically sort the alignment
+label.sort_with_new_tree = Sort With New Tree
+label.from_textbox = from Textbox
+label.window = Window
+label.preferences = Preferences
+label.tools = Tools
+label.fetch_sequences = Fetch Sequence(s)
+label.stop_vamsas_session = Stop Vamsas Session
+label.collect_garbage = Collect Garbage
+label.show_memory_usage = Show Memory Usage
+label.show_java_console = Show Java Console
+label.show_jalview_news = Show Jalview News
+label.take_snapshot = Take snapshot
+label.monospaced_fonts_faster_to_render = Monospaced fonts are faster to render
+label.anti_alias_fonts = Anti-alias Fonts (Slower to render)
+label.monospaced_font= Monospaced
+label.quality = Quality
+label.maximize_window = Maximize Window
+label.conservation = Conservation
+label.consensus = Consensus
+label.histogram = Histogram
+label.logo = Logo
+label.non_positional_features = Non-positional Features
+label.database_references = Database References
+label.share_selection_across_views = Share selection across views
+label.scroll_highlighted_regions = Scroll to highlighted regions
+label.gap_symbol = Gap Symbol
+label.alignment_colour = Alignment Colour
+label.address = Address
+label.port = Port
+label.default_browser_unix = Default Browser (Unix)
+label.send_usage_statistics = Send usage statistics
+label.check_for_questionnaires = Check for questionnaires
+label.check_for_latest_version = Check for latest version
+label.url_linkfrom_sequence_id = URL link from Sequence ID
+label.use_proxy_server = Use a proxy server
+label.eps_rendering_style = EPS rendering style
+label.append_start_end = Append /start-end (/15-380)
+label.full_sequence_id = Full Sequence Id
+label.smooth_font = Smooth Font
+label.autocalculate_consensus = AutoCalculate Consensus
+label.pad_gaps = Pad Gaps
+label.pad_gaps_when_editing = Pad Gaps When Editing
+label.automatically_set_id_width = Automatically set ID width
+label.figure_id_column_width = Figure ID column width
+label.use_modeller_output = Use Modeller Output
+label.wrap_alignment = Wrap Alignment
+label.right_align_ids = Right Align Ids
+label.sequence_name_italics = Sequence Name Italics
+label.open_overview = Open Overview
+label.default_colour_scheme_for_alignment = Default Colour Scheme for alignment
+label.annotation_shading_default = Annotation Shading Default
+label.default_minimum_colour_annotation_shading = Default Minimum Colour for annotation shading
+label.default_maximum_colour_annotation_shading = Default Maximum Colour for annotation shading
+label.visual = Visual
+label.connections = Connections
+label.output = Output
+label.editing = Editing
+label.das_settings = DAS Settings
+label.web_services = Web Services
+label.right_click_to_edit_currently_selected_parameter = Right click to edit currently selected parameter.
+label.let_jmol_manage_structure_colours = Let Jmol manage structure colours
+label.marks_leaves_tree_not_associated_with_sequence = Marks leaves of tree not associated with a sequence
+label.index_web_services_menu_by_host_site = Index web services in menu by the host site
+label.option_want_informed_web_service_URL_cannot_be_accessed_jalview_when_starts_up = Check this option if you want to be informed<br>when a web service URL cannot be accessed by Jalview<br>when it starts up
+label.new_service_url = New Service URL
+label.edit_service_url = Edit Service URL
+label.delete_service_url = Delete Service URL
+label.details = Details
+label.options = Options
+label.parameters = Parameters
+label.available_das_sources = Available DAS Sources
+label.full_details = Full Details
+label.authority = Authority
+label.type = Type
+label.proxy_server = Proxy Server
+label.file_output = File Output
+label.select_input_type = Select input type
+label.set_options_for_type = Set options for type
+label.data_input_parameters = Data input parameters
+label.data_returned_by_service = Data returned by service
+label.rsbs_encoded_service = RSBS Encoded Service
+label.parsing_errors = Parsing errors
+label.simple_bioinformatics_rest_services = Simple Bioinformatics Rest Services
+label.web_service_discovery_urls = Web Service Discovery URLS
+label.input_parameter_name = Input Parameter name
+label.short_descriptive_name_for_service = Short descriptive name for service
+label.function_service_performs = What kind of function the service performs (e.g. alignment, analysis, search, etc).
+label.brief_description_service = Brief description of service
+label.url_post_data_service = URL to post data to service. Include any special parameters needed here
+label.optional_suffix = Optional suffix added to URL when retrieving results from service
+label.preferred_gap_character = Which gap character does this service prefer?
+label.gap_character = Gap character
+label.move_return_type_up_order= Move return type up order
+label.move_return_type_down_order= Move return type down order
+label.update_user_parameter_set = Update this existing user parameter set
+label.delete_user_parameter_set = Delete the currently selected user parameter set
+label.create_user_parameter_set = Create a new parameter set with the current settings.
+label.revert_changes_user_parameter_set = Undo all changes to the current parameter set
+label.start_job_current_settings = Start Job with current settings
+label.cancel_job_close_dialog = Close this dialog and cancel job
+label.input_output = Input/Output
+label.cut_paste = Cut'n'Paste
+label.adjusting_parameters_for_calculation = Adjusting parameters for existing Calculation
+label.2d_rna_structure_line = 2D RNA {0}
+label.2d_rna_sequence_name = 2D RNA - {0}
+label.edit_name_and_description_current_group = Edit name and description of current group.
+label.view_structure_for = View structure for {0}
+label.view_all_structures = View all {0} structures.
+label.view_all_representative_structures = View all {0} representative structures.
+label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment = Opens a new Jmol view with all representative structures\nassociated with the current selection\nsuperimposed with the current alignment.
+label.associate_structure_with_sequence = Associate Structure with Sequence
+label.from_file = from file
+label.enter_pdb_id = Enter PDB Id
+label.discover_pdb_ids = Discover PDB ids
+label.text_colour = Text Colour
+label.structure = Structure
+label.view_structure = View Structure
+label.clustalx_colours = Clustalx colours
+label.above_identity_percentage = Above % Identity
+label.create_sequence_details_report_annotation_for = Annotation for {0}
+label.sequece_details_for = Sequece Details for {0}
+label.sequence_name = Sequence Name
+label.sequence_description = Sequence Description
+label.edit_sequence_name_description = Edit Sequence Name/Description
+label.spaces_converted_to_backslashes = Spaces have been converted to _
+label.no_spaces_allowed_sequence_name = No spaces allowed in Sequence Name
+label.select_outline_colour = Select Outline Colour
+label.web_browser_not_found_unix = Unixers\: Couldn't find default web browser.\nAdd the full path to your browser in Preferences."
+label.web_browser_not_found = Web browser not found
+label.select_pdb_file_for = Select a PDB file for {0}
+label.html = HTML
+label.wrap = Wrap
+label.show_database_refs = Show Database Refs
+label.show_non_positional_features = Show Non-Positional Features
+label.save_png_image = Save As PNG Image
+label.load_tree_for_sequence_set = Load a tree for this sequence set
+label.export_image = Export Image
+label.vamsas_store = VAMSAS store
+label.translate_cDNA = Translate cDNA
+label.extract_scores = Extract Scores
+label.get_cross_refs = Get Cross References
+label.sort_alignment_new_tree = Sort Alignment With New Tree
+label.add_sequences = Add Sequences
+label.new_window = New Window
+label.refresh_available_sources = Refresh Available Sources
+label.use_registry = Use Registry
+label.add_local_source = Add Local Source
+label.set_as_default = Set as Default
+label.show_labels = Show labels
+label.background_colour = Background Colour
+label.associate_nodes_with = Associate Nodes With
+label.jalview_pca_calculation = Jalview PCA Calculation
+label.link_name = Link Name
+label.pdb_file = PDB file
+label.colour_with_jmol = Colour with Jmol
+label.align_structures = Align structures
+label.jmol = Jmol
+label.sort_alignment_by_tree = Sort Alignment By Tree
+label.mark_unlinked_leaves = Mark Unlinked Leaves
+label.associate_leaves_with = Associate Leaves With
+label.save_colour_scheme_with_unique_name_added_to_colour_menu = Save your colour scheme with a unique name and it will be added to the Colour menu
+label.case_sensitive = Case Sensitive
+label.lower_case_colour = Lower Case Colour
+label.index_by_host = Index by host
+label.index_by_type = Index by type
+label.enable_jabaws_services = Enable JABAWS Services
+label.display_warnings = Display warnings
+label.move_url_up = Move URL up
+label.move_url_down = Move URL down
+label.add_sbrs_definition = Add a SBRS definition
+label.edit_sbrs_definition = Edit SBRS definition
+label.delete_sbrs_definition = Delete SBRS definition
+label.your_sequences_have_been_verified = Your sequences have been verified against known sequence databases. Some of the ids have been\n altered, most likely the start/end residue will have been updated.\n Save your alignment to maintain the updated id.\n\n
+label.sequence_names_updated = Sequence names updated
+label.dbref_search_completed = DBRef search completed
+label.show_all_chains = Show all chains
+label.fetch_all_param = Fetch all {0}
+label.paste_new_window = Paste To New Window
+label.settings_for_param = Settings for {0}
+label.view_params = View {0}
+label.select_all_views = Select all views
+label.align_sequences_to_existing_alignment = Align sequences to an existing alignment
+label.realign_with_params = Realign with {0}
+label.calcname_with_default_settings = {0} with Defaults
+label.action_with_default_settings = {0} with default settings
+label.edit_settings_and_run = Edit settings and run...
+label.view_and_change_parameters_before_alignment = View and change the parameters before alignment
+label.run_with_preset_params = Run {0} with preset
+label.view_and_change_parameters_before_running_calculation = View and change parameters before running calculation
+label.view_documentation = View documentation
+label.select_return_type = Select return type
+label.translation_of_params = Translation of {0}
+label.features_for_params = Features for - {0}
+label.annotations_for_params = Annotations for - {0}
+label.generating_features_for_params = Generating features for - {0}
+label.generating_annotations_for_params = Generating annotations for - {0}
+label.varna_params = VARNA - {0}
+label.sequence_feature_settings = Sequence Feature Settings
+label.pairwise_aligned_sequences = Pairwise Aligned Sequences
+label.original_data_for_params = Original Data for {0}
+label.points_for_params = Points for {0}
+label.transformed_points_for_params = Transformed points for {0}
+label.graduated_color_for_params = Graduated Feature Colour for {0}
+label.select_backgroud_colour = Select Background Colour
+label.invalid_font = Invalid Font
+label.separate_multiple_accession_ids = Separate multiple accession ids with semi colon ";"
+label.replace_commas_semicolons = Replace commas with semi-colons
+label.parsing_failed_syntax_errors_shown_below_param = Parsing failed. Syntax errors shown below {0}
+label.parsing_failed_unrecoverable_exception_thrown_param = \nParsing failed. An unrecoverable exception was thrown\:\n {0}
+label.example_query_param = Example query: {0}
+label.enter_value_increase_conservation_visibility = Enter value to increase conservation visibility
+label.enter_percentage_identity_above_which_colour_residues = Enter % identity above which to colour residues
+label.wswublast_client_credits = To display sequence features an exact Uniprot id with 100% sequence identity match must be entered.\nIn order to display these features, try changing the names of your sequences to the ids suggested below.\n\nRunning WSWUBlast at EBI.\nPlease quote Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez R.\nSOAP-based services provided by the European Bioinformatics Institute.\nNucleic Acids Res. 33(1)\:W25-W28 (2005));
 label.blasting_for_unidentified_sequence = BLASTing for unidentified sequences
-label.select_columns_containing = Select columns containing\r
-label.select_columns_not_containing = Select columns that do not contain\r
-option.trim_retrieved_seqs = Trim retrieved sequences\r
-label.trim_retrieved_sequences = When the reference sequence is longer than the sequence that you are working with, only keep the relevant subsequences.\r
-label.use_sequence_id_1 = Use $SEQUENCE_ID$ or $SEQUENCE_ID=/<regex>/=$\r
-label.use_sequence_id_2 = \nto embed sequence id in URL\r
-label.ws_parameters_for = Parameters for {0}\r
-label.switch_server = Switch server\r
-label.open_jabaws_web_page = Opens the JABAWS server's homepage in web browser\r
-label.choose_jabaws_server = Choose a server for running this service\r
-label.services_at = Services at {0}\r
-label.rest_client_submit = {0} using {1}\r
-label.fetch_retrieve_from =Retrieve from {0}</html>\r
-label.fetch_retrieve_from_all_sources = Retrieve from all {0} sources in {1}<br>First is :{2}<html> \r
-label.feature_settings_click_drag = <html>Click/drag feature types up or down to change render order.<br/>Double click to select columns containing feature in alignment/current selection<br/>Pressing Alt will select columns outside features rather than inside<br/>Pressing Shift to modify current selection (rather than clear current selection)<br/>Press CTRL or Command/Meta to toggle columns in/outside features<br/></html>\r
-label.opt_and_params_further_details = see further details by right-clicking\r
-label.opt_and_params_show_brief_desc_image_link = <html>Click to show brief description<br><img src="{0}"/> Right click for further information.</html> \r
-label.opt_and_params_show_brief_desc = <html>Click to show brief description<br></html>\r
-label.adjusts_width_generated_eps_png = <html>Adjusts the width of the generated EPS or PNG file to ensure even the longest sequence ID or annotation label is displayed</html>\r
-label.manually_specify_width_left_column = <html>Manually specify the width of the left hand column where sequence IDs and annotation labels will be rendered in exported alignment figures. This setting will be ignored if 'Automatically set ID width' is set</html>\r
-label.job_created_when_checked = <html>When checked, a job is created for every sequence in the current selection.</html>\r
-label.when_checked_job_visible_region_and_results = <html>When checked, a single job is created for the visible region and results mapped back onto their location in the alignment. Otherwise, a job would be created for every contiguous region visible in the alignment or current selection (e.g. a multiple alignment).</html>\r
-label.flat_file_representation = <html>Flat file representation of this rest service using the Really Simple Bioinformatics Service formalism</html>\r
-label.result_of_parsing_rsbs = <html>Results of parsing the RSBS representation</html>\r
-label.user_preset = User Preset\r
-label.service_preset = Service Preset\r
-label.run_with_preset = Run {0} with preset\r
-label.view_service_doc_url = <html>View <a href="{0}">{1}</a></html>\r
-label.submit_sequence = <html>Submit {0} {1} {2} {3} to<br/>{4}</html>\r
-action.by_title_param = by {0}\r
-label.alignment = Alignment\r
-label.secondary_structure_prediction = Secondary Structure Prediction\r
-label.sequence_database_search = Sequence Database Search\r
-label.analysis = Analysis\r
-label.protein_disorder = Protein Disorder \r
-label.source_from_db_source = Sources from {0}\r
-label.from_msname = from {0}\r
-label.superpose_with = Superpose with ...\r
-action.do = Do\r
-label.scale_label_to_column = Scale Label to Column\r
-label.add_new_row = Add New Row\r
-label.edit_label_description = Edit Label/Description\r
-label.hide_row = Hide This Row\r
-label.delete_row = Delete This Row\r
-label.show_all_hidden_rows = Show All Hidden Rows\r
-label.export_annotation = Export Annotation\r
-label.copy_consensus_sequence = Copy Consensus Sequence\r
-label.helix = Helix\r
-label.sheet = Sheet\r
-label.rna_helix = RNA Helix\r
-label.remove_annotation = Remove Annotation\r
-label.colour_by = Colour by...\r
-label.muscle_multiple_protein_sequence_alignment = Muscle Multiple Protein Sequence Alignment\r
-label.mafft_multiple_sequence_alignment = MAFFT Multiple Sequence Alignment\r
-label.clustalw_multiple_sequence_alignment = ClustalW Multiple Sequence Alignment\r
-label.jnet_secondary_structure_prediction = JNet Secondary Structure Prediction\r
-label.multiharmony = Multi-Harmony\r
-label.unable_start_web_service_analysis = Unable to start web service analysis\r
-label.job_couldnt_be_started_check_input = The Job couldn't be started. Please check your input, and the Jalview console for any warning messages.\r
-label.prompt_each_time = Prompt each time\r
-label.use_source = Use Source\r
-label.couldnt_save_project = Couldn't save project\r
-label.error_whilst_saving_current_state_to = Error whilst saving current state to {0}\r
-label.error_whilst_loading_project_from = Error whilst loading project from {0}\r
-label.couldnt_load_project = Couldn't load project\r
-label.pca_sequences_not_aligned = The sequences must be aligned before calculating PCA.\nTry using the Pad function in the edit menu,\nor one of the multiple sequence alignment web services.\r
-label.invalid_name_preset_exists = Invalid name - preset already exists.\r
-label.invalid_name = Invalid name\r
-label.set_proxy_settings = Please set up your proxy settings in the 'Connections' tab of the Preferences window\r
-label.proxy_authorization_failed = Proxy Authorization Failed\r
-label.internal_jalview_error = Internal Jalview Error\r
-label.secondary_structure_prediction_service_couldnt_be_located = The Secondary Structure Prediction Service named {0} at {1} couldn't be located.\r
-label.service_called_is_not_msa_service = The Service called \n{0}\nis not a \nMultiple Sequence Alignment Service\!\r
-label.msa_service_is_unknown = The Multiple Sequence Alignment Service named {0} is unknown\r
-label.service_called_is_not_seq_search_service = The Service called \n{0}\nis not a \nSequence Search Service\!\r
-label.seq_search_service_is_unknown = The Sequence Search Service named {0} is unknown\r
-label.feature_type = Feature Type\r
-label.display = Display\r
-label.service_url = Service URL\r
-label.copied_sequences = Copied sequences\r
-label.cut_sequences = Cut Sequences\r
-label.conservation_colour_increment = Conservation Colour Increment ({0})\r
-label.percentage_identity_thereshold = Percentage Identity Thereshold ({0})\r
-label.error_unsupported_owwner_user_colour_scheme = Unsupported owner for User Colour scheme dialog\r
-label.save_alignment_to_file = Save Alignment to file\r
-label.save_features_to_file = Save Features to File\r
-label.save_annotation_to_file = Save Annotation to File\r
-label.no_features_on_alignment = No features found on alignment\r
-label.save_pdb_file = Save PDB File\r
-label.save_text_to_file = Save Text to File\r
-label.save_state = Save State\r
-label.restore_state = Restore State\r
-label.saving_jalview_project = Saving jalview project {0}\r
-label.loading_jalview_project = Loading jalview project {0}\r
-label.save_vamsas_document_archive = Save Vamsas Document Archive\r
-label.saving_vamsas_doc = Saving VAMSAS Document to {0}\r
-label.load_feature_colours = Load Feature Colours\r
-label.save_feature_colours = Save Feature Colour Scheme\r
-label.dataset_for = {0} Dataset for {1}\r
-label.select_startup_file = Select startup file\r
-label.select_default_browser = Select default web browser\r
-label.save_tree_as_newick = Save tree as newick file\r
-label.create_eps_from_tree = Create EPS file from tree\r
-label.create_png_from_tree = Create PNG image from tree\r
-label.save_colour_scheme = Save colour scheme\r
-label.edit_params_for = Edit parameters for {0}\r
-label.choose_filename_for_param_file = Choose a filename for this parameter file\r
-label.save_as_html = Save as HTML\r
-label.recently_opened = Recently Opened\r
-label.blasting_for_unidentified_sequence_jobs_running = BLASTing for unidentified sequences - {0}  jobs running.\r
-label.tree_from = Tree from {0}\r
-label.webservice_job_title = {0} using {1}\r
-label.select_visible_region_of = selected {0} region of {1}\r
-label.visible = Visible\r
-label.select_unselect_visible_regions_from = select and unselected {0} regions from {1}\r
-label.visible_region_of = visible region of\r
-label.webservice_job_title_on = {0} using {1} on {2}\r
-label.updating_vamsas_session = Updating vamsas session\r
-label.loading_file = Loading File: {0}\r
-label.edit_params = Edit {0}\r
-error.not_implemented = Not implemented\r
-error.no_such_method_as_clone1_for = No such method as clone1 for {0}\r
-error.null_from_clone1 = Null from clone1!\r
-error.implementation_error_sortbyfeature = Implementation Error - sortByFeature method must be one of FEATURE_SCORE, FEATURE_LABEL or FEATURE_DENSITY.\r
-error.not_yet_implemented = Not yet implemented\r
-error.unknown_type_dna_or_pep = Unknown Type {0} - dna or pep are the only allowed values.\r
-error.implementation_error_dont_know_thereshold_annotationcolourgradient = Implementation error: don't know about threshold setting for current AnnotationColourGradient.\r
-error.implementation_error_embeddedpopup_not_null = Implementation error - embeddedPopup must be non-null\r
-error.invalid_colour_for_mycheckbox = Invalid color for MyCheckBox\r
-error.implementation_error_unrecognised_render_object_for_features_type = Implementation Error: Unrecognised render object {0} for features of type {1}\r
-error.implementation_error_unsupported_feature_colour_object = Implementation error: Unsupported feature colour object.\r
-error.invalid_separator_parameter = Invalid separator parameter - must be non-zero length\r
-error.alignment_cigararray_not_implemented = Alignment(CigarArray) not yet implemented\r
-error.weak_sequencei_equivalence_not_yet_implemented = Weak sequenceI equivalence not yet implemented.\r
-error.implementation_error_can_only_make_alignmnet_from_cigararray = Implementation Error - can only make an alignment view from a CigarArray of sequences.\r
-error.empty_view_cannot_be_updated = empty view cannot be updated.\r
-error.mismatch_between_number_of_sequences_in_block = Mismatch between number of sequences in block {0} ({1}) and the original view ({2})\r
-error.padding_not_yet_implemented = Padding not yet implemented\r
-error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view = Mismatch between visible blocks to update and number of contigs in view (contigs=0,blocks={0})\r
-error.unknown_seq_cigar_operation = Unknown SeqCigar operation {0}\r
-error.implementation_bug_parse_cigar_string = Implementation bug in parseCigarString\r
-error.implementation_error_invalid_operation_string = Implementation error. Invalid operation string.\r
-error.invalid_range_string = Invalid range string (must be zero or positive number)\r
-error.implementation_error_delete_range_out_of_bounds = Implementation Error: deleteRange out of bounds: start must be non-negative and less than end.\r
-error.implementation_error = Implementation error\r
-error.implementation_error_unknown_operation = Implementation Error! Unknown operation {0}\r
-error.implementation_error_unexpected_null_from_get_sequence_and_deletions = Implementation Error - unexpected null from getSequenceAndDeletions\r
-error.implementation_error_set_seq_null = Implementation Error - _setSeq(null,...)\r
-error.implementation_error_s = Implementation Error: _s= {0}\r
-error.implementation_error_seqcigar_possible = SeqCigar: Possible implementation error: sequence is longer than dataset sequence\r
-error.implmentation_bug_seq_null = Implementation Bug. Null seq\r
-error.implementation_bug_cigar_operation_list_range_list = Implementation Bug. Cigar Operation list!= range list\r
-error.not_yet_implemented_cigar_object_from_cigar_string = NOT YET Implemented: Constructing a Cigar object from a cigar string and a gapped sequence.\r
-error.implementation_bug_cigar_operation = Implementation Bug. Cigar Operation {0} {1} not one of {2}, {3}, or {4}.\r
-error.implementation_error_for_new_cigar = Implementation error for new Cigar(SequenceI)\r
-error.implementation_error_cigar_seq_no_operations = Implementation error: {0}th sequence Cigar has no operations.\r
-error.implementation_error_jmol_getting_data = Implementation error - Jmol seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016\r
-error.implementation_error_no_pdbentry_from_index = Implementation error - no corresponding pdbentry (for index {0}) to add sequences mappings to\r
-error.jmol_version_not_compatible_with_jalview_version = Jmol version {0} is not compatible with this version of Jalview. Report this problem at issues.jalview.org\r
-error.not_implemented_remove = Remove: Not implemented\r
-error.not_implemented_clone = Clone: Not implemented\r
-error.implementation_error_chimera_getting_data = Implementation error - Chimera seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016\r
-error.call_setprogressbar_before_registering_handler = call setProgressBar before registering the progress bar's handler.\r
-label.cancelled_params = Cancelled {0}\r
-error.implementation_error_cannot_show_view_alignment_frame = Implementation error: cannot show a view from another alignment in an AlignFrame.\r
-error.implementation_error_dont_know_about_thereshold_setting = Implementation error: don't know about threshold setting for current AnnotationColourGradient.\r
-error.eps_generation_not_implemented = EPS Generation not yet implemented\r
-error.png_generation_not_implemented = PNG Generation not yet implemented\r
-error.try_join_vamsas_session_another = Trying to join a vamsas session when another is already connected\r
-error.invalid_vamsas_session_id = Invalid vamsas session id\r
-error.implementation_error_cannot_create_groovyshell = Implementation Error. Cannot create groovyShell without Groovy on the classpath!\r
-label.groovy_support_failed = Jalview Groovy Support Failed\r
-label.couldnt_create_groovy_shell = Couldn't create the groovy Shell. Check the error log for the details of what went wrong.\r
-error.unsupported_version_calcIdparam = Unsupported Version for calcIdparam {0}\r
-error.implementation_error_cant_reorder_tree = Implementation Error: Can't reorder this tree. Not DefaultMutableTreeNode.\r
-error.invalid_value_for_option = Invalid value {0} for option {1}\r
-error.implementation_error_cannot_import_vamsas_doc = Implementation Error - cannot import existing vamsas document into an existing session, Yet!\r
-label.vamsas_doc_couldnt_be_opened_as_new_session = VAMSAS Document could not be opened as a new session - please choose another\r
-error.implementation_error_vamsas_operation_not_init = Impementation error! Vamsas Operations when client not initialised and connected\r
-error.jalview_no_connected_vamsas_session = Jalview not connected to Vamsas session\r
-error.implementation_error_cannot_recover_vamsas_object_mappings = IMPLEMENTATION ERROR: Cannot recover vamsas object mappings - no backup was made\r
-error.setstatus_called_non_existent_job_pane = setStatus called for non-existent job pane {0}\r
-error.implementation_error_cannot_find_marshaller_for_param_set =Implementation error: Can't find a marshaller for the parameter set\r
-error.implementation_error_old_jalview_object_not_bound =IMPLEMENTATION ERROR: old jalview object is not bound ! ({0})\r
-error.implementation_error_vamsas_doc_class_should_bind_to_type = Implementation Error: Vamsas Document Class {0} should bind to a {1} (found a {2})\r
-error.implementation_error_jalview_class_should_bind_to_type = Implementation Error: Jalview Class {0} should bind to a {1} (found a {2})\r
-error.invalid_vamsas_rangetype_cannot_resolve_lists = Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!\r
-error.implementation_error_maplist_is_null = Implementation error. MapList is null for initMapType.\r
-error.implementation_error_cannot_have_null_alignment = Implementation error: Cannot have null alignment property key\r
-error.implementation_error_null_fileparse = Implementation error. Null FileParse in copy constructor\r
-error.implementation_error_cannot_map_alignment_sequences = IMPLEMENTATION ERROR: Cannot map an alignment of sequences from different datasets into a single alignment in the vamsas document.\r
-error.implementation_error_cannot_duplicate_colour_scheme = Serious implementation error: cannot duplicate colourscheme {0}\r
-error.implementation_error_structure_selection_manager_null = Implementation error. Structure selection manager's context is 'null'\r
-exception.ssm_context_is_null = SSM context is null\r
-error.idstring_seqstrings_only_one_per_sequence = idstrings and seqstrings contain one string each per sequence\r
-error.cannot_have_mixed_length_replacement_vectors = Cannot have mixed length replacement vectors. Replacement vector for {0} is {1} strings long, and have already seen a {2} length vector.\r
-error.cannot_have_zero_length_vector_replacement_strings = Cannot have zero length vector of replacement strings - either 1 value or n values.\r
-error.implementation_error_multiple_single_sequence_prediction_jobs_not_supported = Implementation Error! Multiple single sequence prediction jobs are not yet supported\r
-error.implementation_error_invalid_msa_index_for_job =Implementation Error! Invalid msaIndex for JPredJob on parent MSA input object!\r
-error.implementation_error_startjob_called = Implementation error - StartJob(JpredJob) called on {0}\r
-error.multiple_jnet_subjob_merge_not_implemented = Multiple JNet subjob merging not yet implemented\r
-label.job_never_ran = Job never ran - input returned to user.\r
-error.implementation_error_minlen_must_be_greater_zero = Implementation error: minlen must be zero or more\r
-error.implementation_error_msawbjob_called = Implementation error - StartJob(MsaWSJob) called on a WSJobInstance {0}\r
-error.implementation_error_cannot_attach_ws_menu_entry = IMPLEMENTATION ERROR: cannot attach WS Menu Entry without service handle reference!\r
-error.parameter_migration_not_implemented_yet = Parameter migration not implemented yet\r
-error.implementation_error_cannot_set_jaba_option = Implementation error: cannot set Jaba Option to a value outside its allowed value range!\r
-error.implementation_error_valuetype_doesnt_support_jabaws_type = IMPLEMENTATION ERROR: jalview.ws.params.ValueConstrainI.ValueType does not support the JABAWS type : {0}\r
-error.cannot_create_jabaws_param_set = Cannot create a JabaWSParamSet from non-JabaWS parameters\r
-error.cannot_set_arguments_to_jabaws_param_set = Cannot set arguments to a JabaWSParamSet that are not JabaWS arguments\r
-error.implementation_error_runner_config_not_available = Implementation Error: Runner Config not available for a JABAWS service of type {0} ({1})\r
-error.implementation_error_cannot_handle_jaba_param = Implementation Error: Cannot handle Jaba parameter object {0}\r
-error.implementation_error_attempt_to_delete_service_preset = Implementation error: Attempt to delete a service preset!\r
-error.implementation_error_cannot_locate_oldname_presetname = Implementation error: Can't locate either oldname ({0}) or presetName ({1}in the datastore!"\r
-error.implementation_error_jabaws_param_set_only_handled_by = Implementation error: JabaWsParamSets can only be handled by JabaParamStore\r
-error.cannot_set_source_file_for = Cannot set source file for {0}\r
-error.mismatch_service_instance_preset = Probable mismatch between service instance and preset!\r
-error.cannot_set_params_for_ws_preset = Cannot set Parameters for a Jaba Web service's preset\r
-error.implementation_error_can_only_instantiate_jaba_param_sets = Implementation error: Can only instantiate Jaba parameter sets\r
-error.no_aacon_service_found = No AACon service found\r
-error.implementation_error_couldnt_copy_value_constraint = Implementation error: could not copy ValueConstrain!\r
-error.couldnt_encode_as_utf8 = Couldn't encode {0} as UTF-8.\r
-error.tree_inputtype_not_yet_implemented = Tree InputType not yet implemented\r
-error.implementation_error_need_to_have_httpresponse = Implementation Error: need to have an HttpResponse to process\r
-error.dbrefsource_implementation_exception =DBRefSource Implementation Exception\r
-error.implementation_error_dbinstance_must_implement_interface = Implmentation Error - getDbInstances must be given a class that implements jalview.ws.seqfetcher.DbSourceProxy (was given{0})\r
-error.implementation_error_must_init_dbsources =Implementation error. Must initialise dbSources\r
-label.view_controller_toggled_marked = {0} {1} columns {2} containing features of type {3}  across {4} sequence(s)\r
-label.toggled = Toggled\r
-label.marked = Marked\r
-label.not = not\r
-label.no_feature_of_type_found = No features of type {0} found.\r
-label.submission_params = Submission {0}\r
-label.empty_alignment_job = Empty Alignment Job\r
-label.add_new_sbrs_service = Add a new Simple Bioinformatics Rest Service\r
-label.edit_sbrs_entry = Edit Simple Bioinformatics Rest Service entry\r
-label.pca_recalculating = Recalculating PCA\r
-label.pca_calculating = Calculating PCA\r
-label.select_foreground_colour = Choose foreground colour\r
-label.select_colour_for_text = Select Colour for Text\r
-label.adjunst_foreground_text_colour_thereshold = Adjust Foreground Text Colour Threshold\r
-label.select_subtree_colour = Select Sub-Tree Colour\r
-label.create_new_sequence_features = Create New Sequence Feature(s)\r
-label.amend_delete_features = Amend/Delete Features for {0}\r
-exception.out_of_bounds_for_file = Out of bounds for file: i={0}, Final Buffer: i0={1} iend={2}\r
-exception.null_string_given_to_regex_search = Null String Given to Regex.search\r
-exception.null_string_like_given_to_regex_search = Null StringLike Given to Regex.search\r
-exception.null_string_given_to_regex_reverse_search = Null String Given to Regex.reverseSearch\r
-exception.null_string_like_given_to_regex_reverse_search = Null StringLike Given to Regex.reverseSearch\r
-exception.null_string_like_given_to_regex_search_from = Null String Given to Regex.searchFrom\r
-exception.null_string_like_given_to_regex_search_region = Null String Given to Regex.searchRegion\r
-exception.replace_null_regex_pointer = Replacer has null Regex pointer\r
-exception.bad_pattern_to_regex_perl_code = bad pattern to Regex.perlCode: {0}\r
-exception.no_stub_implementation_for_interface = There is no stub implementation for the interface: {0}\r
-exception.cannot_set_endpoint_address_unknown_port = Cannot set Endpoint Address for Unknown Port {0}\r
-exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis = Querying matching opening parenthesis for non-closing parenthesis character {0}\r
-exception.mismatched_unseen_closing_char = Mismatched (unseen) closing character {0}\r
-exception.mismatched_closing_char = Mismatched closing character {0}\r
-exception.mismatched_opening_char = Mismatched opening character {0} at {1}\r
-exception.invalid_datasource_couldnt_obtain_reader = Invalid datasource. Could not obtain Reader\r
-exception.index_value_not_in_range = {0}: Index value {1} not in range [0..{2}]\r
-exception.unterminated_cigar_string = Unterminated cigar string\r
-exception.unexpected_operation_cigar_string_pos = Unexpected operation {0} in cigar string (position {1} in {2}\r
-exception.couldnt_parse_responde_from_annotated3d_server = Couldn't parse response from Annotate3d server\r
-exception.application_test_npe = Application test: throwing an NullPointerException It should arrive at the console\r
-exception.overwriting_vamsas_id_binding = Overwriting vamsas id binding\r
-exception.overwriting_jalview_id_binding = Overwriting jalview id binding\r
-error.implementation_error_unknown_file_format_string = Implementation error: Unknown file format string\r
-exception.failed_to_resolve_gzip_stream = Failed to resolve GZIP stream\r
-exception.problem_opening_file_also_tried = Problem opening {0} (also tried {1}) : {2}\r
-exception.problem_opening_file = Problem opening {0} : {1}\r
-exception.failed_to_read_data_from_source = Failed to read data from source: {0}\r
-exception.no_init_source_stream = Unitialised Source Stream\r
-exception.invalid_source_stream = Invalid Source Stream: {0}\r
-error.implementation_error_reset_called_for_invalid_source = Implementation Error: Reset called for invalid source.\r
-exception.number_of_residues_in_query_sequence_differ_from_prediction = Number of residues in {0} supposed query sequence ({1}\n{2})\ndiffer from number of prediction sites in prediction ({3})\r
-label.mapped = mapped\r
-exception.jpredconcide_entry_has_unexpected_number_of_columns = JPredConcise: Entry ({0}) has an unexpected number of columns\r
-exception.couldnt_parse_concise_annotation_for_prediction = Couldn't parse concise annotation for prediction profile.\n{0}\r
-exception.newfile = NewickFile\: {0}\n\r
-label.no_tree_read_in = No Tree read in\r
-exception.rnaml_couldnt_access_datasource = Couldn't access datasource ({0})\r
-exception.ranml_couldnt_process_data = Couldn't process data as RNAML file ({0})\r
-exception.ranml_invalid_file = Invalid RNAML file ({0})\r
-exception.ranml_problem_parsing_data = Problem parsing data as RNAML ({0})\r
-exception.pfam_no_sequences_found = No sequences found (PFAM input)\r
-exception.stockholm_invalid_format = This file is not in valid STOCKHOLM format: First line does not contain '# STOCKHOLM'\r
-exception.couldnt_parse_sequence_line = Could not parse sequence line: {0}\r
-exception.error_parsing_line = Error parsing {0}\r
-exception.unknown_annotation_detected = Unknown annotation detected: {0} {1}\r
-exception.couldnt_store_sequence_mappings = Couldn't store sequence mappings for {0}\r
-exception.matrix_too_many_iteration = Too many iterations in {0} (max is {1})\r
-exception.browser_not_found = Exception in finding browser: {0}\r
-exception.browser_unable_to_locate = Unable to locate browser: {0}\r
-exception.invocation_target_exception_creating_aedesc = InvocationTargetException while creating AEDesc: {0}\r
-exception.illegal_access_building_apple_evt= IllegalAccessException while building AppleEvent: {0}\r
-exception.instantiation_creating_aedesc = InstantiationException while creating AEDesc: {0}\r
-exception.unable_to_launch_url = Unable to launch URL: {0}\r
-exception.unable_to_create_internet_config = Unable to create an Internet Config instance: {0}\r
-exception.invocation_target_calling_url = InvocationTargetException while calling openURL: {0}\r
-exception.illegal_access_calling_url = IllegalAccessException while calling openURL: {0}\r
-exception.interrupted_launching_browser = InterruptedException while launching browser: {0}\r
-exception.das_source_doesnt_support_sequence_command = Source {0} does not support the sequence command.\r
-exception.invalid_das_source = Invalid das source: {0}\r
-exception.ebiembl_retrieval_failed_on = EBI EMBL XML retrieval failed on {0}:{1}\r
-label.no_embl_record_found = # No EMBL record retrieved for {0}:{1}\r
-label.embl_successfully_parsed = # Successfully parsed the {0} queries into an Alignment\r
-exception.no_pdb_records_for_chain = No PDB Records for {0} chain {1}\r
-exception.unexpected_handling_rnaml_translation_for_pdb = Unexpected exception when handling RNAML translation of PDB data\r
-exception.couldnt_recover_sequence_properties_for_alignment = Couldn't recover sequence properties for alignment\r
-exception.unknown_format_for_file = Unknown format {0} for file \: \n{1}\r
-label.remove_gaps = Remove Gaps\r
-exception.couldnt_recover_sequence_props_for_jnet_query = Couldn't recover sequence properties for JNet Query sequence!\r
-exception.server_timeout_try_later = Server timed out - try again later\n\r
-exception.web_service_returned_null_try_later= Server at {0} returned null object, it probably cannot be contacted. Try again later.\r
-exception.cannot_contact_service_endpoint_at = Cannot contact service endpoint at {0}\r
-error.implementation_error_cannot_find_service_url_in_given_set = Implementation error: Cannot find service url in the given url set!\r
-error.implementation_error_cannot_find_service_url_in_given_set_param_store = Implementation error: Cannot find service url in the given url set for this service parameter store ({0}}\r
-exception.jobsubmission_invalid_params_set = Invalid parameter set. Check Jalview implementation\r
-exception.notvaliddata_group_contains_less_than_min_seqs = Group contains less than {0} sequences.\r
-exception.outofmemory_loading_pdb_file = Out of memory loading PDB File\r
-exception.eps_coudnt_write_output_file = Could not write to the output file: {0}\r
-exception.eps_method_not_supported = Method not currently supported by EpsGraphics2D version {0}\r
-exception.eps_unable_to_get_inverse_matrix = Unable to get inverse of matrix: {0}\r
-warn.job_cannot_be_cancelled_close_window = This job cannot be cancelled.\nJust close the window.\r
-warn.service_not_supported = Service not supported!\r
-warn.input_is_too_big = Input is too big!\r
-warn.invalid_job_param_set = Invalid job parameter set!\r
-info.job_couldnt_be_run_server_doesnt_support_program = Job could not be run because the server doesn't support this program.\n{0}\r
-info.job_couldnt_be_run_exceeded_hard_limit = Job could not be run because it exceeded a hard limit on the server.\n{0}\r
-info.job_couldnt_be_run_incorrect_param_setting = Job could not be run because some of the parameter settings are not supported by the server.\n{0}\nPlease check to make sure you have used the correct parameter set for this service\!\n\r
-info.no_jobs_ran = No jobs ran\r
-info.failed_to_submit_prediction = Failed to submit the prediction\:\n{0} {1}\r
-info.invalid_jnet_job_result_data ={0}\n{1}\nInvalid JNet job result data\!\n{2}\r
-info.failed_to_submit_sequences_for_alignment = Failed to submit sequences for alignment.\nIt is most likely that there is a problem with the server.\nJust close the window\n\r
-info.alignment_object_method_notes = \nAlignment Object Method Notes\n\r
-info.server_exception = \n{0} Server exception\!\n{1}\r
-status.processing_commandline_args = Processing commandline arguments...\r
-status.das_features_being_retrived = DAS features being retrieved...\r
-status.searching_for_sequences_from = Searching for sequences from {0}\r
-status.finished_searching_for_sequences_from = Finished searching for sequences from {0}\r
-label.eps_file = EPS file\r
-label.png_image = PNG image\r
-status.saving_file = Saving {0}\r
-status.export_complete = Export complete.\r
-status.fetching_pdb = Fetching PDB {0}\r
-status.refreshing_news = Refreshing news\r
-status.importing_vamsas_session_from = Importing VAMSAS session from {0}\r
-status.opening_params = Opening {0}\r
-status.waiting_sequence_database_fetchers_init = Waiting for Sequence Database Fetchers to initialise\r
-status.init_sequence_database_fetchers = Initialising Sequence Database Fetchers\r
-status.fetching_sequence_queries_from = Fetching {0} sequence queries from {1}\r
-status.finshed_querying = Finished querying\r
-status.parsing_results = Parsing results.\r
-status.processing = Processing...\r
-status.refreshing_web_service_menus = Refreshing Web Service Menus\r
-status.collecting_job_results = Collecting job results.\r
-status.fetching_das_sequence_features = Fetching DAS Sequence Features\r
-status.no_das_sources_active = No DAS Sources Active\r
-status.das_feature_fetching_cancelled = DAS Feature Fetching Cancelled\r
-status.das_feature_fetching_complete = DAS Feature Fetching Complete\r
-status.fetching_db_refs = Fetching db refs\r
-label.font_doesnt_have_letters_defined = Font doesn't have letters defined\nso cannot be used\nwith alignment data\r
-label.error_loading_file_params = Error loading file {0}\r
-label.error_loading_jalview_file = Error loading Jalview file\r
-warn.out_of_memory_when_action = Out of memory when {0}\!\!\nSee help files for increasing Java Virtual Machine memory.\r
-warn.out_of_memory_loading_file = Out of memory loading file {0}\!\!\nSee help files for increasing Java Virtual Machine memory.\r
-label.out_of_memory = Out of memory\r
-label.invalid_id_column_width = Invalid ID Column width\r
-warn.user_defined_width_requirements = The user defined width for the\nannotation and sequence ID columns\nin exported figures must be\nat least 12 pixels wide.\r
-label.couldnt_create_sequence_fetcher = Couldn't create SequenceFetcher\r
-warn.couldnt_create_sequence_fetcher_client = Could not create the sequence fetcher client. Check error logs for details.\r
-warn.server_didnt_pass_validation = Service did not pass validation.\nCheck the Jalview Console for more details.\r
-warn.url_must_contain = Sequence URL must contain $SEQUENCE_ID$ or a regex $SEQUENCE_ID=/<regex>/=$\r
-info.validate_jabaws_server = Validate JabaWS Server ?\n(Look in console output for results)\r
-label.test_server = Test Server?\r
-info.you_want_jalview_to_find_uniprot_accessions = Do you want Jalview to find\nUniprot Accession ids for given sequence names?\r
-label.find_uniprot_accession_ids = Find Uniprot Accession Ids\r
-label.new_sequence_fetcher = New Sequence Fetcher\r
-label.additional_sequence_fetcher = Additional Sequence Fetcher\r
-label.select_database_retrieval_source = Select Database Retrieval Source\r
-label.overwrite_existing_file = Overwrite existing file?\r
-label.file_already_exists = File exists\r
-label.edit_jabaws_url = Edit JABAWS URL\r
-label.add_jabaws_url = Add new JABAWS URL\r
-label.news_from_jalview = News from http://www.jalview.org\r
-label.cut_paste_alignmen_file = Cut & Paste Alignment File\r
-label.enter_redundancy_thereshold = Enter the redundancy thereshold\r
-label.select_dark_light_set_thereshold = <html><i>Select a dark and light text colour, then set the threshold to<br>switch between colours, based on background colour</i></html>\r
-label.select_feature_colour = Select Feature Colour\r
-label.ignore_gaps_consensus = Ignore Gaps In Consensus\r
-label.show_group_histogram = Show Group Histogram\r
-label.show_group_logo = Show Group Logo\r
-label.normalise_group_logo = Normalise Group Logo\r
-label.show_histogram = Show Histogram\r
-label.show_logo = Show Logo\r
-label.normalise_logo = Normalise Logo\r
-label.no_colour_selection_in_scheme = Please, make a colour selection before to apply colour scheme\r
-label.no_colour_selection_warn = Error saving colour scheme
\ No newline at end of file
+label.select_columns_containing = Select columns containing
+label.select_columns_not_containing = Select columns that do not contain
+option.trim_retrieved_seqs = Trim retrieved sequences
+label.trim_retrieved_sequences = When the reference sequence is longer than the sequence that you are working with, only keep the relevant subsequences.
+label.use_sequence_id_1 = Use $SEQUENCE_ID$ or $SEQUENCE_ID=/<regex>/=$
+label.use_sequence_id_2 = \nto embed sequence id in URL
+label.ws_parameters_for = Parameters for {0}
+label.switch_server = Switch server
+label.open_jabaws_web_page = Opens the JABAWS server's homepage in web browser
+label.choose_jabaws_server = Choose a server for running this service
+label.services_at = Services at {0}
+label.rest_client_submit = {0} using {1}
+label.fetch_retrieve_from =Retrieve from {0}</html>
+label.fetch_retrieve_from_all_sources = Retrieve from all {0} sources in {1}<br>First is :{2}<html> 
+label.feature_settings_click_drag = <html>Click/drag feature types up or down to change render order.<br/>Double click to select columns containing feature in alignment/current selection<br/>Pressing Alt will select columns outside features rather than inside<br/>Pressing Shift to modify current selection (rather than clear current selection)<br/>Press CTRL or Command/Meta to toggle columns in/outside features<br/></html>
+label.opt_and_params_further_details = see further details by right-clicking
+label.opt_and_params_show_brief_desc_image_link = <html>Click to show brief description<br><img src="{0}"/> Right click for further information.</html> 
+label.opt_and_params_show_brief_desc = <html>Click to show brief description<br></html>
+label.adjusts_width_generated_eps_png = <html>Adjusts the width of the generated EPS or PNG file to ensure even the longest sequence ID or annotation label is displayed</html>
+label.manually_specify_width_left_column = <html>Manually specify the width of the left hand column where sequence IDs and annotation labels will be rendered in exported alignment figures. This setting will be ignored if 'Automatically set ID width' is set</html>
+label.job_created_when_checked = <html>When checked, a job is created for every sequence in the current selection.</html>
+label.when_checked_job_visible_region_and_results = <html>When checked, a single job is created for the visible region and results mapped back onto their location in the alignment. Otherwise, a job would be created for every contiguous region visible in the alignment or current selection (e.g. a multiple alignment).</html>
+label.flat_file_representation = <html>Flat file representation of this rest service using the Really Simple Bioinformatics Service formalism</html>
+label.result_of_parsing_rsbs = <html>Results of parsing the RSBS representation</html>
+label.user_preset = User Preset
+label.service_preset = Service Preset
+label.run_with_preset = Run {0} with preset
+label.view_service_doc_url = <html>View <a href="{0}">{1}</a></html>
+label.submit_sequence = <html>Submit {0} {1} {2} {3} to<br/>{4}</html>
+action.by_title_param = by {0}
+label.alignment = Alignment
+label.secondary_structure_prediction = Secondary Structure Prediction
+label.sequence_database_search = Sequence Database Search
+label.analysis = Analysis
+label.protein_disorder = Protein Disorder 
+label.source_from_db_source = Sources from {0}
+label.from_msname = from {0}
+label.superpose_with = Superpose with ...
+action.do = Do
+label.scale_label_to_column = Scale Label to Column
+label.add_new_row = Add New Row
+label.edit_label_description = Edit Label/Description
+label.hide_row = Hide This Row
+label.delete_row = Delete This Row
+label.show_all_hidden_rows = Show All Hidden Rows
+label.export_annotation = Export Annotation
+label.copy_consensus_sequence = Copy Consensus Sequence
+label.helix = Helix
+label.sheet = Sheet
+label.rna_helix = RNA Helix
+label.remove_annotation = Remove Annotation
+label.colour_by = Colour by...
+label.muscle_multiple_protein_sequence_alignment = Muscle Multiple Protein Sequence Alignment
+label.mafft_multiple_sequence_alignment = MAFFT Multiple Sequence Alignment
+label.clustalw_multiple_sequence_alignment = ClustalW Multiple Sequence Alignment
+label.jnet_secondary_structure_prediction = JNet Secondary Structure Prediction
+label.multiharmony = Multi-Harmony
+label.unable_start_web_service_analysis = Unable to start web service analysis
+label.job_couldnt_be_started_check_input = The Job couldn't be started. Please check your input, and the Jalview console for any warning messages.
+label.prompt_each_time = Prompt each time
+label.use_source = Use Source
+label.couldnt_save_project = Couldn't save project
+label.error_whilst_saving_current_state_to = Error whilst saving current state to {0}
+label.error_whilst_loading_project_from = Error whilst loading project from {0}
+label.couldnt_load_project = Couldn't load project
+label.pca_sequences_not_aligned = The sequences must be aligned before calculating PCA.\nTry using the Pad function in the edit menu,\nor one of the multiple sequence alignment web services.
+label.invalid_name_preset_exists = Invalid name - preset already exists.
+label.invalid_name = Invalid name
+label.set_proxy_settings = Please set up your proxy settings in the 'Connections' tab of the Preferences window
+label.proxy_authorization_failed = Proxy Authorization Failed
+label.internal_jalview_error = Internal Jalview Error
+label.secondary_structure_prediction_service_couldnt_be_located = The Secondary Structure Prediction Service named {0} at {1} couldn't be located.
+label.service_called_is_not_msa_service = The Service called \n{0}\nis not a \nMultiple Sequence Alignment Service\!
+label.msa_service_is_unknown = The Multiple Sequence Alignment Service named {0} is unknown
+label.service_called_is_not_seq_search_service = The Service called \n{0}\nis not a \nSequence Search Service\!
+label.seq_search_service_is_unknown = The Sequence Search Service named {0} is unknown
+label.feature_type = Feature Type
+label.display = Display
+label.service_url = Service URL
+label.copied_sequences = Copied sequences
+label.cut_sequences = Cut Sequences
+label.conservation_colour_increment = Conservation Colour Increment ({0})
+label.percentage_identity_thereshold = Percentage Identity Thereshold ({0})
+label.error_unsupported_owwner_user_colour_scheme = Unsupported owner for User Colour scheme dialog
+label.save_alignment_to_file = Save Alignment to file
+label.save_features_to_file = Save Features to File
+label.save_annotation_to_file = Save Annotation to File
+label.no_features_on_alignment = No features found on alignment
+label.save_pdb_file = Save PDB File
+label.save_text_to_file = Save Text to File
+label.save_state = Save State
+label.restore_state = Restore State
+label.saving_jalview_project = Saving jalview project {0}
+label.loading_jalview_project = Loading jalview project {0}
+label.save_vamsas_document_archive = Save Vamsas Document Archive
+label.saving_vamsas_doc = Saving VAMSAS Document to {0}
+label.load_feature_colours = Load Feature Colours
+label.save_feature_colours = Save Feature Colour Scheme
+label.dataset_for = {0} Dataset for {1}
+label.select_startup_file = Select startup file
+label.select_default_browser = Select default web browser
+label.save_tree_as_newick = Save tree as newick file
+label.create_eps_from_tree = Create EPS file from tree
+label.create_png_from_tree = Create PNG image from tree
+label.save_colour_scheme = Save colour scheme
+label.edit_params_for = Edit parameters for {0}
+label.choose_filename_for_param_file = Choose a filename for this parameter file
+label.save_as_html = Save as HTML
+label.recently_opened = Recently Opened
+label.blasting_for_unidentified_sequence_jobs_running = BLASTing for unidentified sequences - {0}  jobs running.
+label.tree_from = Tree from {0}
+label.webservice_job_title = {0} using {1}
+label.select_visible_region_of = selected {0} region of {1}
+label.visible = Visible
+label.select_unselect_visible_regions_from = select and unselected {0} regions from {1}
+label.visible_region_of = visible region of
+label.webservice_job_title_on = {0} using {1} on {2}
+label.updating_vamsas_session = Updating vamsas session
+label.loading_file = Loading File: {0}
+label.edit_params = Edit {0}
+error.not_implemented = Not implemented
+error.no_such_method_as_clone1_for = No such method as clone1 for {0}
+error.null_from_clone1 = Null from clone1!
+error.implementation_error_sortbyfeature = Implementation Error - sortByFeature method must be one of FEATURE_SCORE, FEATURE_LABEL or FEATURE_DENSITY.
+error.not_yet_implemented = Not yet implemented
+error.unknown_type_dna_or_pep = Unknown Type {0} - dna or pep are the only allowed values.
+error.implementation_error_dont_know_thereshold_annotationcolourgradient = Implementation error: don't know about threshold setting for current AnnotationColourGradient.
+error.implementation_error_embeddedpopup_not_null = Implementation error - embeddedPopup must be non-null
+error.invalid_colour_for_mycheckbox = Invalid color for MyCheckBox
+error.implementation_error_unrecognised_render_object_for_features_type = Implementation Error: Unrecognised render object {0} for features of type {1}
+error.implementation_error_unsupported_feature_colour_object = Implementation error: Unsupported feature colour object.
+error.invalid_separator_parameter = Invalid separator parameter - must be non-zero length
+error.alignment_cigararray_not_implemented = Alignment(CigarArray) not yet implemented
+error.weak_sequencei_equivalence_not_yet_implemented = Weak sequenceI equivalence not yet implemented.
+error.implementation_error_can_only_make_alignmnet_from_cigararray = Implementation Error - can only make an alignment view from a CigarArray of sequences.
+error.empty_view_cannot_be_updated = empty view cannot be updated.
+error.mismatch_between_number_of_sequences_in_block = Mismatch between number of sequences in block {0} ({1}) and the original view ({2})
+error.padding_not_yet_implemented = Padding not yet implemented
+error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view = Mismatch between visible blocks to update and number of contigs in view (contigs=0,blocks={0})
+error.unknown_seq_cigar_operation = Unknown SeqCigar operation {0}
+error.implementation_bug_parse_cigar_string = Implementation bug in parseCigarString
+error.implementation_error_invalid_operation_string = Implementation error. Invalid operation string.
+error.invalid_range_string = Invalid range string (must be zero or positive number)
+error.implementation_error_delete_range_out_of_bounds = Implementation Error: deleteRange out of bounds: start must be non-negative and less than end.
+error.implementation_error = Implementation error
+error.implementation_error_unknown_operation = Implementation Error! Unknown operation {0}
+error.implementation_error_unexpected_null_from_get_sequence_and_deletions = Implementation Error - unexpected null from getSequenceAndDeletions
+error.implementation_error_set_seq_null = Implementation Error - _setSeq(null,...)
+error.implementation_error_s = Implementation Error: _s= {0}
+error.implementation_error_seqcigar_possible = SeqCigar: Possible implementation error: sequence is longer than dataset sequence
+error.implmentation_bug_seq_null = Implementation Bug. Null seq
+error.implementation_bug_cigar_operation_list_range_list = Implementation Bug. Cigar Operation list!= range list
+error.not_yet_implemented_cigar_object_from_cigar_string = NOT YET Implemented: Constructing a Cigar object from a cigar string and a gapped sequence.
+error.implementation_bug_cigar_operation = Implementation Bug. Cigar Operation {0} {1} not one of {2}, {3}, or {4}.
+error.implementation_error_for_new_cigar = Implementation error for new Cigar(SequenceI)
+error.implementation_error_cigar_seq_no_operations = Implementation error: {0}th sequence Cigar has no operations.
+error.implementation_error_jmol_getting_data = Implementation error - Jmol seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016
+error.implementation_error_no_pdbentry_from_index = Implementation error - no corresponding pdbentry (for index {0}) to add sequences mappings to
+error.jmol_version_not_compatible_with_jalview_version = Jmol version {0} is not compatible with this version of Jalview. Report this problem at issues.jalview.org
+error.not_implemented_remove = Remove: Not implemented
+error.not_implemented_clone = Clone: Not implemented
+error.implementation_error_chimera_getting_data = Implementation error - Chimera seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016
+error.call_setprogressbar_before_registering_handler = call setProgressBar before registering the progress bar's handler.
+label.cancelled_params = Cancelled {0}
+error.implementation_error_cannot_show_view_alignment_frame = Implementation error: cannot show a view from another alignment in an AlignFrame.
+error.implementation_error_dont_know_about_thereshold_setting = Implementation error: don't know about threshold setting for current AnnotationColourGradient.
+error.eps_generation_not_implemented = EPS Generation not yet implemented
+error.png_generation_not_implemented = PNG Generation not yet implemented
+error.try_join_vamsas_session_another = Trying to join a vamsas session when another is already connected
+error.invalid_vamsas_session_id = Invalid vamsas session id
+error.implementation_error_cannot_create_groovyshell = Implementation Error. Cannot create groovyShell without Groovy on the classpath!
+label.groovy_support_failed = Jalview Groovy Support Failed
+label.couldnt_create_groovy_shell = Couldn't create the groovy Shell. Check the error log for the details of what went wrong.
+error.unsupported_version_calcIdparam = Unsupported Version for calcIdparam {0}
+error.implementation_error_cant_reorder_tree = Implementation Error: Can't reorder this tree. Not DefaultMutableTreeNode.
+error.invalid_value_for_option = Invalid value {0} for option {1}
+error.implementation_error_cannot_import_vamsas_doc = Implementation Error - cannot import existing vamsas document into an existing session, Yet!
+label.vamsas_doc_couldnt_be_opened_as_new_session = VAMSAS Document could not be opened as a new session - please choose another
+error.implementation_error_vamsas_operation_not_init = Impementation error! Vamsas Operations when client not initialised and connected
+error.jalview_no_connected_vamsas_session = Jalview not connected to Vamsas session
+error.implementation_error_cannot_recover_vamsas_object_mappings = IMPLEMENTATION ERROR: Cannot recover vamsas object mappings - no backup was made
+error.setstatus_called_non_existent_job_pane = setStatus called for non-existent job pane {0}
+error.implementation_error_cannot_find_marshaller_for_param_set =Implementation error: Can't find a marshaller for the parameter set
+error.implementation_error_old_jalview_object_not_bound =IMPLEMENTATION ERROR: old jalview object is not bound ! ({0})
+error.implementation_error_vamsas_doc_class_should_bind_to_type = Implementation Error: Vamsas Document Class {0} should bind to a {1} (found a {2})
+error.implementation_error_jalview_class_should_bind_to_type = Implementation Error: Jalview Class {0} should bind to a {1} (found a {2})
+error.invalid_vamsas_rangetype_cannot_resolve_lists = Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!
+error.implementation_error_maplist_is_null = Implementation error. MapList is null for initMapType.
+error.implementation_error_cannot_have_null_alignment = Implementation error: Cannot have null alignment property key
+error.implementation_error_null_fileparse = Implementation error. Null FileParse in copy constructor
+error.implementation_error_cannot_map_alignment_sequences = IMPLEMENTATION ERROR: Cannot map an alignment of sequences from different datasets into a single alignment in the vamsas document.
+error.implementation_error_cannot_duplicate_colour_scheme = Serious implementation error: cannot duplicate colourscheme {0}
+error.implementation_error_structure_selection_manager_null = Implementation error. Structure selection manager's context is 'null'
+exception.ssm_context_is_null = SSM context is null
+error.idstring_seqstrings_only_one_per_sequence = idstrings and seqstrings contain one string each per sequence
+error.cannot_have_mixed_length_replacement_vectors = Cannot have mixed length replacement vectors. Replacement vector for {0} is {1} strings long, and have already seen a {2} length vector.
+error.cannot_have_zero_length_vector_replacement_strings = Cannot have zero length vector of replacement strings - either 1 value or n values.
+error.implementation_error_multiple_single_sequence_prediction_jobs_not_supported = Implementation Error! Multiple single sequence prediction jobs are not yet supported
+error.implementation_error_invalid_msa_index_for_job =Implementation Error! Invalid msaIndex for JPredJob on parent MSA input object!
+error.implementation_error_startjob_called = Implementation error - StartJob(JpredJob) called on {0}
+error.multiple_jnet_subjob_merge_not_implemented = Multiple JNet subjob merging not yet implemented
+label.job_never_ran = Job never ran - input returned to user.
+error.implementation_error_minlen_must_be_greater_zero = Implementation error: minlen must be zero or more
+error.implementation_error_msawbjob_called = Implementation error - StartJob(MsaWSJob) called on a WSJobInstance {0}
+error.implementation_error_cannot_attach_ws_menu_entry = IMPLEMENTATION ERROR: cannot attach WS Menu Entry without service handle reference!
+error.parameter_migration_not_implemented_yet = Parameter migration not implemented yet
+error.implementation_error_cannot_set_jaba_option = Implementation error: cannot set Jaba Option to a value outside its allowed value range!
+error.implementation_error_valuetype_doesnt_support_jabaws_type = IMPLEMENTATION ERROR: jalview.ws.params.ValueConstrainI.ValueType does not support the JABAWS type : {0}
+error.cannot_create_jabaws_param_set = Cannot create a JabaWSParamSet from non-JabaWS parameters
+error.cannot_set_arguments_to_jabaws_param_set = Cannot set arguments to a JabaWSParamSet that are not JabaWS arguments
+error.implementation_error_runner_config_not_available = Implementation Error: Runner Config not available for a JABAWS service of type {0} ({1})
+error.implementation_error_cannot_handle_jaba_param = Implementation Error: Cannot handle Jaba parameter object {0}
+error.implementation_error_attempt_to_delete_service_preset = Implementation error: Attempt to delete a service preset!
+error.implementation_error_cannot_locate_oldname_presetname = Implementation error: Can't locate either oldname ({0}) or presetName ({1}in the datastore!"
+error.implementation_error_jabaws_param_set_only_handled_by = Implementation error: JabaWsParamSets can only be handled by JabaParamStore
+error.cannot_set_source_file_for = Cannot set source file for {0}
+error.mismatch_service_instance_preset = Probable mismatch between service instance and preset!
+error.cannot_set_params_for_ws_preset = Cannot set Parameters for a Jaba Web service's preset
+error.implementation_error_can_only_instantiate_jaba_param_sets = Implementation error: Can only instantiate Jaba parameter sets
+error.no_aacon_service_found = No AACon service found
+error.implementation_error_couldnt_copy_value_constraint = Implementation error: could not copy ValueConstrain!
+error.couldnt_encode_as_utf8 = Couldn't encode {0} as UTF-8.
+error.tree_inputtype_not_yet_implemented = Tree InputType not yet implemented
+error.implementation_error_need_to_have_httpresponse = Implementation Error: need to have an HttpResponse to process
+error.dbrefsource_implementation_exception =DBRefSource Implementation Exception
+error.implementation_error_dbinstance_must_implement_interface = Implmentation Error - getDbInstances must be given a class that implements jalview.ws.seqfetcher.DbSourceProxy (was given{0})
+error.implementation_error_must_init_dbsources =Implementation error. Must initialise dbSources
+label.view_controller_toggled_marked = {0} {1} columns {2} containing features of type {3}  across {4} sequence(s)
+label.toggled = Toggled
+label.marked = Marked
+label.not = not
+label.no_feature_of_type_found = No features of type {0} found.
+label.submission_params = Submission {0}
+label.empty_alignment_job = Empty Alignment Job
+label.add_new_sbrs_service = Add a new Simple Bioinformatics Rest Service
+label.edit_sbrs_entry = Edit Simple Bioinformatics Rest Service entry
+label.pca_recalculating = Recalculating PCA
+label.pca_calculating = Calculating PCA
+label.select_foreground_colour = Choose foreground colour
+label.select_colour_for_text = Select Colour for Text
+label.adjunst_foreground_text_colour_thereshold = Adjust Foreground Text Colour Threshold
+label.select_subtree_colour = Select Sub-Tree Colour
+label.create_new_sequence_features = Create New Sequence Feature(s)
+label.amend_delete_features = Amend/Delete Features for {0}
+exception.out_of_bounds_for_file = Out of bounds for file: i={0}, Final Buffer: i0={1} iend={2}
+exception.null_string_given_to_regex_search = Null String Given to Regex.search
+exception.null_string_like_given_to_regex_search = Null StringLike Given to Regex.search
+exception.null_string_given_to_regex_reverse_search = Null String Given to Regex.reverseSearch
+exception.null_string_like_given_to_regex_reverse_search = Null StringLike Given to Regex.reverseSearch
+exception.null_string_like_given_to_regex_search_from = Null String Given to Regex.searchFrom
+exception.null_string_like_given_to_regex_search_region = Null String Given to Regex.searchRegion
+exception.replace_null_regex_pointer = Replacer has null Regex pointer
+exception.bad_pattern_to_regex_perl_code = bad pattern to Regex.perlCode: {0}
+exception.no_stub_implementation_for_interface = There is no stub implementation for the interface: {0}
+exception.cannot_set_endpoint_address_unknown_port = Cannot set Endpoint Address for Unknown Port {0}
+exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis = Querying matching opening parenthesis for non-closing parenthesis character {0}
+exception.mismatched_unseen_closing_char = Mismatched (unseen) closing character {0}
+exception.mismatched_closing_char = Mismatched closing character {0}
+exception.mismatched_opening_char = Mismatched opening character {0} at {1}
+exception.invalid_datasource_couldnt_obtain_reader = Invalid datasource. Could not obtain Reader
+exception.index_value_not_in_range = {0}: Index value {1} not in range [0..{2}]
+exception.unterminated_cigar_string = Unterminated cigar string
+exception.unexpected_operation_cigar_string_pos = Unexpected operation {0} in cigar string (position {1} in {2}
+exception.couldnt_parse_responde_from_annotated3d_server = Couldn't parse response from Annotate3d server
+exception.application_test_npe = Application test: throwing an NullPointerException It should arrive at the console
+exception.overwriting_vamsas_id_binding = Overwriting vamsas id binding
+exception.overwriting_jalview_id_binding = Overwriting jalview id binding
+error.implementation_error_unknown_file_format_string = Implementation error: Unknown file format string
+exception.failed_to_resolve_gzip_stream = Failed to resolve GZIP stream
+exception.problem_opening_file_also_tried = Problem opening {0} (also tried {1}) : {2}
+exception.problem_opening_file = Problem opening {0} : {1}
+exception.failed_to_read_data_from_source = Failed to read data from source: {0}
+exception.no_init_source_stream = Unitialised Source Stream
+exception.invalid_source_stream = Invalid Source Stream: {0}
+error.implementation_error_reset_called_for_invalid_source = Implementation Error: Reset called for invalid source.
+exception.number_of_residues_in_query_sequence_differ_from_prediction = Number of residues in {0} supposed query sequence ({1}\n{2})\ndiffer from number of prediction sites in prediction ({3})
+label.mapped = mapped
+exception.jpredconcide_entry_has_unexpected_number_of_columns = JPredConcise: Entry ({0}) has an unexpected number of columns
+exception.couldnt_parse_concise_annotation_for_prediction = Couldn't parse concise annotation for prediction profile.\n{0}
+exception.newfile = NewickFile\: {0}\n
+label.no_tree_read_in = No Tree read in
+exception.rnaml_couldnt_access_datasource = Couldn't access datasource ({0})
+exception.ranml_couldnt_process_data = Couldn't process data as RNAML file ({0})
+exception.ranml_invalid_file = Invalid RNAML file ({0})
+exception.ranml_problem_parsing_data = Problem parsing data as RNAML ({0})
+exception.pfam_no_sequences_found = No sequences found (PFAM input)
+exception.stockholm_invalid_format = This file is not in valid STOCKHOLM format: First line does not contain '# STOCKHOLM'
+exception.couldnt_parse_sequence_line = Could not parse sequence line: {0}
+exception.error_parsing_line = Error parsing {0}
+exception.unknown_annotation_detected = Unknown annotation detected: {0} {1}
+exception.couldnt_store_sequence_mappings = Couldn't store sequence mappings for {0}
+exception.matrix_too_many_iteration = Too many iterations in {0} (max is {1})
+exception.browser_not_found = Exception in finding browser: {0}
+exception.browser_unable_to_locate = Unable to locate browser: {0}
+exception.invocation_target_exception_creating_aedesc = InvocationTargetException while creating AEDesc: {0}
+exception.illegal_access_building_apple_evt= IllegalAccessException while building AppleEvent: {0}
+exception.instantiation_creating_aedesc = InstantiationException while creating AEDesc: {0}
+exception.unable_to_launch_url = Unable to launch URL: {0}
+exception.unable_to_create_internet_config = Unable to create an Internet Config instance: {0}
+exception.invocation_target_calling_url = InvocationTargetException while calling openURL: {0}
+exception.illegal_access_calling_url = IllegalAccessException while calling openURL: {0}
+exception.interrupted_launching_browser = InterruptedException while launching browser: {0}
+exception.das_source_doesnt_support_sequence_command = Source {0} does not support the sequence command.
+exception.invalid_das_source = Invalid das source: {0}
+exception.ebiembl_retrieval_failed_on = EBI EMBL XML retrieval failed on {0}:{1}
+label.no_embl_record_found = # No EMBL record retrieved for {0}:{1}
+label.embl_successfully_parsed = # Successfully parsed the {0} queries into an Alignment
+exception.no_pdb_records_for_chain = No PDB Records for {0} chain {1}
+exception.unexpected_handling_rnaml_translation_for_pdb = Unexpected exception when handling RNAML translation of PDB data
+exception.couldnt_recover_sequence_properties_for_alignment = Couldn't recover sequence properties for alignment
+exception.unknown_format_for_file = Unknown format {0} for file \: \n{1}
+label.remove_gaps = Remove Gaps
+exception.couldnt_recover_sequence_props_for_jnet_query = Couldn't recover sequence properties for JNet Query sequence!
+exception.server_timeout_try_later = Server timed out - try again later\n
+exception.web_service_returned_null_try_later= Server at {0} returned null object, it probably cannot be contacted. Try again later.
+exception.cannot_contact_service_endpoint_at = Cannot contact service endpoint at {0}
+error.implementation_error_cannot_find_service_url_in_given_set = Implementation error: Cannot find service url in the given url set!
+error.implementation_error_cannot_find_service_url_in_given_set_param_store = Implementation error: Cannot find service url in the given url set for this service parameter store ({0}}
+exception.jobsubmission_invalid_params_set = Invalid parameter set. Check Jalview implementation
+exception.notvaliddata_group_contains_less_than_min_seqs = Group contains less than {0} sequences.
+exception.outofmemory_loading_pdb_file = Out of memory loading PDB File
+exception.eps_coudnt_write_output_file = Could not write to the output file: {0}
+exception.eps_method_not_supported = Method not currently supported by EpsGraphics2D version {0}
+exception.eps_unable_to_get_inverse_matrix = Unable to get inverse of matrix: {0}
+warn.job_cannot_be_cancelled_close_window = This job cannot be cancelled.\nJust close the window.
+warn.service_not_supported = Service not supported!
+warn.input_is_too_big = Input is too big!
+warn.invalid_job_param_set = Invalid job parameter set!
+info.job_couldnt_be_run_server_doesnt_support_program = Job could not be run because the server doesn't support this program.\n{0}
+info.job_couldnt_be_run_exceeded_hard_limit = Job could not be run because it exceeded a hard limit on the server.\n{0}
+info.job_couldnt_be_run_incorrect_param_setting = Job could not be run because some of the parameter settings are not supported by the server.\n{0}\nPlease check to make sure you have used the correct parameter set for this service\!\n
+info.no_jobs_ran = No jobs ran
+info.failed_to_submit_prediction = Failed to submit the prediction\:\n{0} {1}
+info.invalid_jnet_job_result_data ={0}\n{1}\nInvalid JNet job result data\!\n{2}
+info.failed_to_submit_sequences_for_alignment = Failed to submit sequences for alignment.\nIt is most likely that there is a problem with the server.\nJust close the window\n
+info.alignment_object_method_notes = \nAlignment Object Method Notes\n
+info.server_exception = \n{0} Server exception\!\n{1}
+status.processing_commandline_args = Processing commandline arguments...
+status.das_features_being_retrived = DAS features being retrieved...
+status.searching_for_sequences_from = Searching for sequences from {0}
+status.finished_searching_for_sequences_from = Finished searching for sequences from {0}
+label.eps_file = EPS file
+label.png_image = PNG image
+status.saving_file = Saving {0}
+status.export_complete = Export complete.
+status.fetching_pdb = Fetching PDB {0}
+status.refreshing_news = Refreshing news
+status.importing_vamsas_session_from = Importing VAMSAS session from {0}
+status.opening_params = Opening {0}
+status.waiting_sequence_database_fetchers_init = Waiting for Sequence Database Fetchers to initialise
+status.init_sequence_database_fetchers = Initialising Sequence Database Fetchers
+status.fetching_sequence_queries_from = Fetching {0} sequence queries from {1}
+status.finshed_querying = Finished querying
+status.parsing_results = Parsing results.
+status.processing = Processing...
+status.refreshing_web_service_menus = Refreshing Web Service Menus
+status.collecting_job_results = Collecting job results.
+status.fetching_das_sequence_features = Fetching DAS Sequence Features
+status.no_das_sources_active = No DAS Sources Active
+status.das_feature_fetching_cancelled = DAS Feature Fetching Cancelled
+status.das_feature_fetching_complete = DAS Feature Fetching Complete
+status.fetching_db_refs = Fetching db refs
+label.font_doesnt_have_letters_defined = Font doesn't have letters defined\nso cannot be used\nwith alignment data
+label.error_loading_file_params = Error loading file {0}
+label.error_loading_jalview_file = Error loading Jalview file
+warn.out_of_memory_when_action = Out of memory when {0}\!\!\nSee help files for increasing Java Virtual Machine memory.
+warn.out_of_memory_loading_file = Out of memory loading file {0}\!\!\nSee help files for increasing Java Virtual Machine memory.
+label.out_of_memory = Out of memory
+label.invalid_id_column_width = Invalid ID Column width
+warn.user_defined_width_requirements = The user defined width for the\nannotation and sequence ID columns\nin exported figures must be\nat least 12 pixels wide.
+label.couldnt_create_sequence_fetcher = Couldn't create SequenceFetcher
+warn.couldnt_create_sequence_fetcher_client = Could not create the sequence fetcher client. Check error logs for details.
+warn.server_didnt_pass_validation = Service did not pass validation.\nCheck the Jalview Console for more details.
+warn.url_must_contain = Sequence URL must contain $SEQUENCE_ID$ or a regex $SEQUENCE_ID=/<regex>/=$
+info.validate_jabaws_server = Validate JabaWS Server ?\n(Look in console output for results)
+label.test_server = Test Server?
+info.you_want_jalview_to_find_uniprot_accessions = Do you want Jalview to find\nUniprot Accession ids for given sequence names?
+label.find_uniprot_accession_ids = Find Uniprot Accession Ids
+label.new_sequence_fetcher = New Sequence Fetcher
+label.additional_sequence_fetcher = Additional Sequence Fetcher
+label.select_database_retrieval_source = Select Database Retrieval Source
+label.overwrite_existing_file = Overwrite existing file?
+label.file_already_exists = File exists
+label.edit_jabaws_url = Edit JABAWS URL
+label.add_jabaws_url = Add new JABAWS URL
+label.news_from_jalview = News from http://www.jalview.org
+label.cut_paste_alignmen_file = Cut & Paste Alignment File
+label.enter_redundancy_thereshold = Enter the redundancy thereshold
+label.select_dark_light_set_thereshold = <html><i>Select a dark and light text colour, then set the threshold to<br>switch between colours, based on background colour</i></html>
+label.select_feature_colour = Select Feature Colour
+label.delete_all = Delete all sequences
+warn.delete_all = <html>Deleting all sequences will close the alignment window.<br>Confirm deletion or Cancel.
+label.add_annotations_for = Add annotations for
+label.choose_annotations = Choose annotations
+label.find = Find
+label.invalid_search = Search string invalid
+error.invalid_regex = Invalid regular expression
+label.ignore_gaps_consensus = Ignore Gaps In Consensus
+label.show_group_histogram = Show Group Histogram
+label.show_group_logo = Show Group Logo
+label.normalise_group_logo = Normalise Group Logo
+label.show_histogram = Show Histogram
+label.show_logo = Show Logo
+label.normalise_logo = Normalise Logo
+label.no_colour_selection_in_scheme = Please, make a colour selection before to apply colour scheme
+label.no_colour_selection_warn = Error saving colour scheme
index ac60810..08fd094 100644 (file)
-action.refresh_services = Refrescar servicios\r
-action.reset_services = Reiniciar servicios\r
-action.merge_results = Unificar resultados\r
-action.load_scheme = Cargar esquema\r
-action.save_scheme = Guardar esquema\r
-action.save_image = Guardar imagen\r
-action.paste = Pegar\r
-action.show_html_source = Mostrar código HTML\r
-action.print = Imprimir\r
-action.web_service = Servicio web\r
-action.cancel_job = Cancelar trabajo\r
-action.start_job = Arrancar trabajo\r
-action.revert = Deshacer\r
-action.move_down = Mover hacia abajo\r
-action.move_up = Mover hacia arriba\r
-action.remove_return_datatype = Borrar tipo de datos de retorno\r
-action.add_return_datatype = Añadir tipo de datos de retorno\r
-action.remove_input_parameter = Borrar el parámetro de entrada seleccionado\r
-action.add_input_parameter = Añadir parámetro de entrada seleccionado\r
-action.edit = Editar\r
-action.new = Nuevo\r
-action.open_file = Abrir fichero\r
-action.show_unconserved = Mostrar regiones no conservadas\r
-action.open_new_aligmnent = Abrir nuevo alineamiento\r
-action.raise_associated_windows = Destacar ventanas asociadas\r
-action.minimize_associated_windows = Minimizar ventanas asociadas\r
-action.close_all = Cerrar todo\r
-action.load_project = Cargar proyecto\r
-action.save_project = Guardar proyecto\r
-action.quit = Salir\r
-action.expand_views = Expandir vistas\r
-action.gather_views = Capturar vistas\r
-action.page_setup = Configuración de la página\r
-action.reload = Recargar\r
-action.load = Cargar\r
-action.open = Abrir\r
-action.cancel = Cancelar\r
-action.create = Crear\r
-action.update = Actualizar\r
-action.delete = Borrar\r
-action.snapshot = Imagen\r
-action.clear = Limpiar\r
-action.accept = Aceptar\r
-action.select_ddbb = --- Seleccionar base de datos ---\r
-action.undo = Deshacer\r
-action.redo = Rehacer\r
-action.reset = Reiniciar\r
-action.remove_left = Eliminar parte izquierda\r
-action.remove_right = Eliminar parte derecha\r
-action.remove_empty_columns = Eliminar las columnas vacías\r
-action.remove_all_gaps = Eliminar todos los huecos\r
-action.left_justify_alignment = Ajustar el alineamiento a la izquierda\r
-action.right_justify_alignment = Ajustar el alineamiento a la derecha\r
-action.boxes = Casillas\r
-action.text = Texto\r
-action.by_pairwise_id = Identificar por parejas\r
-action.by_id = Por identificador\r
-action.by_length = Por longitud\r
-action.by_group = Por grupo\r
-action.remove = Eliminar\r
-action.remove_redundancy = Eliminar redundancia...\r
-action.pairwise_alignment = Alineamiento de pares...\r
-action.by_rna_helixes = Por hélices de RNA\r
-action.user_defined = Definido por el usuario...\r
-action.by_conservation = Por conservación\r
-action.wrap = Envolver\r
-action.show_gaps = Mostrar huecos\r
-action.show_hidden_markers = Mostrar marcadores ocultos\r
-action.find = Buscar\r
-action.undefine_groups = Grupos sin definir\r
-action.create_groups = Crear grupos\r
-action.make_groups_selection = Hacer grupos para seleccionar\r
-action.copy = Copiar\r
-action.cut = Cortar\r
-action.font = Fuente...\r
-action.scale_above = Escala superior\r
-action.scale_left = Escala izquierda\r
-action.scale_right = Escala derecha\r
-action.by_tree_order = Por orden del árbol\r
-action.sort = Ordenar\r
-action.calculate_tree = Calcular árbol\r
-action.help = Ayuda\r
-action.by_annotation = Por anotación...\r
-action.invert_sequence_selection = Invertir selección de secuencias\r
-action.invert_column_selection = Invertir selección de columnas\r
-action.show = Mostrar\r
-action.hide = Ocultar\r
-action.ok = OK\r
-action.set_defaults = Defecto\r
-action.create_group = Crear grupo\r
-action.remove_group = Eliminar grupo\r
-action.edit_group = Editar grupo\r
-action.border_colour = Color del borde\r
-action.edit_new_group = Editar nuevo grupo\r
-action.hide_sequences = Ocultar secuencias\r
-action.sequences = Secuencias\r
-action.ids = IDS\r
-action.ids_sequences = IDS y secuencias\r
-action.reveal_all = Revelar todo\r
-action.reveal_sequences = Revelar secuencias\r
-action.find_all = Buscar todo\r
-action.find_next = Buscar siguiente\r
-action.file = Archivo\r
-action.view = Ver \r
-action.change_params = Cambiar parámetros\r
-action.apply = Aplicar\r
-action.apply_threshold_all_groups = Aplicar umbral a todos los grupos\r
-action.apply_all_groups = Aplicar a todos los grupos\r
-action.by_chain = Por cadena\r
-action.by_sequence = Por secuencia\r
-action.paste_annotations = Pegar anotaciones\r
-action.format = Formato\r
-action.select = Seleccionar\r
-action.new_view = Nueva vista\r
-action.close = Cerrar\r
-action.add = Añadir\r
-action.save_as_default = Guardar como por defecto\r
-action.save_as = Guardar como\r
-action.save = Guardar\r
-action.cancel_fetch = Cancelar búsqueda\r
-action.save_omit_hidden_columns = Guardar / Omitir las columnas ocultas\r
-action.change_font = Cambiar Fuente\r
-action.change_font_tree_panel = Cambiar fuente (panel del árbol)\r
-action.colour = Color\r
-action.calculate = Calcular\r
-action.select_all = Seleccionar Todo\r
-action.deselect_all = Deseleccionar Todo\r
-action.invert_selection = Invertir selección\r
-action.using_jmol = Usar Jmol\r
-action.link = Enlazar\r
-action.group_link = Enlazar grupo\r
-action.show_chain = Mostrar cadena\r
-action.show_group = Mostrar grupo\r
-action.fetch_db_references = Recuperar referencias a base de datos\r
-action.view_flanking_regions = Mostrar flancos\r
-label.view_flanking_regions = Mostrar los datos de la secuencia a ambos lados de las subsecuencias implicadas en este alineamiento\r
-label.str = Str: \r
-label.seq = Seq: \r
-label.structures_manager = Administrar estructuras\r
-label.nickname = Sobrenombre:\r
-label.url = URL: \r
-label.input_file_url = Introducir URL en el fichero de entrada\r
-label.select_feature = Seleccionar función:\r
-label.name = Nombre:\r
-label.name_param = Nombre: {0}\r
-label.group = Grupo:\r
-label.group_name = Nombre del grupo\r
-label.group_description = Descripción del grupo\r
-label.edit_group_name_description = Editar nombre/descripción del grupo\r
-label.colour = Color:\r
-label.description = Descripción:\r
-label.start = Comenzar:\r
-label.end = Terminar:\r
-label.current_parameter_set_name = Nombre actual del conjunto de parámetros:\r
-label.service_action = Acción de servicio:\r
-label.post_url = POST URL: \r
-label.url_suffix = URL Sufijo\r
-label.sequence_source = Fuente de la secuencia\r
-label.per_seq = por secuencia\r
-label.result_vertically_separable = Los resultados son separables verticalmente\r
-label.amend = Modificar\r
-label.undo_command = Deshacer {0}\r
-label.redo_command = Rehacer {0}\r
-label.principal_component_analysis = Análisis del Componente Principal\r
-label.average_distance_identity = Distancia Media Usando % de Identidad\r
-label.neighbour_joining_identity = Unir vecinos utilizando % de Identidad\r
-label.treecalc_title = {0} utilizando {1}\r
-label.tree_calc_av = Distancia media\r
-label.tree_calc_nj = Unir vecinos\r
-label.select_score_model = Selecciones modelo de puntuación\r
-label.score_model_pid = % Identidad\r
-label.score_model_blosum62 = BLOSUM62\r
-label.score_model_pam250 = PAM 250\r
-label.score_model_conservation = Conservación de las propiedades físico-químicas\r
-label.score_model_enhconservation = Conservación de las propiedades físico-químicas\r
-label.status_bar = Barra de estado\r
-label.out_to_textbox = Generar cuadro de texto\r
-label.clustalx = Clustalx\r
-label.clustal = Clustal\r
-label.zappo = Zappo\r
-label.taylor = Taylor\r
-label.blc = BLC\r
-label.fasta = Fasta\r
-label.msf = MSF\r
-label.pfam = PFAM\r
-label.pileup = Pileup\r
-label.pir = PIR\r
-label.hydrophobicity = Hidrofobicidad\r
-label.helix_propensity = Tendencia de la hélice\r
-label.strand_propensity = Tendencia de la hebra\r
-label.turn_propensity = Tendencia de giro\r
-label.buried_index = Índice de encubrimiento\r
-label.purine_pyrimidine = Purina/Pirimidina\r
-label.percentage_identity = Porcentaje de identidad\r
-label.blosum62 = BLOSUM62\r
-label.blosum62_score = Puntuación del BLOSUM62 \r
-label.tcoffee_scores = Puntuación del T-Coffee\r
-label.average_distance_bloslum62 = Distancia Media Usando BLOSUM62\r
-label.neighbour_blosum62 = Neighbour Joining usando BLOSUM62\r
-label.show_annotations = Mostrar anotaciones\r
-label.colour_text = Color del texto\r
-label.show_non_conversed = Mostrar no conservadas\r
-label.overview_window = Ventana resumen\r
-label.none = Ninguno\r
-label.above_identity_threshold = Por encima del umbral de identidad\r
-label.show_sequence_features = Mostrar las características de las secuencias\r
-label.nucleotide = Nucleótido\r
-label.to_new_alignment = A nuevo alineamiento\r
-label.to_this_alignment = Añadir a este alineamiento\r
-label.apply_colour_to_all_groups = Aplicar color a todos los grupos\r
-label.modify_identity_thereshold = Modificar el umbral de identidad...\r
-label.modify_conservation_thereshold = Modificar el umbral de conservación...\r
-label.input_from_textbox = Introducir desde el cuadro de texto\r
-label.centre_column_labels = Centrar las etiquetas de las columnas\r
-label.automatic_scrolling = Desplazamiento automático\r
-label.documentation = Documentación\r
-label.about = Acerca de...\r
-label.show_sequence_limits = Mostrar los límites de la secuencia\r
-label.feature_settings = Ajustar funciones...\r
-label.sequence_features = Funciones de la secuencia\r
-label.all_columns = Todas las columnas\r
-label.all_sequences = Todas las secuencias\r
-label.selected_columns = Columnas seleccionadas\r
-label.selected_sequences = Secuencias seleccionadas\r
-label.all_but_selected_region = Todo menos la región seleccionada (Shift+Ctrl+H)\r
-label.selected_region = Región seleccionada\r
-label.all_sequences_columns = Todas las secuencias y columnas\r
-label.group_consensus = Consenso de grupo\r
-label.group_conservation = Conservación de grupo\r
-label.show_consensus_histogram = Mostrar el histograma de consenso\r
-label.show_consensus_logo = Mostrar el logo de consenso\r
-label.norm_consensus_logo = Normalizar el logo de consenso\r
-label.apply_all_groups = Aplicar a todos los grupos\r
-label.autocalculated_annotation = Anotación autocalculada\r
-label.min_colour = Color mínimo\r
-label.max_colour = Color máximo\r
-label.use_original_colours = Usar colores originales\r
-label.threshold_minmax = El umbral es mín/máx\r
-label.represent_group_with = Representar al grupo con\r
-label.selection = Seleccionar\r
-label.group_colour = Color del grupo\r
-label.sequence = Secuencia\r
-label.view_pdb_structure = Ver estructura PDB\r
-label.min = Mín:\r
-label.max = Máx:\r
-label.colour_by_label = Color por etiquetas\r
-label.new_feature = Nueva función\r
-label.match_case = Hacer corresponder mayúsculas y minúsculas\r
-label.view_alignment_editor = Ver en el editor de alineamientos\r
-label.labels = Etiquetas\r
-label.output_values = Valores de salida...\r
-label.output_points = Puntos de salida...\r
-label.output_transformed_points = Puntos de salida transformados\r
-label.input_data = Datos de entrada...\r
-label.nucleotide_matrix = Matriz nucleotídica\r
-label.protein_matrix = Matriz proteica\r
-label.show_bootstrap_values = Mostrar valores de Bootstrap\r
-label.show_distances = Mostrar distancias\r
-label.mark_unassociated_leaves = Marcar hojas no asociadas\r
-label.fit_to_window = Ajustar a la ventana\r
-label.newick_format = Formato Newick\r
-label.select_newick_like_tree_file = Seleccione un fichero de árbol tipo Newick\r
-label.colours = Colores\r
-label.view_mapping = Ver mapeado\r
-label.wireframe = Estructura metálica\r
-label.depthcue = Clave de profundidad\r
-label.z_buffering = Tamponamiento Z\r
-label.charge_cysteine = Carga & Cisteína\r
-label.all_chains_visible = Todas las cadenas visibles\r
-label.successfully_added_features_alignment = Funciones añadidas exitosamente al alineamiento\r
-label.keyboard_editing_mode = El modo de editar teclado es {0}\r
-label.paste_features_annotations_Tcoffee_here = Pegar tus funciones / anotaciones / puntuación del fichero T-coffee aquí.\r
-label.removed_columns = {0} columnas eliminadas.\r
-label.removed_empty_columns = {0} columnas vacías eliminadas.\r
-label.paste_newick_tree_file = Pegar su fichero árbol Newick aquí. \r
-label.order_by_params = Ordenar por {0}\r
-label.html_content = <html>{0}</html>\r
-label.paste_pdb_file= Pegar tu fichero PDB aquí.\r
-label.paste_pdb_file_for_sequence = Pegar fichero PDB para la secuencia {0}\r
-label.could_not_parse_newick_file  = No se pudo analizar el fichero Newick\\\!\\n {0}\r
-label.successfully_pasted_tcoffee_scores_to_alignment= Pegada exitosamente la puntuación T-Coffee al alineamiento.\r
-label.failed_add_tcoffee_scores = Fallo al añadir las puntuaciones T-Coffee: \r
-label.successfully_pasted_annotation_to_alignment = Anotación pegada exitosamente al alineamiento.\r
-label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file = No es posible parsear el texto pegado como una anotación características, GFF, o fichero T-Coffee válidos\r
-label.successfully_pasted_alignment_file = Fichero de alineamiento pegado exitosamente\r
-label.paste_your_alignment_file = Pegar su fichero de alineamiento aquí\r
-label.paste_your = Pegar su\r
-label.finished_searching = Búsqueda finalizada\r
-label.search_results= Buscar Resultados {0} : {1}\r
-label.found_match_for = Buscar coincidencia para {0}\r
-label.font = Fuente:\r
-label.size = Talla:\r
-label.style = Estilo:\r
-label.enter_redundancy_threshold = Introducir el umbral de redundancia\r
-label.calculating = Calculando....\r
-label.modify_conservation_visibility = Modificar la visibilidad de conservación\r
-label.colour_residues_above_occurence = Residuos de color por encima del % de aparición \r
-label.set_this_label_text = fijar como etiqueta \r
-label.sequences_from = Secuencias de {0}\r
-label.successfully_loaded_file  = Fichero cargado exitosamente {0}\r
-label.successfully_saved_to_file_in_format = Guardado exitosamente en el fichero: {0} en formato {1}.\r
-label.copied_sequences_to_clipboard = Copiadas {0} secuencias en el portapapeles.\r
-label.check_file_matches_sequence_ids_alignment = Comprobar que el fichero coincide con el ID de la secuencia en el alineamiento.\r
-label.problem_reading_tcoffee_score_file = Problema de lectura del fichero de puntuaciones T-COFFEE\r
-label.source_to_target = {0} a {1}\r
-label.per_sequence_only= Sólo por secuencia\r
-label.to_file = a fichero\r
-label.to_textbox = a cuadro de texto\r
-label.jalview = Jalview\r
-label.csv_spreadsheet = CSV (Hoja de cálculo)\r
-label.status =  [Estado]\r
-label.channels = Canales\r
-label.channel_title_item_count = {0} ({1})\r
-label.blog_item_published_on_date = {0} {1} \r
-label.select_das_service_from_table = Seleccionar servicio DAS de la tabla para leer una descripción completa aquí.</font></html>\r
-label.session_update = Actualizar sesión\r
-label.new_vamsas_session = Nueva sesión Vamsas\r
-label.load_vamsas_session = Cargar sesión Vamsas\r
-label.save_vamsas_session = Guardar sesión Vamsas\r
-label.select_vamsas_session_opened_as_new_vamsas_session= Selecciones una sesión vamsas para abrirla como una nueva sesión.\r
-label.open_saved_vamsas_session = Abrir una sesión VAMSAS guardada\r
-label.groovy_console = Consola Groovy \r
-label.lineart = lineart\r
-label.dont_ask_me_again = No volver a preguntar\r
-label.select_eps_character_rendering_style = Seleccionar el carácter EPS como estilo de visualización \r
-label.invert_selection = Invertir selección\r
-label.optimise_order = Optimizar orden\r
-label.seq_sort_by_score = Ordenar las secuencias por puntuación\r
-label.load_colours = Cargar colores\r
-label.save_colours = Guardar colores\r
-label.fetch_das_features = Recuperar funciones DAS\r
-label.selected_database_to_fetch_from = Seleccionada {0} Base de datos {1} para buscar de {2} \r
-label.database_param = Base de datos: {0}\r
-label.example = Ejemplo\r
-label.example_param = Ejemplo: {0}\r
-label.select_file_format_before_saving = Debe seleccionar un formato de fichero antes de guardar!\r
-label.file_format_not_specified = Formato de fichero no especificado\r
-label.alignment_contains_hidden_columns = El alineamiento contiene columnas ocultas.\\nQuieres guardar s\u00F3lo el alineamiento visible?\r
-label.couldnt_save_file = No se pudo guardar el fichero: {0}\r
-label.error_saving_file = Error guardando el fichero\r
-label.remove_from_default_list = eliminar de la lista de defectuosos?\r
-label.remove_user_defined_colour = Eliminar el color definido por el usuario\r
-label.you_must_select_least_two_sequences = Debes seleccionar al menos 2 secuencias.\r
-label.invalid_selection = Selección inválida\r
-label.principal_component_analysis_must_take_least_four_input_sequences = El an\u00E1lisis de la componente principal debe tomar\\nal menos 4 secuencias de entrada.\r
-label.sequence_selection_insufficient = Selección de secuencias insuficiente\r
-label.you_need_more_two_sequences_selected_build_tree = necesitas seleccionar más de dos secuencias para construir un árbol!\r
-label.not_enough_sequences = No suficientes secuencias\r
-label.selected_region_to_tree_may_only_contain_residues_or_gaps = La regi\u00F3n seleccionada para construir un \u00E1rbol puede\\ncontener s\u00F3lo residuos o espacios.\\nPrueba usando la funci\u00F3n Pad en el men\u00FA de edici\u00F3n,\\n o uno de los m\u00FAltiples servicios web de alineamiento de secuencias.\r
-label.sequences_selection_not_aligned = Las secuencias seleccionadas no están alineadas\r
-label.sequences_must_be_aligned_before_creating_tree = Las secuencias deben estar alineadas antes de crear el \u00E1rbol.\\nPrueba usando la funci\u00F3n Pad en el men\u00FA de editar,\\n o uno de los m\u00FAltiples servicios web de alineamiento de secuencias.\r
-label.sequences_not_aligned = Secuencias no alineadas\r
-label.problem_reading_tree_file =  Problema al leer el fichero del árbol\r
-label.possible_problem_with_tree_file = Posible problema con el fichero del árbol\r
-label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation = Por favor seleccionar al menos tres bases de al menos una secuencia para poder realizar la traducción de cDNA.\r
-label.translation_failed = Translation Failed\r
-label.error_when_translating_sequences_submit_bug_report = Desafortunadamente, algo fue mal a la hora de traducir tus secuencias.\\nPor favor, revisa la consola Jalview java \\ny presenta un informe de error que incluya el seguimiento.\r
-label.implementation_error  = Error de implementación:\r
-label.automatically_associate_pdb_files_with_sequences_same_name = Quieres asociar automáticamente los {0} ficheros PDB con las secuencias del alineamiento que tengan el mismo nombre?\r
-label.automatically_associate_pdb_files_by_name = Asociar los ficheros PDB por nombre automáticamente\r
-label.ignore_unmatched_dropped_files_info = <html>Quieres <em>ignorar</em> los {0} ficheros cuyos nombres no coincidan con ningún IDs de las secuencias ?</html>\r
-label.ignore_unmatched_dropped_files = Ignorar los ficheros sin coincidencias?\r
-label.enter_view_name = Introducir nombre visible (¿?)\r
-label.enter_label = Introducir etiqueta\r
-label.enter_label_for_the_structure = Introducir una etiqueta para la estructura?\r
-label.pdb_entry_is_already_displayed = {0} Ya est\u00E1 mostrado.\\nQuieres volver a usar este visor?\r
-label.map_sequences_to_visible_window = Mapa de secuencias en ventana visible: {0}\r
-label.add_pdbentry_to_view = Quieres a\u00F1adir {0} a la vista llamada\\n{1}\\n\r
-label.align_to_existing_structure_view = Alinear a una estructura ya existente\r
-label.pdb_entries_couldnt_be_retrieved = Las siguientes entradas pdb no pueden ser extra\u00EDdas del PDB\\\:\\n{0}\\nPor favor, prueba descarg\u00E1ndolas manualmente.\r
-label.couldnt_load_file = No se pudo cargar el fichero\r
-label.couldnt_find_pdb_id_in_file = No se pudo encontrar un Id PDB en el fichero suministrado. Por favor, introduzca un Id para identificar esta estructura.\r
-label.no_pdb_id_in_file = No hay un Id PDB en el fichero\r
-label.couldnt_read_pasted_text = No se pudo leer el texto pegado {0}\r
-label.error_parsing_text = Error analizando el texto\r
-label.enter_local_das_source = Intruduzca el Nickname & URL de la fuente DAS local\r
-label.you_can_only_edit_or_remove_local_das_sources = Sólo puedes editar o eliminar fuentes DAS locales!\r
-label.public_das_source = Fuente pública DAS - no editable\r
-label.input_alignment_from_url = Alineamiento de entrada desde URL\r
-label.input_alignment = Alineamiento de entrada\r
-label.couldnt_import_as_vamsas_session = No se pudo importar {0} como una nueva sesión Vamsas.\r
-label.vamsas_document_import_failed =  Fallo en la importación del documento Vamsas\r
-label.couldnt_locate = No se pudo localizar {0}\r
-label.url_not_found = URL no encontrada\r
-label.no_link_selected = Enlace no seleccionado\r
-label.new_sequence_url_link = Enlace a una nueva secuencia URL\r
-label.cannot_edit_annotations_in_wrapped_view = No se pueden editar anotaciones en vista envolvente\r
-label.wrapped_view_no_edit = Vista envolvente - no editar\r
-label.error_retrieving_data = Error en la recuperación de datos\r
-label.user_colour_scheme_must_have_name = El esquema de colores del usuario debe tener un nombre\r
-label.no_name_colour_scheme = No hay nombre para el esquema de colores \r
-label.invalid_url = URL Invalido!\r
-label.error_loading_file = Error al cargar el fichero\r
-label.problems_opening_file = Encontrados problemas al abrir el fichero {0}!!\r
-label.file_open_error = Error al abrir el fichero\r
-label.no_das_sources_selected_warn = No han sido seleccionadas fuentes DAS.\\nPor favor, seleccione algunas fuentes y\\npruebe de nuevo.\r
-label.no_das_sources_selected_title = No han sido seleccionadas fuentes DAS\r
-label.colour_scheme_exists_overwrite = El esquema de colores {0} ya existe.\\nContinuar guardando el esquema de colores como {1}?"\r
-label.duplicate_scheme_name = Duplicar nombre de esquema\r
-label.jalview_new_questionnaire = Hay un nuevo cuestionario disponible. Querr\u00EDa completarlo ahora ?\\n\r
-label.jalview_user_survey = Encuesta de usuario Jalview \r
-label.alignment_properties = Propiedades del alineamiento: {0}\r
-label.alignment_props = Propiedades del alineamiento\r
-label.input_cut_paste = Cortar y pegar la entrada\r
-label.input_cut_paste_params = Cortar y pegar la entrada - {0}\r
-label.alignment_output_command = Alineamiento de salida - {0}\r
-label.annotations = Anotaciones\r
-label.features = Funciones\r
-label.overview_params = Visión general {0}\r
-label.paste_newick_file = Pegar nuevo fichero Newick\r
-label.load_tree_from_file = desde fichero - \r
-label.colour_by_annotation = Color por anotación\r
-label.selection_output_command = Seleccionar salida - {0}\r
-label.annotation_for_displayid = <p><h2>Anotación para {0} </h2></p><p>\r
-label.pdb_sequence_mapping = PDB - Mapeado de secuencia\r
-label.pca_details = detalles de la PCA\r
-label.redundancy_threshold_selection = Selección del umbral de redundancia\r
-label.user_defined_colours = Colores definidos del usuario\r
-label.jalviewLite_release = JalviewLite - versión {0}\r
-label.jaview_build_date = Fecha de creación: {0}\r
-label.jalview_authors_1 = Authors:  Jim Procter, Andrew Waterhouse, Jan Engelhardt, Lauren Lui,\r
-label.jalview_authors_2 = Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton.\r
-label.jalview_dev_managers = Desarrollo gestionado por The Barton Group, University of Dundee, Scotland, UK.\r
-label.jalview_distribution_lists = Para ayuda, ver el FAQ at www.jalview.org y/o adjuntar la lista de envío jalview-discuss@jalview.org\r
-label.jalview_please_cite = Si usa Jalview incluya la siguiente cita, por favor:\r
-label.jalview_cite_1_authors = Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)\r
-label.jalview_cite_1_title = Jalview Version 2 - un editor de alineamiento múltiple de secuencias y banco de trabajo de análisis\r
-label.jalview_cite_1_ref =  Bioinformaticos doi: 10.1093/bioinformatics/btp033\r
-label.right_click = clic en el botón derecho\r
-label.to_add_annotation = para añadir anotación\r
-label.alignment_has_no_annotations = El alineamiento no tiene anotaciones\r
-label.retrieving_pdb_data = Recuperación de datos PDB...\r
-label.label = Etiqueta\r
-label.no_features_added_to_this_alignment = No hay funciones asociadas a este alineamiento!!\r
-label.features_can_be_added_from_searches_1 = (Las funciones pueden ser añadidas de búsquedas o\r
-label.features_can_be_added_from_searches_2 = de ficheros de funciones Jalview / GFF)\r
-label.calculating_pca= Calculando PCA\r
-label.reveal_columns = Mostrar Columnas\r
-label.jalview_cannot_open_file = Jalview no puede abrir el fichero\r
-label.jalview_applet = Aplicación Jalview  \r
-label.loading_data = Cargando datos\r
-label.memory_stats = Memoria libre total: {0} MB; Memoria máxima: {1} MB; {2} %\r
-label.calculating_tree = Calculando árbol\r
-label.state_queueing = En cola \r
-label.state_running = Procesando\r
-label.state_complete = Completar\r
-label.state_completed = Finalizado\r
-label.state_job_cancelled = ¡Trabajo cancelado!\r
-label.state_job_error = Error del trabajo!\r
-label.server_error_try_later = ¡Error del servidor! (Intentar más tarde)\r
-label.error_loading_pdb_data = ¡Error cargando los datos PDB!\r
-label.fetching_pdb_data = Buscando los datos PDB...\r
-label.structure_type = Estructura_tipo\r
-label.settings_for_type = Ajustes para {0}\r
-label.view_full_application = Ver en la aplicación completa \r
-label.load_associated_tree = Cargar árbol asociado ...\r
-label.load_features_annotations = Cargar características/anotaciones ...\r
-label.export_features = Exportar características...\r
-label.export_annotations = Exportar anotaciones ...\r
-label.jalview_copy = Copiar (sólo Jalview)\r
-label.jalview_cut = Cortar (sólo Jalview)\r
-label.to_upper_case = Pasar a mayúsculas\r
-label.to_lower_case = Pasar a minúsculas\r
-label.toggle_case = Alternar mayúsculas y minúsculas\r
-label.edit_name_description = Editar nombre/descripción\r
-label.create_sequence_feature = Crear función de secuencia\r
-label.edit_sequence = Editar secuencia\r
-label.edit_sequences = Editar secuencias\r
-label.sequence_details = Detalles de la secuencia\r
-label.jmol_help = Ayuda de Jmol \r
-label.all = Todo\r
-label.sort_by = Ordenar por\r
-label.sort_by_score = Ordenar por puntuación\r
-label.sort_by_density = Ordenar por densidad\r
-label.sequence_sort_by_density = Ordenar las secuencias por densidad\r
-label.reveal = Revelar\r
-label.hide_columns = Ocultar columnas\r
-label.load_jalview_annotations = Cargar un fichero de anotación de Jalivew o un fichero de características\r
-label.load_tree_file = Cargar un fichero de árbol\r
-label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences = Recuperar y parsear un registro de secuencia de base de datos para el alineamiento o secuencias actualmente seleccionados\r
-label.standard_databases = Bases de datos estándar\r
-label.fetch_embl_uniprot = Recuperar de EMBL/EMBLCDS o Uniprot/PDB y de cualquier fuente DAS seleccionada\r
-label.reset_min_max_colours_to_defaults = Reiniciar los colores min y max colours a los valores por defecto establecidos en las preferencias de usuario\r
-label.align_structures_using_linked_alignment_views = Alinear las estructuras utlizando las {0} vistas de alineamiento enlazadas\r
-label.connect_to_session = Conectar a la sesión {0}\r
-label.threshold_feature_display_by_score = Filtrar la característica mostrada por puntuación.\r
-label.threshold_feature_no_thereshold = Sin umbral\r
-label.threshold_feature_above_thereshold = Por encima del umbral\r
-label.threshold_feature_below_thereshold = Por debajo del umbral\r
-label.adjust_thereshold = Ajustar umbral\r
-label.toggle_absolute_relative_display_threshold = Cambiar entre mostrar el umbral absoluto y el relativo.\r
-label.display_features_same_type_different_label_using_different_colour = Mostrar las características del mismo tipo con una etiqueta diferente y empleando un color distinto (p.e. características del dominio)\r
-label.select_colour_minimum_value = Seleccionar el color para el valor mínimo\r
-label.select_colour_maximum_value = Seleccionar el color para el valor máximo\r
-label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment = Abrir una nueva vista Jmol con todas las estructuras asociadas con la selección acxtual y superponer las utilizando el alineamiento.\r
-label.open_url_param = Abrir URL {0}\r
-label.open_url_seqs_param = Abrir URL ({0}..) ({1} secuencias)\r
-label.load_pdb_file_associate_with_sequence = Cargar un fichero PDB y asociarlo con la secuencia {0}\r
-label.reveal_hidden_columns = Revelar las columnas ocultas con el botón derecho del ratón\r
-label.dark_colour = Oscurecer color\r
-label.light_colour = Aclarar color\r
-label.highlightnode = Pulse el botón izquierdo para seleccionar las hojas.<br>Haga doble clic para invertir las hojas.<br>Pulse el botón derecho para cambiar el color.\r
-label.load_colour_scheme = Cargar esquema cromático\r
-label.toggle_enabled_views = Cuando está habilitado, permite que se seleccionen varias vistas.\r
-label.edit_notes_parameter_set = Haga clic para editar las notas de este conjunto de parámetros.\r
-label.open_local_file = Abrir fichero local\r
-label.enable_automatically_sort_alignment_when_open_new_tree = Habilite esta opción para ordenar automáticamente<br>el alineamiento cuando abra<br> un nuevo árbol.\r
-label.listen_for_selections = Atención a las selecciones\r
-label.selections_mirror_selections_made_same_sequences_other_views = Cuando está habilitado, las selecciones de esta vista serán un reflejo<br>de las selecciones realizadas en las mismas secuencias de otras vistas.\r
-label.toggle_sequence_visibility = Shift+H cambia la visibilidad de la secuencia\r
-label.toggle_columns_visibility = Ctrl+H cambia la visibilidad de la columna\r
-label.toggles_visibility_hidden_selected_regions = H cambiar la visibilidad de las regiones ocultas o seleccionadas\r
-label.rename_tab_eXpand_reGroup=  Haga clic en el botón derecho para renombrar la pestaña<br>Presione X para expandir las tablas y G para reagrupar.\r
-label.right_align_sequence_id = Alinear a la derecha el ID de la secuencia\r
-label.sequence_id_tooltip = Ayuda del ID de la secuencia\r
-label.no_services = <Sin Servicios>\r
-label.select_copy_raw_html = Seleccione esta opción si desea copiar el html en bruto\r
-label.share_data_vamsas_applications = Compartir datos con otras aplicaciones vamsas\r
-label.connect_to = Conectar a\r
-label.join_existing_vamsas_session = Unirse a una sesión vamsas existente\r
-label.from_url = desde una URL\r
-label.any_trees_calculated_or_loaded_alignment_automatically_sort = Cuando está habilitado, cualquier árbol calculado o cargado en el alineamiento lo ordenará\r
-label.sort_with_new_tree = Ordenar con el nuevo árbol\r
-label.from_textbox = desde un área de texto\r
-label.window = Ventana\r
-label.preferences = Preferencias\r
-label.tools = Herramientas\r
-label.fetch_sequences = Recuperar secuencia(s)\r
-label.stop_vamsas_session = Parar sesión vamsas\r
-label.collect_garbage = Recolector de basura\r
-label.show_memory_usage = Mostrar uso de memoria\r
-label.show_java_console = Mostrar consola de Java\r
-label.show_jalview_news = Mostrar las noticias de Jalview\r
-label.take_snapshot = Tomar captura\r
-label.monospaced_fonts_faster_to_render = Las fuentes monoespaciadas son más rápidas de pintar\r
-label.anti_alias_fonts = Fuentes anti-alias (más lentas de pintar)\r
-label.monospaced_font= Monoespaciadas\r
-label.quality = Calidad\r
-label.maximize_window = Maximizar ventana\r
-label.conservation = Conservación\r
-label.consensus = Consenso\r
-label.histogram = Histograma\r
-label.logo = Logo\r
-label.non_positional_features = Características no posicionales\r
-label.database_references = Referencias a base de datos\r
-label.share_selection_across_views = Compartir la selección en todas las vistas\r
-label.scroll_highlighted_regions = Desplazarse hasta las regiones resaltadas\r
-label.gap_symbol = Símbolo del hueco\r
-label.alignment_colour = Color del alineamiento\r
-label.address = Dirección\r
-label.port = Puerto\r
-label.default_browser_unix = Navegador por defecto (Unix)\r
-label.send_usage_statistics = Enviar estadísticas de uso\r
-label.check_for_questionnaires = Comprobar los cuestionarios\r
-label.check_for_latest_version = Comprobar la última versión\r
-label.url_linkfrom_sequence_id = URL del enlace del ID de la secuencia\r
-label.use_proxy_server = Utilizar un servidor proxy\r
-label.eps_rendering_style = Estilo de visualización EPS\r
-label.append_start_end = Añadir /inicio-fin (/15-380)\r
-label.full_sequence_id = ID de la secuencia completo\r
-label.smooth_font = Fuente alargada\r
-label.autocalculate_consensus = Autocalcular consenso\r
-label.pad_gaps = Rellenar huecos\r
-label.pad_gaps_when_editing = Rellenar huecos al editar\r
-label.automatically_set_id_width = Establecer automáticamente al anchura del ID\r
-label.figure_id_column_width = Anchura de la columna del ID de la Figura\r
-label.use_modeller_output = Utilizar la salidad del Modeller\r
-label.wrap_alignment = Envolver alineamiento\r
-label.right_align_ids = Alinear IDs a la derecha\r
-label.sequence_name_italics = Nombre de la secuencia en cursiva\r
-label.open_overview = Abrir resumen\r
-label.default_colour_scheme_for_alignment = Esquema cromático por defecto para el alineamiento\r
-label.annotation_shading_default = Sombreado por defecto de la anotación\r
-label.default_minimum_colour_annotation_shading = Por mínimo por defecto para el sombreado de la anotación\r
-label.default_maximum_colour_annotation_shading = Por máximo por defecto para el sombreado de la anotación\r
-label.visual = Visual\r
-label.connections = Conexiones\r
-label.output = Salida\r
-label.editing = Edición\r
-label.das_settings = Configuración DAS\r
-label.web_services = Servicios web\r
-label.right_click_to_edit_currently_selected_parameter = Haga clic en el botón derecho para editar el parámetro seleccionado actualmente.\r
-label.let_jmol_manage_structure_colours = Permitir que Jmol gestione la estructuras cromáticas\r
-label.marks_leaves_tree_not_associated_with_sequence = Marcar las hojas del árbol que no están asociadas a una secuencia\r
-label.index_web_services_menu_by_host_site = Indizar los servicios web en el menú por el host que los aloja\r
-label.option_want_informed_web_service_URL_cannot_be_accessed_jalview_when_starts_up = Marque esta opción si desea ser informado<br>cuando no se pueda acceder a la URL de un servicio web<br>al arrancar Jalview.\r
-label.new_service_url = Nueva URL del servicio\r
-label.edit_service_url = Editar la URL del servicio\r
-label.delete_service_url = Borrar la URL del servicio\r
-label.details = Detalles\r
-label.options = Opciones\r
-label.parameters = Paramétros\r
-label.available_das_sources = Fuentes DAS disponibles\r
-label.full_details = Detalles completos\r
-label.authority = Autoridad\r
-label.type = Tipo\r
-label.proxy_server = Servidor proxy\r
-label.file_output = Fichero de salida\r
-label.select_input_type = Seleccionar el tipo de entrada\r
-label.set_options_for_type = Establecer opciones para el tipo\r
-label.data_input_parameters = Datos de los parámetros de entrada\r
-label.data_returned_by_service = Datos devueltos por el servicio\r
-label.rsbs_encoded_service = Servicio RSBS codificado\r
-label.parsing_errors = Errores de parseo\r
-label.simple_bioinformatics_rest_services = Simple Bioinformatics Rest Services\r
-label.web_service_discovery_urls = URL de descubrimiento de servicios web\r
-label.input_parameter_name = Nombre del parámetro de entrada\r
-label.short_descriptive_name_for_service = Nombre corto descriptivo del servicio\r
-label.function_service_performs = Tipo de función que realiza el servicio (p.e. alineamiento, análisis, búsqueda, etc).\r
-label.brief_description_service = Descripción breve del servicio\r
-label.url_post_data_service = URL a la que enviar los datos del servicio. Incluya cualquier parámetro especial que se necesite aquí\r
-label.optional_suffix = Sufijo opcional añadido a la URL al recuperar los resultados del servicio\r
-label.preferred_gap_character = ¿Qué caracter para el hueco prefiere el servicio?\r
-label.gap_character = Carácter para hueco\r
-label.move_return_type_up_order= Mover el tipo de returno hacia arriba en el orden\r
-label.move_return_type_down_order= Mover el tipo de returno hacia abajo en el orden\r
-label.update_user_parameter_set = Actualizar el conjunto de parámetros de usuario existente\r
-label.delete_user_parameter_set = Borrar el conjunto de parámetros de usuario existente\r
-label.create_user_parameter_set = Crear un nuevo conjunto de parámetro con la configuración actual.\r
-label.revert_changes_user_parameter_set = Deshacer todos los cambios en el conjunto de parámetros actual\r
-label.start_job_current_settings = Arrancar trabajo con la configuración actual\r
-label.cancel_job_close_dialog = Cerrar este diálogo y cancelar el trabajo\r
-label.input_output = Entrada/Salida\r
-label.cut_paste = Cortar y pegar\r
-label.adjusting_parameters_for_calculation = Ajustar los parámetros para el cálculo existente\r
-label.2d_rna_structure_line = 2D RNA {0}\r
-label.2d_rna_sequence_name = 2D RNA - {0}\r
-label.edit_name_and_description_current_group = Editar el nombre y la descripción del grupo actual.\r
-label.view_structure_for = Visualizar la estructura para {0}\r
-label.view_all_structures = Visualizar todas las {0} estructuras.\r
-label.view_all_representative_structures = Visualizar todas las {0} estructuras representativas.\r
-label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment = Abrir una nueva vista de Jmol con todas las estructuras representativas\nasociadas con la selecci\u00F3n actual\nsuperpuesta con el alineamiento actual.\r
-label.associate_structure_with_sequence = Asociar estructura con la secuencia\r
-label.from_file = desde fichero\r
-label.enter_pdb_id = Introducir PDB Id\r
-label.discover_pdb_ids = Buscar PDB ids\r
-label.text_colour = Color del texto\r
-label.structure = Estructura\r
-label.view_structure = Visualizar estructura\r
-label.clustalx_colours = Colores de Clustalx\r
-label.above_identity_percentage = Sobre % identidad\r
-label.create_sequence_details_report_annotation_for = Anotación para {0}\r
-label.sequece_details_for = Detalles de la secuencia para {0}\r
-label.sequence_name = Nombre de la secuencia\r
-label.sequence_description = Descripción de la secuencia\r
-label.edit_sequence_name_description = Editar el nombre/descripción de la secuencia\r
-label.spaces_converted_to_backslashes = Los espacios se han convertido en _\r
-label.no_spaces_allowed_sequence_name = No se permiten espacios en el nombre de la secuencia\r
-label.select_outline_colour = Seleccionar el color del límite\r
-label.web_browser_not_found_unix = Unixers\: No es posible encontrar el navegador web por defecto.\nA\u00F1ada la ruta completa de su navegador en la pesta\u00F1a de Preferencias.\r
-label.web_browser_not_found = No se encuentra el navegador web\r
-label.select_pdb_file_for = Seleccione un fichero PDB para {0}\r
-label.html = HTML\r
-label.wrap = Envolver\r
-label.show_database_refs = Mostrar las referencias en base de datos\r
-label.show_non_positional_features = Mostrar las características no posicionales\r
-label.save_png_image = Guardar como imagen PNG\r
-label.load_tree_for_sequence_set = Cargar un árbol para este conjunto de secuencias\r
-label.export_image = Exportar imagen\r
-label.vamsas_store = Almacén VAMSAS\r
-label.translate_cDNA = Traducir cDNA\r
-label.extract_scores = Extraer puntuaciones\r
-label.get_cross_refs = Obtener referencias cruzadas\r
-label.sort_alignment_new_tree = Alinear el alineamiento con el nuevo árbol\r
-label.add_sequences = Añadir secuencias\r
-label.new_window = Nueva ventana\r
-label.refresh_available_sources = Refrescar las fuentes disponibles\r
-label.use_registry = Utilizar el registro\r
-label.add_local_source = Añadir fuente local\r
-label.set_as_default = Establecer por defecto\r
-label.show_labels = Mostrar etiquetas\r
-label.background_colour = Color de fondo\r
-label.associate_nodes_with = Asociar nodos con\r
-label.jalview_pca_calculation = Cálculo del PCA por Jalview\r
-label.link_name = Nombre del enalce\r
-label.pdb_file = Fichero PDB\r
-label.colour_with_jmol = Colorear con Jmol\r
-label.align_structures = Alinear estructuras\r
-label.jmol = Jmol\r
-label.sort_alignment_by_tree = Ordenar alineamiento por árbol\r
-label.mark_unlinked_leaves = Marcar las hojas como no enlazadas\r
-label.associate_leaves_with = Asociar hojas con\r
-label.save_colour_scheme_with_unique_name_added_to_colour_menu = Guarde el esquema cromáticos con un nombre único y se añadirá al menú de colores\r
-label.case_sensitive = Sensible a mayúsculas\r
-label.lower_case_colour = Color para las minúsculas\r
-label.index_by_host = Indizar por host\r
-label.index_by_type = Indizar por tipo\r
-label.enable_jabaws_services = Habilitar servicios JABAWS\r
-label.display_warnings = Mostrar advertencias\r
-label.move_url_up = Mover la URL hacia arriba\r
-label.move_url_down = Mover la URL hacia abajo\r
-label.add_sbrs_definition = Añadir una definición SBRS \r
-label.edit_sbrs_definition = Editar una definición SBRS \r
-label.delete_sbrs_definition = Borrar una definición SBRS \r
-label.your_sequences_have_been_verified = Sus secuencias has sido verificadas en una base de datos de secuencias conocidas. Algunos de sus ID se han alterado y\n, probablemente, el residuo de inicio/fin se haya actualizado.\nGuarde su alineamiento para mantener el ID actualizado.\n\n \r
-label.sequence_names_updated = Nombres de secuencia actualizados\r
-label.dbref_search_completed = Búsqueda de DBRef terminada\r
-label.show_all_chains = Mostrar todas las cadenas\r
-label.fetch_all_param = Recuperar todas {0}\r
-label.paste_new_window = Pegar en una nueva ventana\r
-label.settings_for_param = Configuración para {0}\r
-label.view_params = Visualizar {0}\r
-label.select_all_views = Seleccionar todas las vistas\r
-label.align_sequences_to_existing_alignment = Alinear las secuencias con el alineamiento existente\r
-label.realign_with_params = Realinear con {0}\r
-label.calcname_with_default_settings = {0} por defecto\r
-label.action_with_default_settings = {0} con la configuración por defecto\r
-label.edit_settings_and_run = Editar la configuración y ejecutar...\r
-label.view_and_change_parameters_before_alignment = Ver y cambiar los parámetros antes del alineamiento\r
-label.run_with_preset_params = Ejecutar {0} con preconfiguración\r
-label.view_and_change_parameters_before_running_calculation = Ver y cambiar los parámetros antes de lanzar el cálculo\r
-label.view_documentation = Ver documentación\r
-label.select_return_type = Seleccionar el tipo de retorno\r
-label.translation_of_params = Traducción de {0}\r
-label.features_for_params = Características de - {0}\r
-label.annotations_for_params = Anotaciones de - {0}\r
-label.generating_features_for_params = Generando características de - {0}\r
-label.generating_annotations_for_params = Generando anotaciones de - {0}\r
-label.varna_params = VARNA - {0}\r
-label.sequence_feature_settings = Configuración de las características de la secuencia\r
-label.pairwise_aligned_sequences = Secuencias alineadas a pares\r
-label.original_data_for_params = Datos originales de {0}\r
-label.points_for_params = Puntos de {0}\r
-label.transformed_points_for_params = Puntos transformados de {0}\r
-label.graduated_color_for_params = Color graduado para la característica de {0}\r
-label.select_backgroud_colour = Seleccionar color de fondo\r
-label.invalid_font = Fuente no válida\r
-label.separate_multiple_accession_ids = Separar los accession id con un punto y coma ";"\r
-label.replace_commas_semicolons = Cambiar comas por puntos y comas\r
-label.parsing_failed_syntax_errors_shown_below_param = Parseo erróneo. A continuación, se muestras los errores de sintaxis {0}\r
-label.parsing_failed_unrecoverable_exception_thrown_param = \nParseo err\u00F3neo. Se ha lanzado una excepci\u00F3n fatal\:\n {0}\r
-label.example_query_param = Consulta de ejemplo: {0}\r
-label.enter_value_increase_conservation_visibility = Introduzca un valor para incrementar la visibilidad de la conservación\r
-label.enter_percentage_identity_above_which_colour_residues = Introduza un % de identidad por encima del cual se colorearán los residuos\r
-label.wswublast_client_credits = Para mostrar las caracter\u00EDsticas de una secuencia, debe indicarse un id de Uniprot cuya secuencia se corresponda al 100 % con la introducida.\nPara mostrar estas caracter\u00EDsticas, prueba a cambar los nombre de sus secuencia con los ID que se sugieren a continuaci\u00F3n.\n\nRunning WSWUBlast at EBI.\nPlease quote Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez R.\nSOAP-based services provided by the European Bioinformatics Institute.\nNucleic Acids Res. 33(1)\:W25-W28 (2005));\r
-label.blasting_for_unidentified_sequence = Ejecutar BLAST para la secuencias sin identificar\r
-label.select_columns_containing = Seleccione las columnas que contengan\r
-label.select_columns_not_containing = Seleccione las columnas que no contengan\r
-option.trim_retrieved_seqs = Ajustar las secuencias recuperadas\r
-label.trim_retrieved_sequences = Cuando la secuencia de referencia es más larga que la secuencia con la que está trabajando, sólo se mantienen las subsecuencias relevantes.\r
-label.use_sequence_id_1 = Utilice $SEQUENCE_ID$ o $SEQUENCE_ID=/<regex>/=$\r
-label.use_sequence_id_2 = \nto para embeber el id de la secuencia en una URL\r
-label.ws_parameters_for = Parámetros para {0}\r
-label.switch_server = Cambiar servidor\r
-label.open_jabaws_web_page = Abra el página principal del servidor JABAWS en un navegador web\r
-label.choose_jabaws_server = Escoja un servidor para ejecutar este servicio\r
-label.services_at = Servicios en {0}\r
-label.rest_client_submit = {0} utilizando {1}\r
-label.fetch_retrieve_from =Recuperar de {0}</html>\r
-label.fetch_retrieve_from_all_sources = Recuperar de todas las fuentes {0} en {1}<br>La primera es :{2}<html> \r
-label.feature_settings_click_drag = <html>Haga clic o arrastre los tipos de las características hacia arriba o hacia abajo para cambiar el orden de visualización.<br/>Haga doble clic para seleccionar las columnas que contienen las características del alineamiento/selección actual.<br/>Presionando Alt seleccionará las columnas exteriores a las características en lugar de las interiores<br/>Presione Shift para modificar la selección actual (en lugar de borrarla)<br/>Presione CTRL o Command/Meta para cambiar las columans externas o internas a las características<br/></html>\r
-label.opt_and_params_further_details = ver los detalles adicionales haciendo clic en el botón derecho\r
-label.opt_and_params_show_brief_desc_image_link = <html>Haga clic para ver una descripción breve<br><img src="{0}"/>Haga clic en el botón derecho para obtener información adicional.</html> \r
-label.opt_and_params_show_brief_desc = <html>Haga clic para ver una descripción breve<br></html>\r
-label.adjusts_width_generated_eps_png = <html>Ajusta la anchura del fichero EPS o PNG generado para asegurar incluso que el ID de la secuencia más larga o las etiquetas de anotación se muestran</html>\r
-label.manually_specify_width_left_column = <html>Especificar manualmente la anchura de la columna izquierda en las etiquetas de los ID de la secuencia y las anotaciones se mostrar en las figuras del alineamiento exportado.Esta configuraicón se ignorará si está marcada la opción 'Establecer automáticamente al anchura del ID'</html>\r
-label.job_created_when_checked = <html>Cuando está habilitado, se crea un trabajo para cada secuencia de la selección actual</html>\r
-label.when_checked_job_visible_region_and_results = <html>Cuando está habilitado, se crea un único trabajo para la región visible y los resultados de mapean en su ubicación dentro del alineamiento. En caso contrario, se creará un trabajo para cada región visible y contigua en el alineamiento o selección actual (p.e. un alineamiento múlitple).</html>\r
-label.flat_file_representation = <html>La representación del fichero plano de este servicio utilizando el formalismo Really Simple Bioinformatics Service</html>\r
-label.result_of_parsing_rsbs = <html>Resultados de parsear la representación RSBS</html>\r
-label.user_preset = Preselección de usuario\r
-label.service_preset = Preselección del servicio\r
-label.run_with_preset = Ejecutar {0} con preselección\r
-label.view_service_doc_url = <html>Visualizar <a href="{0}">{1}</a></html>\r
-label.submit_sequence = <html>Enviar {0} {1} {2} {3} a<br/>{4}</html>\r
-action.by_title_param = por {0}\r
-label.alignment = Alineamiento\r
-label.secondary_structure_prediction = Predicción de la estructura secundaria\r
-label.sequence_database_search = Búsqueda en base de datos de secuencias\r
-label.analysis = Análisis\r
-label.protein_disorder = Desorden en la proteína \r
-label.source_from_db_source = Fuentes de {0}\r
-label.from_msname = de {0}\r
-label.superpose_with = Superponer con...\r
-action.do = Hacer\r
-label.scale_label_to_column = Ajustar la etiqueta a la columna\r
-label.add_new_row = Añadir nuevo fila\r
-label.edit_label_description = Editar etiqueta/descripción\r
-label.hide_row = Ocultar esta fila\r
-label.delete_row = Borrar esta fila\r
-label.show_all_hidden_rows = Mostrar todas las filas ocultas\r
-label.export_annotation = Exportar anotación\r
-label.copy_consensus_sequence = Copiar secuencia de consenso\r
-label.helix = Hélice\r
-label.sheet = Hoja\r
-label.rna_helix = Hélice de ARN\r
-label.remove_annotation = Borrar anotación\r
-label.colour_by = Colorear por...\r
-label.muscle_multiple_protein_sequence_alignment = Alineamiento múltiple de secuencias de proteínas con Muscle\r
-label.mafft_multiple_sequence_alignment = Alineamiento múltiple de secuencias con MAFFT\r
-label.clustalw_multiple_sequence_alignment = Alineamiento múltiple de secuencias con ClustalW\r
-label.jnet_secondary_structure_prediction = Predicción de la estructura secundaria con JNet\r
-label.multiharmony = Multi-Harmony\r
-label.unable_start_web_service_analysis = No es posible iniciar el servicio web de análisis\r
-label.job_couldnt_be_started_check_input = El trabajo no puede arrancarse. Por favor, compruebe los parámetros de entrada y los mensajes de advertencia de la consola de Jalview.\r
-label.prompt_each_time = Preguntar siempre\r
-label.use_source = Fuente\r
-label.couldnt_save_project = No es posible guardar el proyecto\r
-label.error_whilst_saving_current_state_to = Error mientras se guardaba el estado a {0}\r
-label.error_whilst_loading_project_from = Error cargando el proyecto desde  {0}\r
-label.couldnt_load_project = No es posible cargar el proyecto\r
-label.pca_sequences_not_aligned = Las secuencias deben estar alineadas antes de calcular el PCA.\nPruebe a utilizar la funci\u00F3n de rellenar huecos en el men\u00FA Editar,\no cualquiera de los servicios web de alineamiento m\u00FAltiple.\r
-label.invalid_name_preset_exists = Nombre no válido - esta preconfiguración ya existe.\r
-label.invalid_name = Nombre no válido\r
-label.set_proxy_settings = Por favor, configure su proxy en la pestaña 'Conexiones' de la ventana de Preferencia\r
-label.proxy_authorization_failed = Autorización del proxy fallida\r
-label.internal_jalview_error = Error interno de Jalview\r
-label.secondary_structure_prediction_service_couldnt_be_located = No se ha podido encontrar el Servicio de Predicciónd de la Estructura Secudaria {0} en {1}.\r
-label.service_called_is_not_msa_service = El Servicio llamado \n{0}\nno es un \nServicio de Alineamiento M\u00FAltiple de Secuencias\!\r
-label.msa_service_is_unknown = El Servicio de Alineamiento Múltiple llamado {0} es desconocido\r
-label.service_called_is_not_seq_search_service = El Servicio llamando \n{0}\nno es un \nServicio de B\u00FAsqueda de Secuencias\!\r
-label.seq_search_service_is_unknown = El Servicio de Búsqueda de Sencuencias llamado {0} es desconocido\r
-label.feature_type = Tipo de característisca\r
-label.display = Representación\r
-label.service_url = URL del servicio\r
-label.copied_sequences = Secuencias copiadas\r
-label.cut_sequences = Cortar secuencias\r
-label.conservation_colour_increment = Incremento de Conservación del Color ({0})\r
-label.percentage_identity_thereshold = Umbral del Porcentaje de Identidad ({0})\r
-label.error_unsupported_owwner_user_colour_scheme = Propietario no soportado para el diálogo del Esquema Cromático del Usuario\r
-label.save_alignment_to_file = Guardar Alineamiento en fichero\r
-label.save_features_to_file = Guardar Características en un fichero\r
-label.save_annotation_to_file = Guardar Anotación en un fichero\r
-label.no_features_on_alignment = No se han encontrado características en el alineamiento\r
-label.save_pdb_file = Guardar fichero PDB \r
-label.save_text_to_file = Guardar Texto en un fichero\r
-label.save_state = Guardar estado\r
-label.restore_state = Restaurar estado\r
-label.saving_jalview_project = Guardando el proyecto de Jalview {0}\r
-label.loading_jalview_project = Cargando el proyecto de Jalview {0}\r
-label.save_vamsas_document_archive = Guardar el archivo de documento Vamsas\r
-label.saving_vamsas_doc = Guardando el documento VAMSAS en {0}\r
-label.load_feature_colours = Cargar colores de características\r
-label.save_feature_colours = Guardar esquema cromático de características\r
-label.dataset_for = {0} conjunto de datos para {1}\r
-label.select_startup_file = Seleccionar fichero de arranque\r
-label.select_default_browser = Seleccionar navegador web por defecto\r
-label.save_tree_as_newick = Guardar árbol como fichero newick\r
-label.create_eps_from_tree = Crear un fichero EPS a partir de un árbol\r
-label.create_png_from_tree = Crear una imagen PNG a partir de un árbol\r
-label.save_colour_scheme = Guardar esquema cromático\r
-label.edit_params_for = Editar los parámetros de {0}\r
-label.choose_filename_for_param_file = Escoja un nombre de fichero para este fichero de parámetros\r
-label.save_as_html = Guardar como HTML\r
-label.recently_opened = Abiertos recientemente\r
-label.blasting_for_unidentified_sequence_jobs_running = Ejecutando BLAST de las secuencias no indentificadas - {0}  trabajos en marcha.\r
-label.tree_from = Árbol de {0}\r
-label.webservice_job_title = {0} usando {1}\r
-label.select_visible_region_of = seleccionada {0} región de {1}\r
-label.visible = Visible\r
-label.select_unselect_visible_regions_from = seleccionada y deseleccionadas {0} regiones de {1}\r
-label.visible_region_of = región visible de\r
-label.webservice_job_title_on = {0} usando {1} de {2}\r
-label.updating_vamsas_session = Actualizando sesión VAMSAS\r
-label.loading_file = Cargando fichero: {0}\r
-label.edit_params = Editar {0}\r
-error.not_implemented = No implementado\r
-error.no_such_method_as_clone1_for = No existe ese método como un clone1 de {0}\r
-error.null_from_clone1 = Nulo de clone1!\r
-error.implementation_error_sortbyfeature = Error de implementación - sortByFeature debe ser uno de FEATURE_SCORE, FEATURE_LABEL o FEATURE_DENSITY.\r
-error.not_yet_implemented = No se ha implementado todavía\r
-error.unknown_type_dna_or_pep = Tipo desconocido {0} - dna o pep son los únicos valores permitidos\r
-error.implementation_error_dont_know_thereshold_annotationcolourgradient = Error de implementación: no se conoce el valor umbral para el AnnotationColourGradient actual.\r
-error.implementation_error_embeddedpopup_not_null = Error de implementación - embeddedPopup debe ser no nulo.\r
-error.invalid_colour_for_mycheckbox = Color no válido para MyCheckBox\r
-error.implementation_error_unrecognised_render_object_for_features_type = Error de implementación: no se reconoce el objeto de representación {0} para las características de tipo {1}\r
-error.implementation_error_unsupported_feature_colour_object = Error de implementación: objeto de color de características no soportado.\r
-error.invalid_separator_parameter = Separador de parámetros no válido - debe tener longitud mayor que cero\r
-error.alignment_cigararray_not_implemented = Alignment(CigarArray) no se ha implementado todavía\r
-error.weak_sequencei_equivalence_not_yet_implemented = Equivalencia débil sequenceI no se ha implementado todavía.\r
-error.implementation_error_can_only_make_alignmnet_from_cigararray = Error de implementación - sólo se puede construir un vista de alineamiento a partir de una CigarArray de secuencias.\r
-error.empty_view_cannot_be_updated = una vista vacía no se puede actualizar.\r
-error.mismatch_between_number_of_sequences_in_block = No hay coincidencia entre el número de secuencias en el bloque {0} ({1}) y la vista original ({2})\r
-error.padding_not_yet_implemented = El relleno no se ha implementado todavía\r
-error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view = No hay coincidencia entre los bloques visibles para actualizar y el número de contigs en la vista (contigs=0,blocks={0})\r
-error.unknown_seq_cigar_operation = Operación SeqCigar {0} desconocida\r
-error.implementation_bug_parse_cigar_string = Bug de implementación en parseCigarString\r
-error.implementation_error_invalid_operation_string = Error de implementación. Cadena de operación no válida.\r
-error.invalid_range_string = Rango de la cadena no válido (debe ser cero o un número positivo)\r
-error.implementation_error_delete_range_out_of_bounds = Error de implementación: deleteRange fuera de rango: el comienzo debe ser cero o positivo y menor que el final.\r
-error.implementation_error = Error de implementación\r
-error.implementation_error_unknown_operation = ¡Error de implementación! Operación desconocida {0}\r
-error.implementation_error_unexpected_null_from_get_sequence_and_deletions = Error de implementación - valor nulo no esperado en getSequenceAndDeletions\r
-error.implementation_error_set_seq_null = Error de implementación - _setSeq(null,...)\r
-error.implementation_error_s = Error de implementación: _s= {0}\r
-error.implementation_error_seqcigar_possible = SeqCigar: posible error de implementación: la secuencia es más larga de el conjunto de datos de la secuencia\r
-error.implmentation_bug_seq_null = Bug de implementación. Seq nula\r
-error.implementation_bug_cigar_operation_list_range_list = Bug de implementación: Cigar Operation list!= range list\r
-error.not_yet_implemented_cigar_object_from_cigar_string = No implementado todavía: construcción de un objeto Cigar desde una cadena y una secuencia con huecos.\r
-error.implementation_bug_cigar_operation = Bug de implementación. La operación Cigar {0} {1} no es ni {2}, ni {3} ni {4}.\r
-error.implementation_error_for_new_cigar = Error de implementación en new Cigar(SequenceI)\r
-error.implementation_error_cigar_seq_no_operations = Error de implementación: la {0}a secuencia Cigar no tiene operaciones.\r
-error.implementation_error_jmol_getting_data = Error de implementación - Jmol parece estar todavía intentando recuperar sus datos - informe de ello en http://issues.jalview.org/browse/JAL-1016\r
-error.implementation_error_no_pdbentry_from_index = Error de implementación - no existe la correspondiente entrada pdb (para el índice {0}) para añadir el mapeo de secuencias a\r
-error.jmol_version_not_compatible_with_jalview_version = La versión {0} de Jmol no es compatible con esta versión de Jalview. Informe de este problema en http://issues.jalview.org\r
-error.not_implemented_remove = Borrar: no implementado\r
-error.not_implemented_clone = Clonar: no implementado\r
-error.implementation_error_chimera_getting_data = Error de implementación - Chimera parece estar todavía intentando recuperar sus datos - informe de ello en http://issues.jalview.org/browse/JAL-1016\r
-error.call_setprogressbar_before_registering_handler = llamada a setProgressBar antes de registrar el manejador de la barra de estado\r
-label.cancelled_params = {0} cancelado\r
-error.implementation_error_cannot_show_view_alignment_frame = Error de implementación: no es posible mostrar una vista de otro alineamiento en un AlignFrame.\r
-error.implementation_error_dont_know_about_thereshold_setting = Error de implementación: no se conoce la configuración del umbral para el AnnotationColourGradient actual.\r
-error.eps_generation_not_implemented = La generación de EPS no se ha implementado todavía\r
-error.png_generation_not_implemented = La generación de PNG no se ha implementado todavía\r
-error.try_join_vamsas_session_another = Tratando de establecer una sesión VAMSAS cuando ya había otra conectada\r
-error.invalid_vamsas_session_id = Identificador de sesión VAMSAS no válido\r
-error.implementation_error_cannot_create_groovyshell = Error de implementación:no se puede crear groovyShell sin Groovy en el classpath\r
-label.groovy_support_failed = El soporte Groovy de Jalview ha fallado\r
-label.couldnt_create_groovy_shell = No es posible crear el shell de Groovy. Compruebe el fichero de log para conocer los detalles.\r
-error.unsupported_version_calcIdparam = Versión no soportada de {0}\r
-error.implementation_error_cant_reorder_tree = Error de implementación: no es posible reordenar este árbol. No DefaultMutableTreeNode.\r
-error.invalid_value_for_option = Valor no válido de {0} para la opción {1}\r
-error.implementation_error_cannot_import_vamsas_doc = Error de implementación - todavía no es posible importar el documento VAMSAS existente en una sesión existente.\r
-label.vamsas_doc_couldnt_be_opened_as_new_session = El documento VAMSAS no ha podido abrirse como una nueva sesión. Por favor, escoja otra.\r
-error.implementation_error_vamsas_operation_not_init = ¡Error de implementación! Operaciones VAMSAS cuando el cliente no estaba inicializado ni conectado\r
-error.jalview_no_connected_vamsas_session = Jalview está conectado a una sesión VAMSAS\r
-error.implementation_error_cannot_recover_vamsas_object_mappings = Error de implementación: no es posible recuperar los mapeos del objeto VAMSAS - no se ha hecho ningún backup \r
-error.setstatus_called_non_existent_job_pane = se lllamado a setStatus para el panel de trabajo {0} no existente\r
-error.implementation_error_cannot_find_marshaller_for_param_set =Error de implementación: no puede encontrar un marshaller para el conjunto de parámetros\r
-error.implementation_error_old_jalview_object_not_bound =Error de implementación: ¡el objeto Jalview antiguo no está enlazado! ({0})\r
-error.implementation_error_vamsas_doc_class_should_bind_to_type = Error de implementación: la clase de documento VAMSAS {0} debe enlazar a {1} (pero se ha encontrado que lo está a {2})\r
-error.implementation_error_jalview_class_should_bind_to_type = Error de implementación: la clase Jalview {0} debe enlazar a {1} (pero se ha encontrado que lo está a {2})\r
-error.invalid_vamsas_rangetype_cannot_resolve_lists = RangeType VAMSAS no válido - ¡no es posible resolver ambas listas de Pos y Seg con los valores elegidos!\r
-error.implementation_error_maplist_is_null = Error de implementación. MapList es nulo en initMapType.\r
-error.implementation_error_cannot_have_null_alignment = Error de implementación: no es posible tener una clave nula en el alineamiento\r
-error.implementation_error_null_fileparse = Error de implementación. FileParse nulo en el construictor de copia\r
-error.implementation_error_cannot_map_alignment_sequences = Error de implementación: no es posible maper un alineamiento de secuencias desde distintos conjuntos de datos en un único alineamiento en el documento VAMSAS.\r
-error.implementation_error_cannot_duplicate_colour_scheme = Error grave de implementación: no es posible duplicar el esquema cromático {0}\r
-error.implementation_error_structure_selection_manager_null = Error de implementación. El contexto structure selection manager's es nulo\r
-exception.ssm_context_is_null = El contexto SSM es nulo\r
-error.idstring_seqstrings_only_one_per_sequence = idstrings y seqstrings contienen una cadena por cada secuencia\r
-error.cannot_have_mixed_length_replacement_vectors = No es posible tener vectores de reemplazo de distinta longitud. El vector de reemplazo para {0} es de {1} cadenas de largo, pero se ha considerado ya como un vector de longitud {2}.\r
-error.cannot_have_zero_length_vector_replacement_strings = No es posible tener un vector de cadenas de reemplazo de longitud cero - debe ser uno o n.\r
-error.implementation_error_multiple_single_sequence_prediction_jobs_not_supported = ¡Error de implementación! Todavía no se soportan varios trabajos de predicción asociados a una única secuencia.\r
-error.implementation_error_invalid_msa_index_for_job = ¡Error de implementación! Valor msaIndex no válido para JPredJob en el objeto de entrada MSA padre!\r
-error.implementation_error_startjob_called = Error de implementación - StartJob(JpredJob) invocado en {0}\r
-error.multiple_jnet_subjob_merge_not_implemented = Todavía no se han implementado varios subtrabajos JNet conjuntos.\r
-label.job_never_ran = El trabajo nunca se ejecutó - entrada devuelta al usuario.\r
-error.implementation_error_minlen_must_be_greater_zero = Error de implementación: minlen debe ser cero o más\r
-error.implementation_error_msawbjob_called = Error de implementación - StartJob(MsaWSJob) invocado en un WSJobInstance {0}\r
-error.implementation_error_cannot_attach_ws_menu_entry = Error de implementación: ¡no es posible adjunto una WS Menu Entry sin una referencia a un manejador del servicio!\r
-error.parameter_migration_not_implemented_yet = La migración de parámetros no se ha implementado todavía\r
-error.implementation_error_cannot_set_jaba_option = Error de implementación: no es posible establecer el valor de Jaba Option a un valor fuera de su rango permitido\r
-error.implementation_error_valuetype_doesnt_support_jabaws_type = Error de implementación: jalview.ws.params.ValueConstrainI.ValueType no soporta el tipo JABAWS: {0}\r
-error.cannot_create_jabaws_param_set = No es posible crear un JabaWSParamSet con parámetros no JabaWS\r
-error.cannot_set_arguments_to_jabaws_param_set = No es posible establecer argumentos en JabaWSParamSet que no sean argumentos JabaWS \r
-error.implementation_error_runner_config_not_available = Error de implementación: Runner Config no está disponible para un servicio JABAWS de tipo  {0} ({1})\r
-error.implementation_error_cannot_handle_jaba_param = Error de implementación: no es posible manejar el objeto del parámetro Jaba {0}\r
-error.implementation_error_attempt_to_delete_service_preset = Error de implementación: intento de borrar un servicio preestablecido\r
-error.implementation_error_cannot_locate_oldname_presetname = Error de implementación: no es posible localizar ni el nombre antiguo ({0}) ni el presetName ({1} en el almacén de datos.\r
-error.implementation_error_jabaws_param_set_only_handled_by = Error de implementación: JabaWsParamSets sólo puede ser manejado por JabaParamStore\r
-error.cannot_set_source_file_for = No es posible establecer el fichero fuente para {0}\r
-error.mismatch_service_instance_preset = Posible desajuste entre la instancia del servicio y la prestablecida\r
-error.cannot_set_params_for_ws_preset = No es posible establecer los parámetros para el servicio web JABA presestablecido\r
-error.implementation_error_can_only_instantiate_jaba_param_sets = Error de implementación: sólo se puede instanciar conjuntos de parámetros Jaba\r
-error.no_aacon_service_found = No se ha encontrado ningún servicio AACon \r
-error.implementation_error_couldnt_copy_value_constraint = Error de implementación: ¡no se puede copiar ValueConstrain!\r
-error.couldnt_encode_as_utf8 = No se ha podido codificar {0} como UTF-8.\r
-error.tree_inputtype_not_yet_implemented = No se ha implementado todavía el árbol como InputType\r
-error.implementation_error_need_to_have_httpresponse = Error de implementación: se necesita tener un HttpResponse que procesar\r
-error.dbrefsource_implementation_exception = Excepción de implementación DBRefSource\r
-error.implementation_error_dbinstance_must_implement_interface = Error de Implementación- getDbInstances debe recibir una clase que implemente jalview.ws.seqfetcher.DbSourceProxy (recibió {0})\r
-error.implementation_error_must_init_dbsources =Error de implementación. Debe inicializar dbSources\r
-label.view_controller_toggled_marked = {0} {1} columnas {2} conteniendo características del tipo  {3} en {4} secuencia(s)\r
-label.toggled = Invertida\r
-label.marked = Marcada\r
-label.not = no\r
-label.no_feature_of_type_found = No se han encontrado características del tipo {0}.\r
-label.submission_params = Envío {0}\r
-label.empty_alignment_job = Trabajo de alineamiento vacío\r
-label.add_new_sbrs_service = Añadir un nuevo SBRS\r
-label.edit_sbrs_entry = Editar entrada SBRS\r
-label.pca_recalculating = Recalculando PCA\r
-label.pca_calculating = Calculando PCA\r
-label.select_foreground_colour = Escoger color del primer plano\r
-label.select_colour_for_text = Seleccione el color del texto\r
-label.adjunst_foreground_text_colour_thereshold = Ajustar el umbral del color del texto en primer plano\r
-label.select_subtree_colour = Seleccioanr el color del sub-árbol\r
-label.create_new_sequence_features = Crear nueva(s) característica(s) de secuencia\r
-label.amend_delete_features = Arrelgar/Borrar características de {0}\r
-exception.out_of_bounds_for_file = Fuera de rango para el fichero: i={0}, Buffer final: i0={1} iend={2}\r
-exception.null_string_given_to_regex_search = Cadena nula enviada a Regex.search\r
-exception.null_string_like_given_to_regex_search = StringLike nula enviada a Regex.search\r
-exception.null_string_given_to_regex_reverse_search = Cadena nula enviada a Regex.reverseSearch\r
-exception.null_string_like_given_to_regex_reverse_search = StringLike nula enviada a Regex.reverseSearch\r
-exception.null_string_like_given_to_regex_search_from = Cadena nula enviada a Regex.searchFrom\r
-exception.null_string_like_given_to_regex_search_region = Cadena nula enviada a  Regex.searchRegion\r
-exception.replace_null_regex_pointer = Reemplazador tiene un puntero Regex nulo\r
-exception.bad_pattern_to_regex_perl_code = patrón erróneo en Regex.perlCode: {0}\r
-exception.no_stub_implementation_for_interface = No existe una implementación del stub para la interfaz: {0}\r
-exception.cannot_set_endpoint_address_unknown_port = No es posible estabelcer la dirección de punto final para el puerto desconocido {0}\r
-exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis = Consultando la coincidencia de apertura de paréntesis para paréntesis sin cerrar (?)\r
-exception.mismatched_unseen_closing_char = Discordancia (no vista) en el carácter de cierre {0}\r
-exception.mismatched_closing_char = Carácter de cierre discordante {0}\r
-exception.mismatched_opening_char = Carácter de apertura discordante {0} en {1}\r
-exception.invalid_datasource_couldnt_obtain_reader = Fuente de datos no válida. No es posible obtener el Reader\r
-exception.index_value_not_in_range = {0}: el valor del índice {1} en se encuentra en el rango [0..{2}]\r
-exception.unterminated_cigar_string = Cadena cigar sin terminar\r
-exception.unexpected_operation_cigar_string_pos = Operación no esperada {0} en una cadena cigar (posición {1} en {2})\r
-exception.couldnt_parse_responde_from_annotated3d_server = No es posible parsear la respuesta procedente del servidor Annotate3d \r
-exception.application_test_npe = Prueba de aplicación: lanzando un NullPointerException que debe aparecer en la consola\r
-exception.overwriting_vamsas_id_binding = Sobreescribiendo la asociación al VAMSAS id\r
-exception.overwriting_jalview_id_binding = Sobreescribiendo la asociación al Jalview id\r
-error.implementation_error_unknown_file_format_string = Error de implementación: cadena de formato de fichero desconocido\r
-exception.failed_to_resolve_gzip_stream = Fallo al resolver el flujo GZIP \r
-exception.problem_opening_file_also_tried = Problema abriendo {0} (también se intentó {1}) : {2}\r
-exception.problem_opening_file = Problema abriendo {0} : {1}\r
-exception.failed_to_read_data_from_source = Error al leer datos de la fuente: {0}\r
-exception.no_init_source_stream = Flujo de fuente sin inicializar\r
-exception.invalid_source_stream = Flujo de fuente no válida: {0}\r
-error.implementation_error_reset_called_for_invalid_source = Error de implementación: se ha invocado un Reset en una fuente no válida.\r
-exception.number_of_residues_in_query_sequence_differ_from_prediction = El n\u00FAmero de residuos en la supuesta secuencia consultada {0} ({1}\n{2})\ndifiere del n\u00FAmero de sitios de predicci\u00F3n en la predicci\u00F3n ({3})\r
-label.mapped = mapeado\r
-exception.jpredconcide_entry_has_unexpected_number_of_columns = JPredConcise: La entrada ({0}) tiene un número inesperado de columnas\r
-exception.couldnt_parse_concise_annotation_for_prediction = No es posible parsear la anotaci\u00F3n concisa para el perfil de predicci\u00F3n.\n{0}\r
-exception.newfile = Fichero Newick\: {0}\n\r
-label.no_tree_read_in = No hay lectura de árbol en\r
-exception.rnaml_couldnt_access_datasource = No ha sido posible acceder la fuente de datos ({0})\r
-exception.ranml_couldnt_process_data = No ha sido posible procesar los datos como un fichero RNAML ({0})\r
-exception.ranml_invalid_file = Fichero RNAML no válido ({0})\r
-exception.ranml_problem_parsing_data = Problema parseando los datos como RNAML ({0})\r
-exception.pfam_no_sequences_found = No se han encontrado secuencias (entrada PFAM)\r
-exception.stockholm_invalid_format = Este fichero no es tiene un formato STOCKHOLM válido: la primera línea no contiene '# STOCKHOLM'\r
-exception.couldnt_parse_sequence_line = No es posible parse la línea de secuencia: {0}\r
-exception.error_parsing_line = Error parseando {0}\r
-exception.unknown_annotation_detected = Anotación desconocida detectada: {0} {1}\r
-exception.couldnt_store_sequence_mappings = No es posible almacenar los mapeos de secuencia para {0}\r
-exception.matrix_too_many_iteration = Demasiadas iteraciones en {0} (el máximo es {1})\r
-exception.browser_not_found = Excepción al buscar el navegador: {0}\r
-exception.browser_unable_to_locate = Imposible encontrar el navegador: {0}\r
-exception.invocation_target_exception_creating_aedesc = InvocationTargetException mientras se creaba AEDesc: {0}\r
-exception.illegal_access_building_apple_evt= IllegalAccessException mientras se construía AppleEvent: {0}\r
-exception.instantiation_creating_aedesc = InstantiationException mientras se creaba AEDesc: {0}\r
-exception.unable_to_launch_url = Imposible lanzar la URL: {0}\r
-exception.unable_to_create_internet_config = Imposible crear una instancia de configuración de Internet: {0}\r
-exception.invocation_target_calling_url = InvocationTargetException mientras se invocaba openURL: {0}\r
-exception.illegal_access_calling_url = IllegalAccessException mientras se invocaba openURL: {0}\r
-exception.interrupted_launching_browser = InterruptedException mientras se lanzaba el navegador: {0}\r
-exception.das_source_doesnt_support_sequence_command = La fuente {0} no soporta el comando sequence.\r
-exception.invalid_das_source = Fuente DAS no válida: {0}\r
-exception.ebiembl_retrieval_failed_on = La recuperación de datos EBI EMBL XML ha fallado en {0}:{1}\r
-label.no_embl_record_found = # No se ha recuperado ningún registro EMBL de {0}:{1}\r
-label.embl_successfully_parsed = # Se han parseado con éxito las consultas {0} en un alineamiento\r
-exception.no_pdb_records_for_chain = No se han encontrado registros {0} para la cadena {1}\r
-exception.unexpected_handling_rnaml_translation_for_pdb = Excepcion inesperada cuando se traducían a RNAML los datos PDB\r
-exception.couldnt_recover_sequence_properties_for_alignment = No es posible recuperar las propiedades de la secuencia para el alineamiento\r
-exception.unknown_format_for_file = Formato desconocido {0} para el fichero \: \n{1}\r
-label.remove_gaps = Eliminar huecos\r
-exception.couldnt_recover_sequence_props_for_jnet_query = No ha sido posible recuperar las propiedades de la secuencia para la secuencia JNet Query!\r
-exception.server_timeout_try_later = Tiempo de conexi\u00F3n ha expirado - int\u00E9ntelo de nuevo m\u00E1s tarde\n\r
-exception.web_service_returned_null_try_later= El servidor {0} ha devuelto un objeto nulo, por lo que probablemente no se haya podido contactar con él. Inténtelo de nuevo más tarde.\r
-exception.cannot_contact_service_endpoint_at = No es posible contactar por el punto de acceso al servicio en {0}\r
-error.implementation_error_cannot_find_service_url_in_given_set = Error de implementación: no es posible encontrar la URL del servicio en el conjunto de URL proporcionado\r
-error.implementation_error_cannot_find_service_url_in_given_set_param_store = Error de implementación: la URL del servicio en el conjunto de URL  para este almacén de parámetros del servicio({0})\r
-exception.jobsubmission_invalid_params_set = Conjunto de parámetros no válido. Comprueba la implementación de Jalview\r
-exception.notvaliddata_group_contains_less_than_min_seqs = El grupo contiene menos de {0} secuencias.\r
-exception.outofmemory_loading_pdb_file = Sin menoria al cargar el fichero PDB\r
-exception.eps_coudnt_write_output_file = No es posible escribir el fichero de salida: {0}\r
-exception.eps_method_not_supported = Método actualmente no suportado por la versión {0} de EpsGraphics2D\r
-exception.eps_unable_to_get_inverse_matrix = Imposible obtener la inversa de la matrix: {0}\r
-warn.job_cannot_be_cancelled_close_window = Este trabajo no se puede cancelar.\nSimplemente, cierre la ventana.\r
-warn.service_not_supported = ¡Servicio no soportado!\r
-warn.input_is_too_big = ¡El tamaño de la entrada es demasiado grande!\r
-warn.invalid_job_param_set = ¡Conjunto de parámetros del trabajo no válido!\r
-info.job_couldnt_be_run_server_doesnt_support_program = No es posible ejecutar el trabajo porque el servidor no soporta este programa.\n{0}\r
-info.job_couldnt_be_run_exceeded_hard_limit = No es posible ejecutar el trabajo porque excede los l\u00EDmites del servidor.\n{0}\r
-info.job_couldnt_be_run_incorrect_param_setting = No es posible ejecutar el trabjao porque el servidor no soporta algunos de los par\u00E1metros.\n{0}\nPor favor, aseg\u00FArese de que ha usado los par\u00E1metros adecuados para este servicio\n\r
-info.no_jobs_ran = No se ha ejecutado ningún trabajo\r
-info.failed_to_submit_prediction = Error al enviar la predicci\u00F3n\:\n{0} {1}\r
-info.invalid_jnet_job_result_data ={0}\n{1}\nResultados del trabajo JNet no v\u00E1lidos\!\n{2}\r
-info.failed_to_submit_sequences_for_alignment = Error al enviar la secuencias para el alineamiento.\nLo m\u00E1s probable es que haya un problema en el servidor.\nSimplemente, cierre la ventana\n\r
-info.alignment_object_method_notes = \nNotas sobre los m\u00E9todos del objeto alineamiento\n\r
-info.server_exception = \n{0} Excepci\u00F3n del servidor\!\n{1}\r
-status.processing_commandline_args = Procesando los argumentos de la línea de comandos...\r
-status.das_features_being_retrived = Recuperando características DAS...\r
-status.searching_for_sequences_from = Buscando secuencias en {0}\r
-status.finished_searching_for_sequences_from = Finalizada la búsqueda de secuencias en {0}\r
-label.eps_file = Fichero EPS\r
-label.png_image = Imagen PNG\r
-status.saving_file = Guardando {0}\r
-status.export_complete = Exportación completada.\r
-status.fetching_pdb = Recuperando PDB {0}\r
-status.refreshing_news = Refrescando noticias\r
-status.importing_vamsas_session_from = Importando sesión VAMSAS de {0}\r
-status.opening_params = Abriendo {0}\r
-status.waiting_sequence_database_fetchers_init = Esperando la inicialización de los recuperadores de bases de datos de secuencias\r
-status.init_sequence_database_fetchers = Inicializando recuperadores de bases de datos de secuencias\r
-status.fetching_sequence_queries_from = Recuperando {0} consultas de secuencias de {1}\r
-status.finshed_querying = Consulta finalizada\r
-status.parsing_results = Parseando resultados.\r
-status.processing = Procesando...\r
-status.refreshing_web_service_menus = Refrescando los menús de servicios web\r
-status.collecting_job_results = Recolectando los resultados de los trabajos.\r
-status.fetching_das_sequence_features = Recuperando las características DAS de las secuencias\r
-status.no_das_sources_active = No existe ninguna fuente DAS activa\r
-status.das_feature_fetching_cancelled = Recuperación de características DAS cancelada\r
-status.das_feature_fetching_complete = Recuperación de características DAS completada\r
-status.fetching_db_refs = Recuperando db refs\r
-label.font_doesnt_have_letters_defined = La fuente no tiene letras definidas\npor lo que no puede emplease\ncon datos de alineamientos\r
-label.error_loading_file_params = Error cargando el fichero {0}\r
-label.error_loading_jalview_file = Error cargando el fichero Jalview \r
-warn.out_of_memory_when_action = Sin memoria al {0}\!\!\nConsulte los ficheros de ayuda para ajustar la memoria de la m\u00E1quina virtual de Java.\r
-warn.out_of_memory_loading_file = Sin memoria al cargar el fichero {0}\!\!\nConsulte los ficheros de ayuda para ajustar la memoria de la m\u00E1quina virtual de Java.\r
-label.out_of_memory = Sin memoria\r
-label.invalid_id_column_width = Identificador de anchura de columna no válido\r
-warn.user_defined_width_requirements = La anchura definida por el usuario para la \nlas columnas de anotaci\u00F3n e identificador de secuencias\nen figuras exportadas debe ser\na, al menos, de 12 p\u00EDxels\r
-label.couldnt_create_sequence_fetcher = No es posible crear SequenceFetcher\r
-warn.couldnt_create_sequence_fetcher_client = No es posible crear el cliente de recuperador de secuencias. Comprueba el fichero de log para más detalles.\r
-warn.server_didnt_pass_validation = El servicio no ha pasado la validaci\u00F3n.\nCompruebe la consola de Jalview para m\u00E1s detalles.\r
-warn.url_must_contain = La URL de la secuencia debe contener $SEQUENCE_ID$ o un regex $SEQUENCE_ID=/<regex>/=$\r
-info.validate_jabaws_server = \u00BFValidar el servidor JabaWS?\n(Consulte la consola de salida para obtener los resultados)\r
-label.test_server = ¿Probar servidor?\r
-info.you_want_jalview_to_find_uniprot_accessions = \u00BFDesea que Jalview encuentre\nUniprot Accession ids para los nombres de secuencias dados?\r
-label.find_uniprot_accession_ids = Buscar Uniprot Accession Ids\r
-label.new_sequence_fetcher = Añadir recuperador de secuencias\r
-label.additional_sequence_fetcher = Recuperador de secuencia adicional\r
-label.select_database_retrieval_source = Seleccionar fuente de recuperación de bases de datos\r
-label.overwrite_existing_file = ¿Sobreescribir el fichero existente?\r
-label.file_already_exists = El fichero existe\r
-label.edit_jabaws_url = Editar JABAWS URL\r
-label.add_jabaws_url = Añadir nueva JABAWS URL\r
-label.news_from_jalview = Noticias de http://www.jalview.org\r
-label.cut_paste_alignmen_file = Cortar & Pegar fichero de alineamiento\r
-label.enter_redundancy_thereshold = Introducir el umbral de redundancia\r
-label.select_dark_light_set_thereshold = <html><i>Seleccionar un color oscuro y un color claro para el texto y establecer el umbral en que<br>cambiar entre colores, basándose en el color de fondo</i></html>\r
-label.select_feature_colour = Seleccionar color de las características\r
-label.ignore_gaps_consensus = Ignorar huecos en el consenso\r
-label.show_group_histogram = Mostrar histograma de grupo\r
-label.show_group_logo = Mostrar logo de grupo\r
-label.normalise_group_logo = Normalizar el logo de grupo\r
-label.show_histogram = Mostrar histograma\r
-label.show_logo = Mostrar logo\r
-label.normalise_logo = Normalizar logo\r
-label.no_colour_selection_in_scheme = Por favor, seleccione un color antes de aplicar el esquema cromático\r
+action.refresh_services = Refrescar servicios
+action.reset_services = Reiniciar servicios
+action.merge_results = Unificar resultados
+action.load_scheme = Cargar esquema
+action.save_scheme = Guardar esquema
+action.save_image = Guardar imagen
+action.paste = Pegar
+action.show_html_source = Mostrar código HTML
+action.print = Imprimir
+action.web_service = Servicio web
+action.cancel_job = Cancelar trabajo
+action.start_job = Arrancar trabajo
+action.revert = Deshacer
+action.move_down = Mover hacia abajo
+action.move_up = Mover hacia arriba
+action.remove_return_datatype = Borrar tipo de datos de retorno
+action.add_return_datatype = Añadir tipo de datos de retorno
+action.remove_input_parameter = Borrar el parámetro de entrada seleccionado
+action.add_input_parameter = Añadir parámetro de entrada seleccionado
+action.edit = Editar
+action.new = Nuevo
+action.open_file = Abrir fichero
+action.show_unconserved = Mostrar regiones no conservadas
+action.open_new_aligmnent = Abrir nuevo alineamiento
+action.raise_associated_windows = Destacar ventanas asociadas
+action.minimize_associated_windows = Minimizar ventanas asociadas
+action.close_all = Cerrar todo
+action.load_project = Cargar proyecto
+action.save_project = Guardar proyecto
+action.quit = Salir
+action.expand_views = Expandir vistas
+action.gather_views = Capturar vistas
+action.page_setup = Configuración de la página
+action.reload = Recargar
+action.load = Cargar
+action.open = Abrir
+action.cancel = Cancelar
+action.create = Crear
+action.update = Actualizar
+action.delete = Borrar
+action.snapshot = Imagen
+action.clear = Limpiar
+action.accept = Aceptar
+action.select_ddbb = --- Seleccionar base de datos ---
+action.undo = Deshacer
+action.redo = Rehacer
+action.reset = Reiniciar
+action.remove_left = Eliminar parte izquierda
+action.remove_right = Eliminar parte derecha
+action.remove_empty_columns = Eliminar las columnas vacías
+action.remove_all_gaps = Eliminar todos los huecos
+action.left_justify_alignment = Ajustar el alineamiento a la izquierda
+action.right_justify_alignment = Ajustar el alineamiento a la derecha
+action.boxes = Casillas
+action.text = Texto
+action.by_pairwise_id = Identificar por parejas
+action.by_id = Por identificador
+action.by_length = Por longitud
+action.by_group = Por grupo
+action.remove = Eliminar
+action.remove_redundancy = Eliminar redundancia...
+action.pairwise_alignment = Alineamiento de pares...
+action.by_rna_helixes = Por hélices de RNA
+action.user_defined = Definido por el usuario...
+action.by_conservation = Por conservación
+action.wrap = Envolver
+action.show_gaps = Mostrar huecos
+action.show_hidden_markers = Mostrar marcadores ocultos
+action.find = Buscar
+action.undefine_groups = Grupos sin definir
+action.create_groups = Crear grupos
+action.make_groups_selection = Hacer grupos para seleccionar
+action.copy = Copiar
+action.cut = Cortar
+action.font = Fuente...
+action.scale_above = Escala superior
+action.scale_left = Escala izquierda
+action.scale_right = Escala derecha
+action.by_tree_order = Por orden del árbol
+action.sort = Ordenar
+action.calculate_tree = Calcular árbol
+action.help = Ayuda
+action.by_annotation = Por anotación...
+action.invert_sequence_selection = Invertir selección de secuencias
+action.invert_column_selection = Invertir selección de columnas
+action.show = Mostrar
+action.hide = Ocultar
+action.ok = OK
+action.set_defaults = Defecto
+action.create_group = Crear grupo
+action.remove_group = Eliminar grupo
+action.edit_group = Editar grupo
+action.border_colour = Color del borde
+action.edit_new_group = Editar nuevo grupo
+action.hide_sequences = Ocultar secuencias
+action.sequences = Secuencias
+action.ids = IDS
+action.ids_sequences = IDS y secuencias
+action.reveal_all = Revelar todo
+action.reveal_sequences = Revelar secuencias
+action.find_all = Buscar todo
+action.find_next = Buscar siguiente
+action.file = Archivo
+action.view = Ver 
+action.change_params = Cambiar parámetros
+action.apply = Aplicar
+action.apply_threshold_all_groups = Aplicar umbral a todos los grupos
+action.apply_all_groups = Aplicar a todos los grupos
+action.by_chain = Por cadena
+action.by_sequence = Por secuencia
+action.paste_annotations = Pegar anotaciones
+action.format = Formato
+action.select = Seleccionar
+action.new_view = Nueva vista
+action.close = Cerrar
+action.add = Añadir
+action.save_as_default = Guardar como por defecto
+action.save_as = Guardar como
+action.save = Guardar
+action.cancel_fetch = Cancelar búsqueda
+action.save_omit_hidden_columns = Guardar / Omitir las columnas ocultas
+action.change_font = Cambiar Fuente
+action.change_font_tree_panel = Cambiar fuente (panel del árbol)
+action.colour = Color
+action.calculate = Calcular
+action.select_all = Seleccionar Todo
+action.deselect_all = Deseleccionar Todo
+action.invert_selection = Invertir selección
+action.using_jmol = Usar Jmol
+action.link = Enlazar
+action.group_link = Enlazar grupo
+action.show_chain = Mostrar cadena
+action.show_group = Mostrar grupo
+action.fetch_db_references = Recuperar referencias a base de datos
+action.view_flanking_regions = Mostrar flancos
+label.view_flanking_regions = Mostrar los datos de la secuencia a ambos lados de las subsecuencias implicadas en este alineamiento
+label.str = Str: 
+label.seq = Seq: 
+label.structures_manager = Administrar estructuras
+label.nickname = Sobrenombre:
+label.url = URL: 
+label.input_file_url = Introducir URL en el fichero de entrada
+label.select_feature = Seleccionar función:
+label.name = Nombre:
+label.name_param = Nombre: {0}
+label.group = Grupo:
+label.group_name = Nombre del grupo
+label.group_description = Descripción del grupo
+label.edit_group_name_description = Editar nombre/descripción del grupo
+label.colour = Color:
+label.description = Descripción:
+label.start = Comenzar:
+label.end = Terminar:
+label.current_parameter_set_name = Nombre actual del conjunto de parámetros:
+label.service_action = Acción de servicio:
+label.post_url = POST URL: 
+label.url_suffix = URL Sufijo
+label.sequence_source = Fuente de la secuencia
+label.per_seq = por secuencia
+label.result_vertically_separable = Los resultados son separables verticalmente
+label.amend = Modificar
+label.undo_command = Deshacer {0}
+label.redo_command = Rehacer {0}
+label.principal_component_analysis = Análisis del Componente Principal
+label.average_distance_identity = Distancia Media Usando % de Identidad
+label.neighbour_joining_identity = Unir vecinos utilizando % de Identidad
+label.treecalc_title = {0} utilizando {1}
+label.tree_calc_av = Distancia media
+label.tree_calc_nj = Unir vecinos
+label.select_score_model = Selecciones modelo de puntuación
+label.score_model_pid = % Identidad
+label.score_model_blosum62 = BLOSUM62
+label.score_model_pam250 = PAM 250
+label.score_model_conservation = Conservación de las propiedades físico-químicas
+label.score_model_enhconservation = Conservación de las propiedades físico-químicas
+label.status_bar = Barra de estado
+label.out_to_textbox = Generar cuadro de texto
+label.clustalx = Clustalx
+label.clustal = Clustal
+label.zappo = Zappo
+label.taylor = Taylor
+label.blc = BLC
+label.fasta = Fasta
+label.msf = MSF
+label.pfam = PFAM
+label.pileup = Pileup
+label.pir = PIR
+label.hydrophobicity = Hidrofobicidad
+label.helix_propensity = Tendencia de la hélice
+label.strand_propensity = Tendencia de la hebra
+label.turn_propensity = Tendencia de giro
+label.buried_index = Índice de encubrimiento
+label.purine_pyrimidine = Purina/Pirimidina
+label.percentage_identity = Porcentaje de identidad
+label.blosum62 = BLOSUM62
+label.blosum62_score = Puntuación del BLOSUM62 
+label.tcoffee_scores = Puntuación del T-Coffee
+label.average_distance_bloslum62 = Distancia Media Usando BLOSUM62
+label.neighbour_blosum62 = Neighbour Joining usando BLOSUM62
+label.show_annotations = Mostrar anotaciones
+label.colour_text = Color del texto
+label.show_non_conversed = Mostrar no conservadas
+label.overview_window = Ventana resumen
+label.none = Ninguno
+label.above_identity_threshold = Por encima del umbral de identidad
+label.show_sequence_features = Mostrar las características de las secuencias
+label.nucleotide = Nucleótido
+label.to_new_alignment = A nuevo alineamiento
+label.to_this_alignment = Añadir a este alineamiento
+label.apply_colour_to_all_groups = Aplicar color a todos los grupos
+label.modify_identity_thereshold = Modificar el umbral de identidad...
+label.modify_conservation_thereshold = Modificar el umbral de conservación...
+label.input_from_textbox = Introducir desde el cuadro de texto
+label.centre_column_labels = Centrar las etiquetas de las columnas
+label.automatic_scrolling = Desplazamiento automático
+label.documentation = Documentación
+label.about = Acerca de...
+label.show_sequence_limits = Mostrar los límites de la secuencia
+label.feature_settings = Ajustar funciones...
+label.sequence_features = Funciones de la secuencia
+label.all_columns = Todas las columnas
+label.all_sequences = Todas las secuencias
+label.selected_columns = Columnas seleccionadas
+label.selected_sequences = Secuencias seleccionadas
+label.all_but_selected_region = Todo menos la región seleccionada (Shift+Ctrl+H)
+label.selected_region = Región seleccionada
+label.all_sequences_columns = Todas las secuencias y columnas
+label.group_consensus = Consenso de grupo
+label.group_conservation = Conservación de grupo
+label.show_consensus_histogram = Mostrar el histograma de consenso
+label.show_consensus_logo = Mostrar el logo de consenso
+label.norm_consensus_logo = Normalizar el logo de consenso
+label.apply_all_groups = Aplicar a todos los grupos
+label.autocalculated_annotation = Anotación autocalculada
+label.min_colour = Color mínimo
+label.max_colour = Color máximo
+label.use_original_colours = Usar colores originales
+label.threshold_minmax = El umbral es mín/máx
+label.represent_group_with = Representar al grupo con
+label.selection = Seleccionar
+label.group_colour = Color del grupo
+label.sequence = Secuencia
+label.view_pdb_structure = Ver estructura PDB
+label.min = Mín:
+label.max = Máx:
+label.colour_by_label = Color por etiquetas
+label.new_feature = Nueva función
+label.match_case = Hacer corresponder mayúsculas y minúsculas
+label.view_alignment_editor = Ver en el editor de alineamientos
+label.labels = Etiquetas
+label.output_values = Valores de salida...
+label.output_points = Puntos de salida...
+label.output_transformed_points = Puntos de salida transformados
+label.input_data = Datos de entrada...
+label.nucleotide_matrix = Matriz nucleotídica
+label.protein_matrix = Matriz proteica
+label.show_bootstrap_values = Mostrar valores de Bootstrap
+label.show_distances = Mostrar distancias
+label.mark_unassociated_leaves = Marcar hojas no asociadas
+label.fit_to_window = Ajustar a la ventana
+label.newick_format = Formato Newick
+label.select_newick_like_tree_file = Seleccione un fichero de árbol tipo Newick
+label.colours = Colores
+label.view_mapping = Ver mapeado
+label.wireframe = Estructura metálica
+label.depthcue = Clave de profundidad
+label.z_buffering = Tamponamiento Z
+label.charge_cysteine = Carga & Cisteína
+label.all_chains_visible = Todas las cadenas visibles
+label.successfully_added_features_alignment = Funciones añadidas exitosamente al alineamiento
+label.keyboard_editing_mode = El modo de editar teclado es {0}
+label.paste_features_annotations_Tcoffee_here = Pegar tus funciones / anotaciones / puntuación del fichero T-coffee aquí.
+label.removed_columns = {0} columnas eliminadas.
+label.removed_empty_columns = {0} columnas vacías eliminadas.
+label.paste_newick_tree_file = Pegar su fichero árbol Newick aquí. 
+label.order_by_params = Ordenar por {0}
+label.html_content = <html>{0}</html>
+label.paste_pdb_file= Pegar tu fichero PDB aquí.
+label.paste_pdb_file_for_sequence = Pegar fichero PDB para la secuencia {0}
+label.could_not_parse_newick_file  = No se pudo analizar el fichero Newick\\\!\\n {0}
+label.successfully_pasted_tcoffee_scores_to_alignment= Pegada exitosamente la puntuación T-Coffee al alineamiento.
+label.failed_add_tcoffee_scores = Fallo al añadir las puntuaciones T-Coffee: 
+label.successfully_pasted_annotation_to_alignment = Anotación pegada exitosamente al alineamiento.
+label.couldnt_parse_pasted_text_as_valid_annotation_feature_GFF_tcoffee_file = No es posible parsear el texto pegado como una anotación características, GFF, o fichero T-Coffee válidos
+label.successfully_pasted_alignment_file = Fichero de alineamiento pegado exitosamente
+label.paste_your_alignment_file = Pegar su fichero de alineamiento aquí
+label.paste_your = Pegar su
+label.finished_searching = Búsqueda finalizada
+label.search_results= Buscar Resultados {0} : {1}
+label.found_match_for = Buscar coincidencia para {0}
+label.font = Fuente:
+label.size = Talla:
+label.style = Estilo:
+label.enter_redundancy_threshold = Introducir el umbral de redundancia
+label.calculating = Calculando....
+label.modify_conservation_visibility = Modificar la visibilidad de conservación
+label.colour_residues_above_occurence = Residuos de color por encima del % de aparición 
+label.set_this_label_text = fijar como etiqueta 
+label.sequences_from = Secuencias de {0}
+label.successfully_loaded_file  = Fichero cargado exitosamente {0}
+label.successfully_saved_to_file_in_format = Guardado exitosamente en el fichero: {0} en formato {1}.
+label.copied_sequences_to_clipboard = Copiadas {0} secuencias en el portapapeles.
+label.check_file_matches_sequence_ids_alignment = Comprobar que el fichero coincide con el ID de la secuencia en el alineamiento.
+label.problem_reading_tcoffee_score_file = Problema de lectura del fichero de puntuaciones T-COFFEE
+label.source_to_target = {0} a {1}
+label.per_sequence_only= Sólo por secuencia
+label.to_file = a fichero
+label.to_textbox = a cuadro de texto
+label.jalview = Jalview
+label.csv_spreadsheet = CSV (Hoja de cálculo)
+label.status =  [Estado]
+label.channels = Canales
+label.channel_title_item_count = {0} ({1})
+label.blog_item_published_on_date = {0} {1} 
+label.select_das_service_from_table = Seleccionar servicio DAS de la tabla para leer una descripción completa aquí.
+label.session_update = Actualizar sesión
+label.new_vamsas_session = Nueva sesión Vamsas
+label.load_vamsas_session = Cargar sesión Vamsas
+label.save_vamsas_session = Guardar sesión Vamsas
+label.select_vamsas_session_opened_as_new_vamsas_session= Selecciones una sesión vamsas para abrirla como una nueva sesión.
+label.open_saved_vamsas_session = Abrir una sesión VAMSAS guardada
+label.groovy_console = Consola Groovy 
+label.lineart = lineart
+label.dont_ask_me_again = No volver a preguntar
+label.select_eps_character_rendering_style = Seleccionar el carácter EPS como estilo de visualización 
+label.invert_selection = Invertir selección
+label.optimise_order = Optimizar orden
+label.seq_sort_by_score = Ordenar las secuencias por puntuación
+label.load_colours = Cargar colores
+label.save_colours = Guardar colores
+label.fetch_das_features = Recuperar funciones DAS
+label.selected_database_to_fetch_from = Seleccionada {0} Base de datos {1} para buscar de {2} 
+label.database_param = Base de datos: {0}
+label.example = Ejemplo
+label.example_param = Ejemplo: {0}
+label.select_file_format_before_saving = Debe seleccionar un formato de fichero antes de guardar!
+label.file_format_not_specified = Formato de fichero no especificado
+label.alignment_contains_hidden_columns = El alineamiento contiene columnas ocultas.\\nQuieres guardar s\u00F3lo el alineamiento visible?
+label.couldnt_save_file = No se pudo guardar el fichero: {0}
+label.error_saving_file = Error guardando el fichero
+label.remove_from_default_list = eliminar de la lista de defectuosos?
+label.remove_user_defined_colour = Eliminar el color definido por el usuario
+label.you_must_select_least_two_sequences = Debes seleccionar al menos 2 secuencias.
+label.invalid_selection = Selección inválida
+label.principal_component_analysis_must_take_least_four_input_sequences = El an\u00E1lisis de la componente principal debe tomar\\nal menos 4 secuencias de entrada.
+label.sequence_selection_insufficient = Selección de secuencias insuficiente
+label.you_need_more_two_sequences_selected_build_tree = necesitas seleccionar más de dos secuencias para construir un árbol!
+label.not_enough_sequences = No suficientes secuencias
+label.selected_region_to_tree_may_only_contain_residues_or_gaps = La regi\u00F3n seleccionada para construir un \u00E1rbol puede\\ncontener s\u00F3lo residuos o espacios.\\nPrueba usando la funci\u00F3n Pad en el men\u00FA de edici\u00F3n,\\n o uno de los m\u00FAltiples servicios web de alineamiento de secuencias.
+label.sequences_selection_not_aligned = Las secuencias seleccionadas no están alineadas
+label.sequences_must_be_aligned_before_creating_tree = Las secuencias deben estar alineadas antes de crear el \u00E1rbol.\\nPrueba usando la funci\u00F3n Pad en el men\u00FA de editar,\\n o uno de los m\u00FAltiples servicios web de alineamiento de secuencias.
+label.sequences_not_aligned = Secuencias no alineadas
+label.problem_reading_tree_file =  Problema al leer el fichero del árbol
+label.possible_problem_with_tree_file = Posible problema con el fichero del árbol
+label.select_at_least_three_bases_in_at_least_one_sequence_to_cDNA_translation = Por favor seleccionar al menos tres bases de al menos una secuencia para poder realizar la traducción de cDNA.
+label.translation_failed = Translation Failed
+label.error_when_translating_sequences_submit_bug_report = Desafortunadamente, algo fue mal a la hora de traducir tus secuencias.\\nPor favor, revisa la consola Jalview java \\ny presenta un informe de error que incluya el seguimiento.
+label.implementation_error  = Error de implementación:
+label.automatically_associate_pdb_files_with_sequences_same_name = Quieres asociar automáticamente los {0} ficheros PDB con las secuencias del alineamiento que tengan el mismo nombre?
+label.automatically_associate_pdb_files_by_name = Asociar los ficheros PDB por nombre automáticamente
+label.ignore_unmatched_dropped_files_info = Quieres <em>ignorar</em> los {0} ficheros cuyos nombres no coincidan con ningún IDs de las secuencias ?
+label.ignore_unmatched_dropped_files = Ignorar los ficheros sin coincidencias?
+label.enter_view_name = Introducir nombre visible (¿?)
+label.enter_label = Introducir etiqueta
+label.enter_label_for_the_structure = Introducir una etiqueta para la estructura?
+label.pdb_entry_is_already_displayed = {0} Ya est\u00E1 mostrado.\\nQuieres volver a usar este visor?
+label.map_sequences_to_visible_window = Mapa de secuencias en ventana visible: {0}
+label.add_pdbentry_to_view = Quieres a\u00F1adir {0} a la vista llamada\\n{1}\\n
+label.align_to_existing_structure_view = Alinear a una estructura ya existente
+label.pdb_entries_couldnt_be_retrieved = Las siguientes entradas pdb no pueden ser extra\u00EDdas del PDB\\\:\\n{0}\\nPor favor, prueba descarg\u00E1ndolas manualmente.
+label.couldnt_load_file = No se pudo cargar el fichero
+label.couldnt_find_pdb_id_in_file = No se pudo encontrar un Id PDB en el fichero suministrado. Por favor, introduzca un Id para identificar esta estructura.
+label.no_pdb_id_in_file = No hay un Id PDB en el fichero
+label.couldnt_read_pasted_text = No se pudo leer el texto pegado {0}
+label.error_parsing_text = Error analizando el texto
+label.enter_local_das_source = Intruduzca el Nickname & URL de la fuente DAS local
+label.you_can_only_edit_or_remove_local_das_sources = Sólo puedes editar o eliminar fuentes DAS locales!
+label.public_das_source = Fuente pública DAS - no editable
+label.input_alignment_from_url = Alineamiento de entrada desde URL
+label.input_alignment = Alineamiento de entrada
+label.couldnt_import_as_vamsas_session = No se pudo importar {0} como una nueva sesión Vamsas.
+label.vamsas_document_import_failed =  Fallo en la importación del documento Vamsas
+label.couldnt_locate = No se pudo localizar {0}
+label.url_not_found = URL no encontrada
+label.no_link_selected = Enlace no seleccionado
+label.new_sequence_url_link = Enlace a una nueva secuencia URL
+label.cannot_edit_annotations_in_wrapped_view = No se pueden editar anotaciones en vista envolvente
+label.wrapped_view_no_edit = Vista envolvente - no editar
+label.error_retrieving_data = Error en la recuperación de datos
+label.user_colour_scheme_must_have_name = El esquema de colores del usuario debe tener un nombre
+label.no_name_colour_scheme = No hay nombre para el esquema de colores 
+label.invalid_url = URL Invalido!
+label.error_loading_file = Error al cargar el fichero
+label.problems_opening_file = Encontrados problemas al abrir el fichero {0}!!
+label.file_open_error = Error al abrir el fichero
+label.no_das_sources_selected_warn = No han sido seleccionadas fuentes DAS.\\nPor favor, seleccione algunas fuentes y\\npruebe de nuevo.
+label.no_das_sources_selected_title = No han sido seleccionadas fuentes DAS
+label.colour_scheme_exists_overwrite = El esquema de colores {0} ya existe.\\nContinuar guardando el esquema de colores como {1}?
+label.duplicate_scheme_name = Duplicar nombre de esquema
+label.jalview_new_questionnaire = Hay un nuevo cuestionario disponible. Querr\u00EDa completarlo ahora ?\\n
+label.jalview_user_survey = Encuesta de usuario Jalview 
+label.alignment_properties = Propiedades del alineamiento: {0}
+label.alignment_props = Propiedades del alineamiento
+label.input_cut_paste = Cortar y pegar la entrada
+label.input_cut_paste_params = Cortar y pegar la entrada - {0}
+label.alignment_output_command = Alineamiento de salida - {0}
+label.annotations = Anotaciones
+label.features = Funciones
+label.overview_params = Visión general {0}
+label.paste_newick_file = Pegar nuevo fichero Newick
+label.load_tree_from_file = desde fichero - 
+label.colour_by_annotation = Color por anotación
+label.selection_output_command = Seleccionar salida - {0}
+label.annotation_for_displayid = <p><h2>Anotación para {0} </h2></p><p>
+label.pdb_sequence_mapping = PDB - Mapeado de secuencia
+label.pca_details = detalles de la PCA
+label.redundancy_threshold_selection = Selección del umbral de redundancia
+label.user_defined_colours = Colores definidos del usuario
+label.jalviewLite_release = JalviewLite - versión {0}
+label.jaview_build_date = Fecha de creación: {0}
+label.jalview_authors_1 = Authors:  Jim Procter, Andrew Waterhouse, Jan Engelhardt, Lauren Lui,
+label.jalview_authors_2 = Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton.
+label.jalview_dev_managers = Desarrollo gestionado por The Barton Group, University of Dundee, Scotland, UK.
+label.jalview_distribution_lists = Para ayuda, ver el FAQ at www.jalview.org y/o adjuntar la lista de envío jalview-discuss@jalview.org
+label.jalview_please_cite = Si usa Jalview incluya la siguiente cita, por favor:
+label.jalview_cite_1_authors = Waterhouse, A.M., Procter, J.B., Martin, D.M.A, Clamp, M. and Barton, G. J. (2009)
+label.jalview_cite_1_title = Jalview Version 2 - un editor de alineamiento múltiple de secuencias y banco de trabajo de análisis
+label.jalview_cite_1_ref =  Bioinformaticos doi: 10.1093/bioinformatics/btp033
+label.right_click = clic en el botón derecho
+label.to_add_annotation = para añadir anotación
+label.alignment_has_no_annotations = El alineamiento no tiene anotaciones
+label.retrieving_pdb_data = Recuperación de datos PDB...
+label.label = Etiqueta
+label.no_features_added_to_this_alignment = No hay funciones asociadas a este alineamiento!!
+label.features_can_be_added_from_searches_1 = (Las funciones pueden ser añadidas de búsquedas o
+label.features_can_be_added_from_searches_2 = de ficheros de funciones Jalview / GFF)
+label.calculating_pca= Calculando PCA
+label.reveal_columns = Mostrar Columnas
+label.jalview_cannot_open_file = Jalview no puede abrir el fichero
+label.jalview_applet = Aplicación Jalview  
+label.loading_data = Cargando datos
+label.memory_stats = Memoria libre total: {0} MB; Memoria máxima: {1} MB; {2} %
+label.calculating_tree = Calculando árbol
+label.state_queueing = En cola 
+label.state_running = Procesando
+label.state_complete = Completar
+label.state_completed = Finalizado
+label.state_job_cancelled = ¡Trabajo cancelado!
+label.state_job_error = Error del trabajo!
+label.server_error_try_later = ¡Error del servidor! (Intentar más tarde)
+label.error_loading_pdb_data = ¡Error cargando los datos PDB!
+label.fetching_pdb_data = Buscando los datos PDB...
+label.structure_type = Estructura_tipo
+label.settings_for_type = Ajustes para {0}
+label.view_full_application = Ver en la aplicación completa 
+label.load_associated_tree = Cargar árbol asociado ...
+label.load_features_annotations = Cargar características/anotaciones ...
+label.export_features = Exportar características...
+label.export_annotations = Exportar anotaciones ...
+label.jalview_copy = Copiar (sólo Jalview)
+label.jalview_cut = Cortar (sólo Jalview)
+label.to_upper_case = Pasar a mayúsculas
+label.to_lower_case = Pasar a minúsculas
+label.toggle_case = Alternar mayúsculas y minúsculas
+label.edit_name_description = Editar nombre/descripción
+label.create_sequence_feature = Crear función de secuencia
+label.edit_sequence = Editar secuencia
+label.edit_sequences = Editar secuencias
+label.sequence_details = Detalles de la secuencia
+label.jmol_help = Ayuda de Jmol 
+label.all = Todo
+label.sort_by = Ordenar por
+label.sort_by_score = Ordenar por puntuación
+label.sort_by_density = Ordenar por densidad
+label.sequence_sort_by_density = Ordenar las secuencias por densidad
+label.reveal = Revelar
+label.hide_columns = Ocultar columnas
+label.load_jalview_annotations = Cargar un fichero de anotación de Jalivew o un fichero de características
+label.load_tree_file = Cargar un fichero de árbol
+label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences = Recuperar y parsear un registro de secuencia de base de datos para el alineamiento o secuencias actualmente seleccionados
+label.standard_databases = Bases de datos estándar
+label.fetch_embl_uniprot = Recuperar de EMBL/EMBLCDS o Uniprot/PDB y de cualquier fuente DAS seleccionada
+label.reset_min_max_colours_to_defaults = Reiniciar los colores min y max colours a los valores por defecto establecidos en las preferencias de usuario
+label.align_structures_using_linked_alignment_views = Alinear las estructuras utlizando las {0} vistas de alineamiento enlazadas
+label.connect_to_session = Conectar a la sesión {0}
+label.threshold_feature_display_by_score = Filtrar la característica mostrada por puntuación.
+label.threshold_feature_no_thereshold = Sin umbral
+label.threshold_feature_above_thereshold = Por encima del umbral
+label.threshold_feature_below_thereshold = Por debajo del umbral
+label.adjust_thereshold = Ajustar umbral
+label.toggle_absolute_relative_display_threshold = Cambiar entre mostrar el umbral absoluto y el relativo.
+label.display_features_same_type_different_label_using_different_colour = Mostrar las características del mismo tipo con una etiqueta diferente y empleando un color distinto (p.e. características del dominio)
+label.select_colour_minimum_value = Seleccionar el color para el valor mínimo
+label.select_colour_maximum_value = Seleccionar el color para el valor máximo
+label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment = Abrir una nueva vista Jmol con todas las estructuras asociadas con la selección acxtual y superponer las utilizando el alineamiento.
+label.open_url_param = Abrir URL {0}
+label.open_url_seqs_param = Abrir URL ({0}..) ({1} secuencias)
+label.load_pdb_file_associate_with_sequence = Cargar un fichero PDB y asociarlo con la secuencia {0}
+label.reveal_hidden_columns = Revelar las columnas ocultas con el botón derecho del ratón
+label.dark_colour = Oscurecer color
+label.light_colour = Aclarar color
+label.highlightnode = Pulse el botón izquierdo para seleccionar las hojas.<br>Haga doble clic para invertir las hojas.<br>Pulse el botón derecho para cambiar el color.
+label.load_colour_scheme = Cargar esquema cromático
+label.toggle_enabled_views = Cuando está habilitado, permite que se seleccionen varias vistas.
+label.edit_notes_parameter_set = Haga clic para editar las notas de este conjunto de parámetros.
+label.open_local_file = Abrir fichero local
+label.enable_automatically_sort_alignment_when_open_new_tree = Habilite esta opción para ordenar automáticamente<br>el alineamiento cuando abra<br> un nuevo árbol.
+label.listen_for_selections = Atención a las selecciones
+label.selections_mirror_selections_made_same_sequences_other_views = Cuando está habilitado, las selecciones de esta vista serán un reflejo<br>de las selecciones realizadas en las mismas secuencias de otras vistas.
+label.toggle_sequence_visibility = Shift+H cambia la visibilidad de la secuencia
+label.toggle_columns_visibility = Ctrl+H cambia la visibilidad de la columna
+label.toggles_visibility_hidden_selected_regions = H cambiar la visibilidad de las regiones ocultas o seleccionadas
+label.rename_tab_eXpand_reGroup=  Haga clic en el botón derecho para renombrar la pestaña<br>Presione X para expandir las tablas y G para reagrupar.
+label.right_align_sequence_id = Alinear a la derecha el ID de la secuencia
+label.sequence_id_tooltip = Ayuda del ID de la secuencia
+label.no_services = <Sin Servicios>
+label.select_copy_raw_html = Seleccione esta opción si desea copiar el html en bruto
+label.share_data_vamsas_applications = Compartir datos con otras aplicaciones vamsas
+label.connect_to = Conectar a
+label.join_existing_vamsas_session = Unirse a una sesión vamsas existente
+label.from_url = desde una URL
+label.any_trees_calculated_or_loaded_alignment_automatically_sort = Cuando está habilitado, cualquier árbol calculado o cargado en el alineamiento lo ordenará
+label.sort_with_new_tree = Ordenar con el nuevo árbol
+label.from_textbox = desde un área de texto
+label.window = Ventana
+label.preferences = Preferencias
+label.tools = Herramientas
+label.fetch_sequences = Recuperar secuencia(s)
+label.stop_vamsas_session = Parar sesión vamsas
+label.collect_garbage = Recolector de basura
+label.show_memory_usage = Mostrar uso de memoria
+label.show_java_console = Mostrar consola de Java
+label.show_jalview_news = Mostrar las noticias de Jalview
+label.take_snapshot = Tomar captura
+label.monospaced_fonts_faster_to_render = Las fuentes monoespaciadas son más rápidas de pintar
+label.anti_alias_fonts = Fuentes anti-alias (más lentas de pintar)
+label.monospaced_font= Monoespaciadas
+label.quality = Calidad
+label.maximize_window = Maximizar ventana
+label.conservation = Conservación
+label.consensus = Consenso
+label.histogram = Histograma
+label.logo = Logo
+label.non_positional_features = Características no posicionales
+label.database_references = Referencias a base de datos
+label.share_selection_across_views = Compartir la selección en todas las vistas
+label.scroll_highlighted_regions = Desplazarse hasta las regiones resaltadas
+label.gap_symbol = Símbolo del hueco
+label.alignment_colour = Color del alineamiento
+label.address = Dirección
+label.port = Puerto
+label.default_browser_unix = Navegador por defecto (Unix)
+label.send_usage_statistics = Enviar estadísticas de uso
+label.check_for_questionnaires = Comprobar los cuestionarios
+label.check_for_latest_version = Comprobar la última versión
+label.url_linkfrom_sequence_id = URL del enlace del ID de la secuencia
+label.use_proxy_server = Utilizar un servidor proxy
+label.eps_rendering_style = Estilo de visualización EPS
+label.append_start_end = Añadir /inicio-fin (/15-380)
+label.full_sequence_id = ID de la secuencia completo
+label.smooth_font = Fuente alargada
+label.autocalculate_consensus = Autocalcular consenso
+label.pad_gaps = Rellenar huecos
+label.pad_gaps_when_editing = Rellenar huecos al editar
+label.automatically_set_id_width = Establecer automáticamente al anchura del ID
+label.figure_id_column_width = Anchura de la columna del ID de la Figura
+label.use_modeller_output = Utilizar la salidad del Modeller
+label.wrap_alignment = Envolver alineamiento
+label.right_align_ids = Alinear IDs a la derecha
+label.sequence_name_italics = Nombre de la secuencia en cursiva
+label.open_overview = Abrir resumen
+label.default_colour_scheme_for_alignment = Esquema cromático por defecto para el alineamiento
+label.annotation_shading_default = Sombreado por defecto de la anotación
+label.default_minimum_colour_annotation_shading = Por mínimo por defecto para el sombreado de la anotación
+label.default_maximum_colour_annotation_shading = Por máximo por defecto para el sombreado de la anotación
+label.visual = Visual
+label.connections = Conexiones
+label.output = Salida
+label.editing = Edición
+label.das_settings = Configuración DAS
+label.web_services = Servicios web
+label.right_click_to_edit_currently_selected_parameter = Haga clic en el botón derecho para editar el parámetro seleccionado actualmente.
+label.let_jmol_manage_structure_colours = Permitir que Jmol gestione la estructuras cromáticas
+label.marks_leaves_tree_not_associated_with_sequence = Marcar las hojas del árbol que no están asociadas a una secuencia
+label.index_web_services_menu_by_host_site = Indizar los servicios web en el menú por el host que los aloja
+label.option_want_informed_web_service_URL_cannot_be_accessed_jalview_when_starts_up = Marque esta opción si desea ser informado<br>cuando no se pueda acceder a la URL de un servicio web<br>al arrancar Jalview.
+label.new_service_url = Nueva URL del servicio
+label.edit_service_url = Editar la URL del servicio
+label.delete_service_url = Borrar la URL del servicio
+label.details = Detalles
+label.options = Opciones
+label.parameters = Paramétros
+label.available_das_sources = Fuentes DAS disponibles
+label.full_details = Detalles completos
+label.authority = Autoridad
+label.type = Tipo
+label.proxy_server = Servidor proxy
+label.file_output = Fichero de salida
+label.select_input_type = Seleccionar el tipo de entrada
+label.set_options_for_type = Establecer opciones para el tipo
+label.data_input_parameters = Datos de los parámetros de entrada
+label.data_returned_by_service = Datos devueltos por el servicio
+label.rsbs_encoded_service = Servicio RSBS codificado
+label.parsing_errors = Errores de parseo
+label.simple_bioinformatics_rest_services = Simple Bioinformatics Rest Services
+label.web_service_discovery_urls = URL de descubrimiento de servicios web
+label.input_parameter_name = Nombre del parámetro de entrada
+label.short_descriptive_name_for_service = Nombre corto descriptivo del servicio
+label.function_service_performs = Tipo de función que realiza el servicio (p.e. alineamiento, análisis, búsqueda, etc).
+label.brief_description_service = Descripción breve del servicio
+label.url_post_data_service = URL a la que enviar los datos del servicio. Incluya cualquier parámetro especial que se necesite aquí
+label.optional_suffix = Sufijo opcional añadido a la URL al recuperar los resultados del servicio
+label.preferred_gap_character = ¿Qué caracter para el hueco prefiere el servicio?
+label.gap_character = Carácter para hueco
+label.move_return_type_up_order= Mover el tipo de returno hacia arriba en el orden
+label.move_return_type_down_order= Mover el tipo de returno hacia abajo en el orden
+label.update_user_parameter_set = Actualizar el conjunto de parámetros de usuario existente
+label.delete_user_parameter_set = Borrar el conjunto de parámetros de usuario existente
+label.create_user_parameter_set = Crear un nuevo conjunto de parámetro con la configuración actual.
+label.revert_changes_user_parameter_set = Deshacer todos los cambios en el conjunto de parámetros actual
+label.start_job_current_settings = Arrancar trabajo con la configuración actual
+label.cancel_job_close_dialog = Cerrar este diálogo y cancelar el trabajo
+label.input_output = Entrada/Salida
+label.cut_paste = Cortar y pegar
+label.adjusting_parameters_for_calculation = Ajustar los parámetros para el cálculo existente
+label.2d_rna_structure_line = 2D RNA {0}
+label.2d_rna_sequence_name = 2D RNA - {0}
+label.edit_name_and_description_current_group = Editar el nombre y la descripción del grupo actual.
+label.view_structure_for = Visualizar la estructura para {0}
+label.view_all_structures = Visualizar todas las {0} estructuras.
+label.view_all_representative_structures = Visualizar todas las {0} estructuras representativas.
+label.open_new_jmol_view_with_all_representative_structures_associated_current_selection_superimpose_using_alignment = Abrir una nueva vista de Jmol con todas las estructuras representativas\nasociadas con la selecci\u00F3n actual\nsuperpuesta con el alineamiento actual.
+label.associate_structure_with_sequence = Asociar estructura con la secuencia
+label.from_file = desde fichero
+label.enter_pdb_id = Introducir PDB Id
+label.discover_pdb_ids = Buscar PDB ids
+label.text_colour = Color del texto
+label.structure = Estructura
+label.view_structure = Visualizar estructura
+label.clustalx_colours = Colores de Clustalx
+label.above_identity_percentage = Sobre % identidad
+label.create_sequence_details_report_annotation_for = Anotación para {0}
+label.sequece_details_for = Detalles de la secuencia para {0}
+label.sequence_name = Nombre de la secuencia
+label.sequence_description = Descripción de la secuencia
+label.edit_sequence_name_description = Editar el nombre/descripción de la secuencia
+label.spaces_converted_to_backslashes = Los espacios se han convertido en _
+label.no_spaces_allowed_sequence_name = No se permiten espacios en el nombre de la secuencia
+label.select_outline_colour = Seleccionar el color del límite
+label.web_browser_not_found_unix = Unixers\: No es posible encontrar el navegador web por defecto.\nA\u00F1ada la ruta completa de su navegador en la pesta\u00F1a de Preferencias.
+label.web_browser_not_found = No se encuentra el navegador web
+label.select_pdb_file_for = Seleccione un fichero PDB para {0}
+label.html = HTML
+label.wrap = Envolver
+label.show_database_refs = Mostrar las referencias en base de datos
+label.show_non_positional_features = Mostrar las características no posicionales
+label.save_png_image = Guardar como imagen PNG
+label.load_tree_for_sequence_set = Cargar un árbol para este conjunto de secuencias
+label.export_image = Exportar imagen
+label.vamsas_store = Almacén VAMSAS
+label.translate_cDNA = Traducir cDNA
+label.extract_scores = Extraer puntuaciones
+label.get_cross_refs = Obtener referencias cruzadas
+label.sort_alignment_new_tree = Alinear el alineamiento con el nuevo árbol
+label.add_sequences = Añadir secuencias
+label.new_window = Nueva ventana
+label.refresh_available_sources = Refrescar las fuentes disponibles
+label.use_registry = Utilizar el registro
+label.add_local_source = Añadir fuente local
+label.set_as_default = Establecer por defecto
+label.show_labels = Mostrar etiquetas
+label.background_colour = Color de fondo
+label.associate_nodes_with = Asociar nodos con
+label.jalview_pca_calculation = Cálculo del PCA por Jalview
+label.link_name = Nombre del enalce
+label.pdb_file = Fichero PDB
+label.colour_with_jmol = Colorear con Jmol
+label.align_structures = Alinear estructuras
+label.jmol = Jmol
+label.sort_alignment_by_tree = Ordenar alineamiento por árbol
+label.mark_unlinked_leaves = Marcar las hojas como no enlazadas
+label.associate_leaves_with = Asociar hojas con
+label.save_colour_scheme_with_unique_name_added_to_colour_menu = Guarde el esquema cromáticos con un nombre único y se añadirá al menú de colores
+label.case_sensitive = Sensible a mayúsculas
+label.lower_case_colour = Color para las minúsculas
+label.index_by_host = Indizar por host
+label.index_by_type = Indizar por tipo
+label.enable_jabaws_services = Habilitar servicios JABAWS
+label.display_warnings = Mostrar advertencias
+label.move_url_up = Mover la URL hacia arriba
+label.move_url_down = Mover la URL hacia abajo
+label.add_sbrs_definition = Añadir una definición SBRS 
+label.edit_sbrs_definition = Editar una definición SBRS 
+label.delete_sbrs_definition = Borrar una definición SBRS 
+label.your_sequences_have_been_verified = Sus secuencias has sido verificadas en una base de datos de secuencias conocidas. Algunos de sus ID se han alterado y\n, probablemente, el residuo de inicio/fin se haya actualizado.\nGuarde su alineamiento para mantener el ID actualizado.\n\n 
+label.sequence_names_updated = Nombres de secuencia actualizados
+label.dbref_search_completed = Búsqueda de DBRef terminada
+label.show_all_chains = Mostrar todas las cadenas
+label.fetch_all_param = Recuperar todas {0}
+label.paste_new_window = Pegar en una nueva ventana
+label.settings_for_param = Configuración para {0}
+label.view_params = Visualizar {0}
+label.select_all_views = Seleccionar todas las vistas
+label.align_sequences_to_existing_alignment = Alinear las secuencias con el alineamiento existente
+label.realign_with_params = Realinear con {0}
+label.calcname_with_default_settings = {0} por defecto
+label.action_with_default_settings = {0} con la configuración por defecto
+label.edit_settings_and_run = Editar la configuración y ejecutar...
+label.view_and_change_parameters_before_alignment = Ver y cambiar los parámetros antes del alineamiento
+label.run_with_preset_params = Ejecutar {0} con preconfiguración
+label.view_and_change_parameters_before_running_calculation = Ver y cambiar los parámetros antes de lanzar el cálculo
+label.view_documentation = Ver documentación
+label.select_return_type = Seleccionar el tipo de retorno
+label.translation_of_params = Traducción de {0}
+label.features_for_params = Características de - {0}
+label.annotations_for_params = Anotaciones de - {0}
+label.generating_features_for_params = Generando características de - {0}
+label.generating_annotations_for_params = Generando anotaciones de - {0}
+label.varna_params = VARNA - {0}
+label.sequence_feature_settings = Configuración de las características de la secuencia
+label.pairwise_aligned_sequences = Secuencias alineadas a pares
+label.original_data_for_params = Datos originales de {0}
+label.points_for_params = Puntos de {0}
+label.transformed_points_for_params = Puntos transformados de {0}
+label.graduated_color_for_params = Color graduado para la característica de {0}
+label.select_backgroud_colour = Seleccionar color de fondo
+label.invalid_font = Fuente no válida
+label.separate_multiple_accession_ids = Separar los accession id con un punto y coma ";"
+label.replace_commas_semicolons = Cambiar comas por puntos y comas
+label.parsing_failed_syntax_errors_shown_below_param = Parseo erróneo. A continuación, se muestras los errores de sintaxis {0}
+label.parsing_failed_unrecoverable_exception_thrown_param = \nParseo err\u00F3neo. Se ha lanzado una excepci\u00F3n fatal\:\n {0}
+label.example_query_param = Consulta de ejemplo: {0}
+label.enter_value_increase_conservation_visibility = Introduzca un valor para incrementar la visibilidad de la conservación
+label.enter_percentage_identity_above_which_colour_residues = Introduza un % de identidad por encima del cual se colorearán los residuos
+label.wswublast_client_credits = Para mostrar las caracter\u00EDsticas de una secuencia, debe indicarse un id de Uniprot cuya secuencia se corresponda al 100 % con la introducida.\nPara mostrar estas caracter\u00EDsticas, prueba a cambar los nombre de sus secuencia con los ID que se sugieren a continuaci\u00F3n.\n\nRunning WSWUBlast at EBI.\nPlease quote Pillai S., Silventoinen V., Kallio K., Senger M., Sobhany S., Tate J., Velankar S., Golovin A., Henrick K., Rice P., Stoehr P., Lopez R.\nSOAP-based services provided by the European Bioinformatics Institute.\nNucleic Acids Res. 33(1)\:W25-W28 (2005));
+label.blasting_for_unidentified_sequence = Ejecutar BLAST para la secuencias sin identificar
+label.select_columns_containing = Seleccione las columnas que contengan
+label.select_columns_not_containing = Seleccione las columnas que no contengan
+option.trim_retrieved_seqs = Ajustar las secuencias recuperadas
+label.trim_retrieved_sequences = Cuando la secuencia de referencia es más larga que la secuencia con la que está trabajando, sólo se mantienen las subsecuencias relevantes.
+label.use_sequence_id_1 = Utilice $SEQUENCE_ID$ o $SEQUENCE_ID=/<regex>/=$
+label.use_sequence_id_2 = \nto para embeber el id de la secuencia en una URL
+label.ws_parameters_for = Parámetros para {0}
+label.switch_server = Cambiar servidor
+label.open_jabaws_web_page = Abra el página principal del servidor JABAWS en un navegador web
+label.choose_jabaws_server = Escoja un servidor para ejecutar este servicio
+label.services_at = Servicios en {0}
+label.rest_client_submit = {0} utilizando {1}
+label.fetch_retrieve_from =Recuperar de {0}
+label.fetch_retrieve_from_all_sources = Recuperar de todas las fuentes {0} en {1}<br>La primera es :{2}
+label.feature_settings_click_drag = Haga clic o arrastre los tipos de las características hacia arriba o hacia abajo para cambiar el orden de visualización.<br/>Haga doble clic para seleccionar las columnas que contienen las características del alineamiento/selección actual.<br/>Presionando Alt seleccionará las columnas exteriores a las características en lugar de las interiores<br/>Presione Shift para modificar la selección actual (en lugar de borrarla)<br/>Presione CTRL o Command/Meta para cambiar las columans externas o internas a las características<br/>
+label.opt_and_params_further_details = ver los detalles adicionales haciendo clic en el botón derecho
+label.opt_and_params_show_brief_desc_image_link = Haga clic para ver una descripción breve<br><img src="{0}"/>Haga clic en el botón derecho para obtener información adicional.
+label.opt_and_params_show_brief_desc = Haga clic para ver una descripción breve<br>
+label.adjusts_width_generated_eps_png = Ajusta la anchura del fichero EPS o PNG generado para asegurar incluso que el ID de la secuencia más larga o las etiquetas de anotación se muestran
+label.manually_specify_width_left_column = Especificar manualmente la anchura de la columna izquierda en las etiquetas de los ID de la secuencia y las anotaciones se mostrar en las figuras del alineamiento exportado.Esta configuraicón se ignorará si está marcada la opción 'Establecer automáticamente al anchura del ID'
+label.job_created_when_checked = Cuando está habilitado, se crea un trabajo para cada secuencia de la selección actual
+label.when_checked_job_visible_region_and_results = Cuando está habilitado, se crea un único trabajo para la región visible y los resultados de mapean en su ubicación dentro del alineamiento. En caso contrario, se creará un trabajo para cada región visible y contigua en el alineamiento o selección actual (p.e. un alineamiento múlitple).</html>
+label.flat_file_representation = La representación del fichero plano de este servicio utilizando el formalismo Really Simple Bioinformatics Service</html>
+label.result_of_parsing_rsbs = Resultados de parsear la representación RSBS</html>
+label.user_preset = Preselección de usuario
+label.service_preset = Preselección del servicio
+label.run_with_preset = Ejecutar {0} con preselección
+label.view_service_doc_url = Visualizar <a href="{0}">{1}</a></html>
+label.submit_sequence = Enviar {0} {1} {2} {3} a<br/>{4}</html>
+action.by_title_param = por {0}
+label.alignment = Alineamiento
+label.secondary_structure_prediction = Predicción de la estructura secundaria
+label.sequence_database_search = Búsqueda en base de datos de secuencias
+label.analysis = Análisis
+label.protein_disorder = Desorden en la proteína 
+label.source_from_db_source = Fuentes de {0}
+label.from_msname = de {0}
+label.superpose_with = Superponer con...
+action.do = Hacer
+label.scale_label_to_column = Ajustar la etiqueta a la columna
+label.add_new_row = Añadir nuevo fila
+label.edit_label_description = Editar etiqueta/descripción
+label.hide_row = Ocultar esta fila
+label.delete_row = Borrar esta fila
+label.show_all_hidden_rows = Mostrar todas las filas ocultas
+label.export_annotation = Exportar anotación
+label.copy_consensus_sequence = Copiar secuencia de consenso
+label.helix = Hélice
+label.sheet = Hoja
+label.rna_helix = Hélice de ARN
+label.remove_annotation = Borrar anotación
+label.colour_by = Colorear por...
+label.muscle_multiple_protein_sequence_alignment = Alineamiento múltiple de secuencias de proteínas con Muscle
+label.mafft_multiple_sequence_alignment = Alineamiento múltiple de secuencias con MAFFT
+label.clustalw_multiple_sequence_alignment = Alineamiento múltiple de secuencias con ClustalW
+label.jnet_secondary_structure_prediction = Predicción de la estructura secundaria con JNet
+label.multiharmony = Multi-Harmony
+label.unable_start_web_service_analysis = No es posible iniciar el servicio web de análisis
+label.job_couldnt_be_started_check_input = El trabajo no puede arrancarse. Por favor, compruebe los parámetros de entrada y los mensajes de advertencia de la consola de Jalview.
+label.prompt_each_time = Preguntar siempre
+label.use_source = Fuente
+label.couldnt_save_project = No es posible guardar el proyecto
+label.error_whilst_saving_current_state_to = Error mientras se guardaba el estado a {0}
+label.error_whilst_loading_project_from = Error cargando el proyecto desde  {0}
+label.couldnt_load_project = No es posible cargar el proyecto
+label.pca_sequences_not_aligned = Las secuencias deben estar alineadas antes de calcular el PCA.\nPruebe a utilizar la funci\u00F3n de rellenar huecos en el men\u00FA Editar,\no cualquiera de los servicios web de alineamiento m\u00FAltiple.
+label.invalid_name_preset_exists = Nombre no válido - esta preconfiguración ya existe.
+label.invalid_name = Nombre no válido
+label.set_proxy_settings = Por favor, configure su proxy en la pestaña 'Conexiones' de la ventana de Preferencia
+label.proxy_authorization_failed = Autorización del proxy fallida
+label.internal_jalview_error = Error interno de Jalview
+label.secondary_structure_prediction_service_couldnt_be_located = No se ha podido encontrar el Servicio de Predicciónd de la Estructura Secudaria {0} en {1}.
+label.service_called_is_not_msa_service = El Servicio llamado \n{0}\nno es un \nServicio de Alineamiento M\u00FAltiple de Secuencias\!
+label.msa_service_is_unknown = El Servicio de Alineamiento Múltiple llamado {0} es desconocido
+label.service_called_is_not_seq_search_service = El Servicio llamando \n{0}\nno es un \nServicio de B\u00FAsqueda de Secuencias\!
+label.seq_search_service_is_unknown = El Servicio de Búsqueda de Sencuencias llamado {0} es desconocido
+label.feature_type = Tipo de característisca
+label.display = Representación
+label.service_url = URL del servicio
+label.copied_sequences = Secuencias copiadas
+label.cut_sequences = Cortar secuencias
+label.conservation_colour_increment = Incremento de Conservación del Color ({0})
+label.percentage_identity_thereshold = Umbral del Porcentaje de Identidad ({0})
+label.error_unsupported_owwner_user_colour_scheme = Propietario no soportado para el diálogo del Esquema Cromático del Usuario
+label.save_alignment_to_file = Guardar Alineamiento en fichero
+label.save_features_to_file = Guardar Características en un fichero
+label.save_annotation_to_file = Guardar Anotación en un fichero
+label.no_features_on_alignment = No se han encontrado características en el alineamiento
+label.save_pdb_file = Guardar fichero PDB 
+label.save_text_to_file = Guardar Texto en un fichero
+label.save_state = Guardar estado
+label.restore_state = Restaurar estado
+label.saving_jalview_project = Guardando el proyecto de Jalview {0}
+label.loading_jalview_project = Cargando el proyecto de Jalview {0}
+label.save_vamsas_document_archive = Guardar el archivo de documento Vamsas
+label.saving_vamsas_doc = Guardando el documento VAMSAS en {0}
+label.load_feature_colours = Cargar colores de características
+label.save_feature_colours = Guardar esquema cromático de características
+label.dataset_for = {0} conjunto de datos para {1}
+label.select_startup_file = Seleccionar fichero de arranque
+label.select_default_browser = Seleccionar navegador web por defecto
+label.save_tree_as_newick = Guardar árbol como fichero newick
+label.create_eps_from_tree = Crear un fichero EPS a partir de un árbol
+label.create_png_from_tree = Crear una imagen PNG a partir de un árbol
+label.save_colour_scheme = Guardar esquema cromático
+label.edit_params_for = Editar los parámetros de {0}
+label.choose_filename_for_param_file = Escoja un nombre de fichero para este fichero de parámetros
+label.save_as_html = Guardar como HTML
+label.recently_opened = Abiertos recientemente
+label.blasting_for_unidentified_sequence_jobs_running = Ejecutando BLAST de las secuencias no indentificadas - {0}  trabajos en marcha.
+label.tree_from = Árbol de {0}
+label.webservice_job_title = {0} usando {1}
+label.select_visible_region_of = seleccionada {0} región de {1}
+label.visible = Visible
+label.select_unselect_visible_regions_from = seleccionada y deseleccionadas {0} regiones de {1}
+label.visible_region_of = región visible de
+label.webservice_job_title_on = {0} usando {1} de {2}
+label.updating_vamsas_session = Actualizando sesión VAMSAS
+label.loading_file = Cargando fichero: {0}
+label.edit_params = Editar {0}
+error.not_implemented = No implementado
+error.no_such_method_as_clone1_for = No existe ese método como un clone1 de {0}
+error.null_from_clone1 = Nulo de clone1!
+error.implementation_error_sortbyfeature = Error de implementación - sortByFeature debe ser uno de FEATURE_SCORE, FEATURE_LABEL o FEATURE_DENSITY.
+error.not_yet_implemented = No se ha implementado todavía
+error.unknown_type_dna_or_pep = Tipo desconocido {0} - dna o pep son los únicos valores permitidos
+error.implementation_error_dont_know_thereshold_annotationcolourgradient = Error de implementación: no se conoce el valor umbral para el AnnotationColourGradient actual.
+error.implementation_error_embeddedpopup_not_null = Error de implementación - embeddedPopup debe ser no nulo.
+error.invalid_colour_for_mycheckbox = Color no válido para MyCheckBox
+error.implementation_error_unrecognised_render_object_for_features_type = Error de implementación: no se reconoce el objeto de representación {0} para las características de tipo {1}
+error.implementation_error_unsupported_feature_colour_object = Error de implementación: objeto de color de características no soportado.
+error.invalid_separator_parameter = Separador de parámetros no válido - debe tener longitud mayor que cero
+error.alignment_cigararray_not_implemented = Alignment(CigarArray) no se ha implementado todavía
+error.weak_sequencei_equivalence_not_yet_implemented = Equivalencia débil sequenceI no se ha implementado todavía.
+error.implementation_error_can_only_make_alignmnet_from_cigararray = Error de implementación - sólo se puede construir un vista de alineamiento a partir de una CigarArray de secuencias.
+error.empty_view_cannot_be_updated = una vista vacía no se puede actualizar.
+error.mismatch_between_number_of_sequences_in_block = No hay coincidencia entre el número de secuencias en el bloque {0} ({1}) y la vista original ({2})
+error.padding_not_yet_implemented = El relleno no se ha implementado todavía
+error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view = No hay coincidencia entre los bloques visibles para actualizar y el número de contigs en la vista (contigs=0,blocks={0})
+error.unknown_seq_cigar_operation = Operación SeqCigar {0} desconocida
+error.implementation_bug_parse_cigar_string = Bug de implementación en parseCigarString
+error.implementation_error_invalid_operation_string = Error de implementación. Cadena de operación no válida.
+error.invalid_range_string = Rango de la cadena no válido (debe ser cero o un número positivo)
+error.implementation_error_delete_range_out_of_bounds = Error de implementación: deleteRange fuera de rango: el comienzo debe ser cero o positivo y menor que el final.
+error.implementation_error = Error de implementación
+error.implementation_error_unknown_operation = ¡Error de implementación! Operación desconocida {0}
+error.implementation_error_unexpected_null_from_get_sequence_and_deletions = Error de implementación - valor nulo no esperado en getSequenceAndDeletions
+error.implementation_error_set_seq_null = Error de implementación - _setSeq(null,...)
+error.implementation_error_s = Error de implementación: _s= {0}
+error.implementation_error_seqcigar_possible = SeqCigar: posible error de implementación: la secuencia es más larga de el conjunto de datos de la secuencia
+error.implmentation_bug_seq_null = Bug de implementación. Seq nula
+error.implementation_bug_cigar_operation_list_range_list = Bug de implementación: Cigar Operation list!= range list
+error.not_yet_implemented_cigar_object_from_cigar_string = No implementado todavía: construcción de un objeto Cigar desde una cadena y una secuencia con huecos.
+error.implementation_bug_cigar_operation = Bug de implementación. La operación Cigar {0} {1} no es ni {2}, ni {3} ni {4}.
+error.implementation_error_for_new_cigar = Error de implementación en new Cigar(SequenceI)
+error.implementation_error_cigar_seq_no_operations = Error de implementación: la {0}a secuencia Cigar no tiene operaciones.
+error.implementation_error_jmol_getting_data = Error de implementación - Jmol parece estar todavía intentando recuperar sus datos - informe de ello en http://issues.jalview.org/browse/JAL-1016
+error.implementation_error_no_pdbentry_from_index = Error de implementación - no existe la correspondiente entrada pdb (para el índice {0}) para añadir el mapeo de secuencias a
+error.jmol_version_not_compatible_with_jalview_version = La versión {0} de Jmol no es compatible con esta versión de Jalview. Informe de este problema en http://issues.jalview.org
+error.not_implemented_remove = Borrar: no implementado
+error.not_implemented_clone = Clonar: no implementado
+error.implementation_error_chimera_getting_data = Error de implementación - Chimera parece estar todavía intentando recuperar sus datos - informe de ello en http://issues.jalview.org/browse/JAL-1016
+error.call_setprogressbar_before_registering_handler = llamada a setProgressBar antes de registrar el manejador de la barra de estado
+label.cancelled_params = {0} cancelado
+error.implementation_error_cannot_show_view_alignment_frame = Error de implementación: no es posible mostrar una vista de otro alineamiento en un AlignFrame.
+error.implementation_error_dont_know_about_thereshold_setting = Error de implementación: no se conoce la configuración del umbral para el AnnotationColourGradient actual.
+error.eps_generation_not_implemented = La generación de EPS no se ha implementado todavía
+error.png_generation_not_implemented = La generación de PNG no se ha implementado todavía
+error.try_join_vamsas_session_another = Tratando de establecer una sesión VAMSAS cuando ya había otra conectada
+error.invalid_vamsas_session_id = Identificador de sesión VAMSAS no válido
+error.implementation_error_cannot_create_groovyshell = Error de implementación:no se puede crear groovyShell sin Groovy en el classpath
+label.groovy_support_failed = El soporte Groovy de Jalview ha fallado
+label.couldnt_create_groovy_shell = No es posible crear el shell de Groovy. Compruebe el fichero de log para conocer los detalles.
+error.unsupported_version_calcIdparam = Versión no soportada de {0}
+error.implementation_error_cant_reorder_tree = Error de implementación: no es posible reordenar este árbol. No DefaultMutableTreeNode.
+error.invalid_value_for_option = Valor no válido de {0} para la opción {1}
+error.implementation_error_cannot_import_vamsas_doc = Error de implementación - todavía no es posible importar el documento VAMSAS existente en una sesión existente.
+label.vamsas_doc_couldnt_be_opened_as_new_session = El documento VAMSAS no ha podido abrirse como una nueva sesión. Por favor, escoja otra.
+error.implementation_error_vamsas_operation_not_init = ¡Error de implementación! Operaciones VAMSAS cuando el cliente no estaba inicializado ni conectado
+error.jalview_no_connected_vamsas_session = Jalview está conectado a una sesión VAMSAS
+error.implementation_error_cannot_recover_vamsas_object_mappings = Error de implementación: no es posible recuperar los mapeos del objeto VAMSAS - no se ha hecho ningún backup 
+error.setstatus_called_non_existent_job_pane = se lllamado a setStatus para el panel de trabajo {0} no existente
+error.implementation_error_cannot_find_marshaller_for_param_set =Error de implementación: no puede encontrar un marshaller para el conjunto de parámetros
+error.implementation_error_old_jalview_object_not_bound =Error de implementación: ¡el objeto Jalview antiguo no está enlazado! ({0})
+error.implementation_error_vamsas_doc_class_should_bind_to_type = Error de implementación: la clase de documento VAMSAS {0} debe enlazar a {1} (pero se ha encontrado que lo está a {2})
+error.implementation_error_jalview_class_should_bind_to_type = Error de implementación: la clase Jalview {0} debe enlazar a {1} (pero se ha encontrado que lo está a {2})
+error.invalid_vamsas_rangetype_cannot_resolve_lists = RangeType VAMSAS no válido - ¡no es posible resolver ambas listas de Pos y Seg con los valores elegidos!
+error.implementation_error_maplist_is_null = Error de implementación. MapList es nulo en initMapType.
+error.implementation_error_cannot_have_null_alignment = Error de implementación: no es posible tener una clave nula en el alineamiento
+error.implementation_error_null_fileparse = Error de implementación. FileParse nulo en el construictor de copia
+error.implementation_error_cannot_map_alignment_sequences = Error de implementación: no es posible maper un alineamiento de secuencias desde distintos conjuntos de datos en un único alineamiento en el documento VAMSAS.
+error.implementation_error_cannot_duplicate_colour_scheme = Error grave de implementación: no es posible duplicar el esquema cromático {0}
+error.implementation_error_structure_selection_manager_null = Error de implementación. El contexto structure selection manager's es nulo
+exception.ssm_context_is_null = El contexto SSM es nulo
+error.idstring_seqstrings_only_one_per_sequence = idstrings y seqstrings contienen una cadena por cada secuencia
+error.cannot_have_mixed_length_replacement_vectors = No es posible tener vectores de reemplazo de distinta longitud. El vector de reemplazo para {0} es de {1} cadenas de largo, pero se ha considerado ya como un vector de longitud {2}.
+error.cannot_have_zero_length_vector_replacement_strings = No es posible tener un vector de cadenas de reemplazo de longitud cero - debe ser uno o n.
+error.implementation_error_multiple_single_sequence_prediction_jobs_not_supported = ¡Error de implementación! Todavía no se soportan varios trabajos de predicción asociados a una única secuencia.
+error.implementation_error_invalid_msa_index_for_job = ¡Error de implementación! Valor msaIndex no válido para JPredJob en el objeto de entrada MSA padre!
+error.implementation_error_startjob_called = Error de implementación - StartJob(JpredJob) invocado en {0}
+error.multiple_jnet_subjob_merge_not_implemented = Todavía no se han implementado varios subtrabajos JNet conjuntos.
+label.job_never_ran = El trabajo nunca se ejecutó - entrada devuelta al usuario.
+error.implementation_error_minlen_must_be_greater_zero = Error de implementación: minlen debe ser cero o más
+error.implementation_error_msawbjob_called = Error de implementación - StartJob(MsaWSJob) invocado en un WSJobInstance {0}
+error.implementation_error_cannot_attach_ws_menu_entry = Error de implementación: ¡no es posible adjunto una WS Menu Entry sin una referencia a un manejador del servicio!
+error.parameter_migration_not_implemented_yet = La migración de parámetros no se ha implementado todavía
+error.implementation_error_cannot_set_jaba_option = Error de implementación: no es posible establecer el valor de Jaba Option a un valor fuera de su rango permitido
+error.implementation_error_valuetype_doesnt_support_jabaws_type = Error de implementación: jalview.ws.params.ValueConstrainI.ValueType no soporta el tipo JABAWS: {0}
+error.cannot_create_jabaws_param_set = No es posible crear un JabaWSParamSet con parámetros no JabaWS
+error.cannot_set_arguments_to_jabaws_param_set = No es posible establecer argumentos en JabaWSParamSet que no sean argumentos JabaWS 
+error.implementation_error_runner_config_not_available = Error de implementación: Runner Config no está disponible para un servicio JABAWS de tipo  {0} ({1})
+error.implementation_error_cannot_handle_jaba_param = Error de implementación: no es posible manejar el objeto del parámetro Jaba {0}
+error.implementation_error_attempt_to_delete_service_preset = Error de implementación: intento de borrar un servicio preestablecido
+error.implementation_error_cannot_locate_oldname_presetname = Error de implementación: no es posible localizar ni el nombre antiguo ({0}) ni el presetName ({1} en el almacén de datos.
+error.implementation_error_jabaws_param_set_only_handled_by = Error de implementación: JabaWsParamSets sólo puede ser manejado por JabaParamStore
+error.cannot_set_source_file_for = No es posible establecer el fichero fuente para {0}
+error.mismatch_service_instance_preset = Posible desajuste entre la instancia del servicio y la prestablecida
+error.cannot_set_params_for_ws_preset = No es posible establecer los parámetros para el servicio web JABA presestablecido
+error.implementation_error_can_only_instantiate_jaba_param_sets = Error de implementación: sólo se puede instanciar conjuntos de parámetros Jaba
+error.no_aacon_service_found = No se ha encontrado ningún servicio AACon 
+error.implementation_error_couldnt_copy_value_constraint = Error de implementación: ¡no se puede copiar ValueConstrain!
+error.couldnt_encode_as_utf8 = No se ha podido codificar {0} como UTF-8.
+error.tree_inputtype_not_yet_implemented = No se ha implementado todavía el árbol como InputType
+error.implementation_error_need_to_have_httpresponse = Error de implementación: se necesita tener un HttpResponse que procesar
+error.dbrefsource_implementation_exception = Excepción de implementación DBRefSource
+error.implementation_error_dbinstance_must_implement_interface = Error de Implementación- getDbInstances debe recibir una clase que implemente jalview.ws.seqfetcher.DbSourceProxy (recibió {0})
+error.implementation_error_must_init_dbsources =Error de implementación. Debe inicializar dbSources
+label.view_controller_toggled_marked = {0} {1} columnas {2} conteniendo características del tipo  {3} en {4} secuencia(s)
+label.toggled = Invertida
+label.marked = Marcada
+label.not = no
+label.no_feature_of_type_found = No se han encontrado características del tipo {0}.
+label.submission_params = Envío {0}
+label.empty_alignment_job = Trabajo de alineamiento vacío
+label.add_new_sbrs_service = Añadir un nuevo SBRS
+label.edit_sbrs_entry = Editar entrada SBRS
+label.pca_recalculating = Recalculando PCA
+label.pca_calculating = Calculando PCA
+label.select_foreground_colour = Escoger color del primer plano
+label.select_colour_for_text = Seleccione el color del texto
+label.adjunst_foreground_text_colour_thereshold = Ajustar el umbral del color del texto en primer plano
+label.select_subtree_colour = Seleccioanr el color del sub-árbol
+label.create_new_sequence_features = Crear nueva(s) característica(s) de secuencia
+label.amend_delete_features = Arrelgar/Borrar características de {0}
+exception.out_of_bounds_for_file = Fuera de rango para el fichero: i={0}, Buffer final: i0={1} iend={2}
+exception.null_string_given_to_regex_search = Cadena nula enviada a Regex.search
+exception.null_string_like_given_to_regex_search = StringLike nula enviada a Regex.search
+exception.null_string_given_to_regex_reverse_search = Cadena nula enviada a Regex.reverseSearch
+exception.null_string_like_given_to_regex_reverse_search = StringLike nula enviada a Regex.reverseSearch
+exception.null_string_like_given_to_regex_search_from = Cadena nula enviada a Regex.searchFrom
+exception.null_string_like_given_to_regex_search_region = Cadena nula enviada a  Regex.searchRegion
+exception.replace_null_regex_pointer = Reemplazador tiene un puntero Regex nulo
+exception.bad_pattern_to_regex_perl_code = patrón erróneo en Regex.perlCode: {0}
+exception.no_stub_implementation_for_interface = No existe una implementación del stub para la interfaz: {0}
+exception.cannot_set_endpoint_address_unknown_port = No es posible estabelcer la dirección de punto final para el puerto desconocido {0}
+exception.querying_matching_opening_parenthesis_for_non_closing_parenthesis = Consultando la coincidencia de apertura de paréntesis para paréntesis sin cerrar (?)
+exception.mismatched_unseen_closing_char = Discordancia (no vista) en el carácter de cierre {0}
+exception.mismatched_closing_char = Carácter de cierre discordante {0}
+exception.mismatched_opening_char = Carácter de apertura discordante {0} en {1}
+exception.invalid_datasource_couldnt_obtain_reader = Fuente de datos no válida. No es posible obtener el Reader
+exception.index_value_not_in_range = {0}: el valor del índice {1} en se encuentra en el rango [0..{2}]
+exception.unterminated_cigar_string = Cadena cigar sin terminar
+exception.unexpected_operation_cigar_string_pos = Operación no esperada {0} en una cadena cigar (posición {1} en {2})
+exception.couldnt_parse_responde_from_annotated3d_server = No es posible parsear la respuesta procedente del servidor Annotate3d 
+exception.application_test_npe = Prueba de aplicación: lanzando un NullPointerException que debe aparecer en la consola
+exception.overwriting_vamsas_id_binding = Sobreescribiendo la asociación al VAMSAS id
+exception.overwriting_jalview_id_binding = Sobreescribiendo la asociación al Jalview id
+error.implementation_error_unknown_file_format_string = Error de implementación: cadena de formato de fichero desconocido
+exception.failed_to_resolve_gzip_stream = Fallo al resolver el flujo GZIP 
+exception.problem_opening_file_also_tried = Problema abriendo {0} (también se intentó {1}) : {2}
+exception.problem_opening_file = Problema abriendo {0} : {1}
+exception.failed_to_read_data_from_source = Error al leer datos de la fuente: {0}
+exception.no_init_source_stream = Flujo de fuente sin inicializar
+exception.invalid_source_stream = Flujo de fuente no válida: {0}
+error.implementation_error_reset_called_for_invalid_source = Error de implementación: se ha invocado un Reset en una fuente no válida.
+exception.number_of_residues_in_query_sequence_differ_from_prediction = El n\u00FAmero de residuos en la supuesta secuencia consultada {0} ({1}\n{2})\ndifiere del n\u00FAmero de sitios de predicci\u00F3n en la predicci\u00F3n ({3})
+label.mapped = mapeado
+exception.jpredconcide_entry_has_unexpected_number_of_columns = JPredConcise: La entrada ({0}) tiene un número inesperado de columnas
+exception.couldnt_parse_concise_annotation_for_prediction = No es posible parsear la anotaci\u00F3n concisa para el perfil de predicci\u00F3n.\n{0}
+exception.newfile = Fichero Newick\: {0}\n
+label.no_tree_read_in = No hay lectura de árbol en
+exception.rnaml_couldnt_access_datasource = No ha sido posible acceder la fuente de datos ({0})
+exception.ranml_couldnt_process_data = No ha sido posible procesar los datos como un fichero RNAML ({0})
+exception.ranml_invalid_file = Fichero RNAML no válido ({0})
+exception.ranml_problem_parsing_data = Problema parseando los datos como RNAML ({0})
+exception.pfam_no_sequences_found = No se han encontrado secuencias (entrada PFAM)
+exception.stockholm_invalid_format = Este fichero no es tiene un formato STOCKHOLM válido: la primera línea no contiene '# STOCKHOLM'
+exception.couldnt_parse_sequence_line = No es posible parse la línea de secuencia: {0}
+exception.error_parsing_line = Error parseando {0}
+exception.unknown_annotation_detected = Anotación desconocida detectada: {0} {1}
+exception.couldnt_store_sequence_mappings = No es posible almacenar los mapeos de secuencia para {0}
+exception.matrix_too_many_iteration = Demasiadas iteraciones en {0} (el máximo es {1})
+exception.browser_not_found = Excepción al buscar el navegador: {0}
+exception.browser_unable_to_locate = Imposible encontrar el navegador: {0}
+exception.invocation_target_exception_creating_aedesc = InvocationTargetException mientras se creaba AEDesc: {0}
+exception.illegal_access_building_apple_evt= IllegalAccessException mientras se construía AppleEvent: {0}
+exception.instantiation_creating_aedesc = InstantiationException mientras se creaba AEDesc: {0}
+exception.unable_to_launch_url = Imposible lanzar la URL: {0}
+exception.unable_to_create_internet_config = Imposible crear una instancia de configuración de Internet: {0}
+exception.invocation_target_calling_url = InvocationTargetException mientras se invocaba openURL: {0}
+exception.illegal_access_calling_url = IllegalAccessException mientras se invocaba openURL: {0}
+exception.interrupted_launching_browser = InterruptedException mientras se lanzaba el navegador: {0}
+exception.das_source_doesnt_support_sequence_command = La fuente {0} no soporta el comando sequence.
+exception.invalid_das_source = Fuente DAS no válida: {0}
+exception.ebiembl_retrieval_failed_on = La recuperación de datos EBI EMBL XML ha fallado en {0}:{1}
+label.no_embl_record_found = # No se ha recuperado ningún registro EMBL de {0}:{1}
+label.embl_successfully_parsed = # Se han parseado con éxito las consultas {0} en un alineamiento
+exception.no_pdb_records_for_chain = No se han encontrado registros {0} para la cadena {1}
+exception.unexpected_handling_rnaml_translation_for_pdb = Excepcion inesperada cuando se traducían a RNAML los datos PDB
+exception.couldnt_recover_sequence_properties_for_alignment = No es posible recuperar las propiedades de la secuencia para el alineamiento
+exception.unknown_format_for_file = Formato desconocido {0} para el fichero \: \n{1}
+label.remove_gaps = Eliminar huecos
+exception.couldnt_recover_sequence_props_for_jnet_query = No ha sido posible recuperar las propiedades de la secuencia para la secuencia JNet Query!
+exception.server_timeout_try_later = Tiempo de conexi\u00F3n ha expirado - int\u00E9ntelo de nuevo m\u00E1s tarde\n
+exception.web_service_returned_null_try_later= El servidor {0} ha devuelto un objeto nulo, por lo que probablemente no se haya podido contactar con él. Inténtelo de nuevo más tarde.
+exception.cannot_contact_service_endpoint_at = No es posible contactar por el punto de acceso al servicio en {0}
+error.implementation_error_cannot_find_service_url_in_given_set = Error de implementación: no es posible encontrar la URL del servicio en el conjunto de URL proporcionado
+error.implementation_error_cannot_find_service_url_in_given_set_param_store = Error de implementación: la URL del servicio en el conjunto de URL  para este almacén de parámetros del servicio({0})
+exception.jobsubmission_invalid_params_set = Conjunto de parámetros no válido. Comprueba la implementación de Jalview
+exception.notvaliddata_group_contains_less_than_min_seqs = El grupo contiene menos de {0} secuencias.
+exception.outofmemory_loading_pdb_file = Sin menoria al cargar el fichero PDB
+exception.eps_coudnt_write_output_file = No es posible escribir el fichero de salida: {0}
+exception.eps_method_not_supported = Método actualmente no suportado por la versión {0} de EpsGraphics2D
+exception.eps_unable_to_get_inverse_matrix = Imposible obtener la inversa de la matrix: {0}
+warn.job_cannot_be_cancelled_close_window = Este trabajo no se puede cancelar.\nSimplemente, cierre la ventana.
+warn.service_not_supported = ¡Servicio no soportado!
+warn.input_is_too_big = ¡El tamaño de la entrada es demasiado grande!
+warn.invalid_job_param_set = ¡Conjunto de parámetros del trabajo no válido!
+info.job_couldnt_be_run_server_doesnt_support_program = No es posible ejecutar el trabajo porque el servidor no soporta este programa.\n{0}
+info.job_couldnt_be_run_exceeded_hard_limit = No es posible ejecutar el trabajo porque excede los l\u00EDmites del servidor.\n{0}
+info.job_couldnt_be_run_incorrect_param_setting = No es posible ejecutar el trabjao porque el servidor no soporta algunos de los par\u00E1metros.\n{0}\nPor favor, aseg\u00FArese de que ha usado los par\u00E1metros adecuados para este servicio\n
+info.no_jobs_ran = No se ha ejecutado ningún trabajo
+info.failed_to_submit_prediction = Error al enviar la predicci\u00F3n\:\n{0} {1}
+info.invalid_jnet_job_result_data ={0}\n{1}\nResultados del trabajo JNet no v\u00E1lidos\!\n{2}
+info.failed_to_submit_sequences_for_alignment = Error al enviar la secuencias para el alineamiento.\nLo m\u00E1s probable es que haya un problema en el servidor.\nSimplemente, cierre la ventana\n
+info.alignment_object_method_notes = \nNotas sobre los m\u00E9todos del objeto alineamiento\n
+info.server_exception = \n{0} Excepci\u00F3n del servidor\!\n{1}
+status.processing_commandline_args = Procesando los argumentos de la línea de comandos...
+status.das_features_being_retrived = Recuperando características DAS...
+status.searching_for_sequences_from = Buscando secuencias en {0}
+status.finished_searching_for_sequences_from = Finalizada la búsqueda de secuencias en {0}
+label.eps_file = Fichero EPS
+label.png_image = Imagen PNG
+status.saving_file = Guardando {0}
+status.export_complete = Exportación completada.
+status.fetching_pdb = Recuperando PDB {0}
+status.refreshing_news = Refrescando noticias
+status.importing_vamsas_session_from = Importando sesión VAMSAS de {0}
+status.opening_params = Abriendo {0}
+status.waiting_sequence_database_fetchers_init = Esperando la inicialización de los recuperadores de bases de datos de secuencias
+status.init_sequence_database_fetchers = Inicializando recuperadores de bases de datos de secuencias
+status.fetching_sequence_queries_from = Recuperando {0} consultas de secuencias de {1}
+status.finshed_querying = Consulta finalizada
+status.parsing_results = Parseando resultados.
+status.processing = Procesando...
+status.refreshing_web_service_menus = Refrescando los menús de servicios web
+status.collecting_job_results = Recolectando los resultados de los trabajos.
+status.fetching_das_sequence_features = Recuperando las características DAS de las secuencias
+status.no_das_sources_active = No existe ninguna fuente DAS activa
+status.das_feature_fetching_cancelled = Recuperación de características DAS cancelada
+status.das_feature_fetching_complete = Recuperación de características DAS completada
+status.fetching_db_refs = Recuperando db refs
+label.font_doesnt_have_letters_defined = La fuente no tiene letras definidas\npor lo que no puede emplease\ncon datos de alineamientos
+label.error_loading_file_params = Error cargando el fichero {0}
+label.error_loading_jalview_file = Error cargando el fichero Jalview 
+warn.out_of_memory_when_action = Sin memoria al {0}\!\!\nConsulte los ficheros de ayuda para ajustar la memoria de la m\u00E1quina virtual de Java.
+warn.out_of_memory_loading_file = Sin memoria al cargar el fichero {0}\!\!\nConsulte los ficheros de ayuda para ajustar la memoria de la m\u00E1quina virtual de Java.
+label.out_of_memory = Sin memoria
+label.invalid_id_column_width = Identificador de anchura de columna no válido
+warn.user_defined_width_requirements = La anchura definida por el usuario para la \nlas columnas de anotaci\u00F3n e identificador de secuencias\nen figuras exportadas debe ser\na, al menos, de 12 p\u00EDxels
+label.couldnt_create_sequence_fetcher = No es posible crear SequenceFetcher
+warn.couldnt_create_sequence_fetcher_client = No es posible crear el cliente de recuperador de secuencias. Comprueba el fichero de log para más detalles.
+warn.server_didnt_pass_validation = El servicio no ha pasado la validaci\u00F3n.\nCompruebe la consola de Jalview para m\u00E1s detalles.
+warn.url_must_contain = La URL de la secuencia debe contener $SEQUENCE_ID$ o un regex $SEQUENCE_ID=/<regex>/=$
+info.validate_jabaws_server = \u00BFValidar el servidor JabaWS?\n(Consulte la consola de salida para obtener los resultados)
+label.test_server = ¿Probar servidor?
+info.you_want_jalview_to_find_uniprot_accessions = \u00BFDesea que Jalview encuentre\nUniprot Accession ids para los nombres de secuencias dados?
+label.find_uniprot_accession_ids = Buscar Uniprot Accession Ids
+label.new_sequence_fetcher = Añadir recuperador de secuencias
+label.additional_sequence_fetcher = Recuperador de secuencia adicional
+label.select_database_retrieval_source = Seleccionar fuente de recuperación de bases de datos
+label.overwrite_existing_file = ¿Sobreescribir el fichero existente?
+label.file_already_exists = El fichero existe
+label.edit_jabaws_url = Editar JABAWS URL
+label.add_jabaws_url = Añadir nueva JABAWS URL
+label.news_from_jalview = Noticias de http://www.jalview.org
+label.cut_paste_alignmen_file = Cortar & Pegar fichero de alineamiento
+label.enter_redundancy_thereshold = Introducir el umbral de redundancia
+label.select_dark_light_set_thereshold = <i>Seleccionar un color oscuro y un color claro para el texto y establecer el umbral en que<br>cambiar entre colores, basándose en el color de fondo</i>
+label.select_feature_colour = Seleccionar color de las características
+label.ignore_gaps_consensus = Ignorar huecos en el consenso
+label.show_group_histogram = Mostrar histograma de grupo
+label.show_group_logo = Mostrar logo de grupo
+label.normalise_group_logo = Normalizar el logo de grupo
+label.show_histogram = Mostrar histograma
+label.show_logo = Mostrar logo
+label.normalise_logo = Normalizar logo
+label.no_colour_selection_in_scheme = Por favor, seleccione un color antes de aplicar el esquema cromático
 label.no_colour_selection_warn = Error guardando el esquema cromático
\ No newline at end of file
index c9301e8..6055a5b 100755 (executable)
  */
 package MCview;
 
-import java.util.*;
-
-import java.awt.*;
-
-import jalview.analysis.*;
-import jalview.datamodel.*;
-import jalview.schemes.*;
+import jalview.analysis.AlignSeq;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.schemes.ResidueProperties;
 import jalview.structure.StructureMapping;
 
+import java.awt.Color;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Vector;
+
 public class PDBChain
 {
   /**
@@ -187,7 +192,9 @@ public class PDBChain
                 + ((tx.getStatus() == null || tx.getStatus().length() == 0) ? ""
                         : ":" + tx.getStatus()));
         if (tx.begin != 0 && tx.end != 0)
+        {
           sq.addSequenceFeature(tx);
+        }
       }
     }
     return features;
@@ -275,7 +282,7 @@ public class PDBChain
       // remains the same as the first atom's resNumber (res)
       while ((resNumber == res) && (i < atoms.size()))
       {
-        resAtoms.addElement((Atom) atoms.elementAt(i));
+        resAtoms.addElement(atoms.elementAt(i));
         i++;
 
         if (i < atoms.size())
@@ -364,7 +371,9 @@ public class PDBChain
     {
       annots[i] = (Annotation) resAnnotation.elementAt(i);
       if (annots[i].value > max)
+      {
         max = annots[i].value;
+      }
       resAnnotation.setElementAt(null, i);
     }
     AlignmentAnnotation tfactorann = new AlignmentAnnotation(
@@ -496,7 +505,7 @@ public class PDBChain
       {
         int prn = mapping.getPDBResNum(k + 1);
 
-        an[k] = new Annotation((float) prn);
+        an[k] = new Annotation(prn);
         if (min == -1)
         {
           min = k;
@@ -516,7 +525,8 @@ public class PDBChain
       }
       sq.addAlignmentAnnotation(new AlignmentAnnotation("PDB.RESNUM",
               "PDB Residue Numbering for " + this.pdbid + ":" + this.id,
-              an, (float) min, (float) max, AlignmentAnnotation.LINE_GRAPH));
+              an, min, max, AlignmentAnnotation.LINE_GRAPH));
+
     }
   }
 }
index b4cb80c..a297892 100755 (executable)
@@ -81,7 +81,7 @@ public class PDBViewer extends JInternalFrame implements Runnable
       try
       {
         tmpPDBFile = pdbentry.getFile();
-        PDBfile pdbfile = new PDBfile(tmpPDBFile,
+        PDBfile pdbfile = new PDBfile(false,false,tmpPDBFile,
                 jalview.io.AppletFormatAdapter.FILE);
 
         pdbcanvas.init(pdbentry, seq, chains, ap, protocol);
index 7f5c427..a99f172 100755 (executable)
  */
 package MCview;
 
-import java.io.*;
-import java.util.*;
-
-import java.awt.*;
-
 import jalview.analysis.AlignSeq;
-import jalview.datamodel.*;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
 import jalview.io.FileParse;
 import jalview.util.MessageManager;
 
+import java.awt.Color;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Vector;
+
 public class PDBfile extends jalview.io.AlignFile
 {
   public Vector chains;
@@ -41,14 +46,33 @@ public class PDBfile extends jalview.io.AlignFile
    */
   boolean VisibleChainAnnotation = false;
 
-  public PDBfile(String inFile, String inType) throws IOException
+  boolean processSecondaryStructure=true;
+  
+
+  public PDBfile(boolean visibleChainAnnotation,
+          boolean processSecondaryStructure)
   {
-    super(inFile, inType);
+    super();
+    VisibleChainAnnotation = visibleChainAnnotation;
+    this.processSecondaryStructure = processSecondaryStructure;
   }
 
-  public PDBfile(FileParse source) throws IOException
+  public PDBfile(boolean visibleChainAnnotation,
+          boolean processSecondaryStructure, String file, String protocol) throws IOException
   {
-    super(source);
+    super(false, file, protocol);
+    VisibleChainAnnotation = visibleChainAnnotation;
+    this.processSecondaryStructure = processSecondaryStructure;
+    doParse();
+  }
+
+  public PDBfile(boolean visibleChainAnnotation,
+          boolean processSecondaryStructure, FileParse source) throws IOException
+  {
+    super(false, source);
+    VisibleChainAnnotation = visibleChainAnnotation;
+    this.processSecondaryStructure = processSecondaryStructure;
+    doParse();
   }
 
   public String print()
@@ -196,13 +220,15 @@ public class PDBfile extends jalview.io.AlignFile
         {
           for (int ai = 0; ai < chainannot.length; ai++)
           {
-
             chainannot[ai].visible = VisibleChainAnnotation;
             annotations.addElement(chainannot[ai]);
           }
         }
       }
+      if (processSecondaryStructure)
+      {
       if (rna.size() > 0)
+      {
         try
         {
           processPdbFileWithAnnotate3d(rna);
@@ -213,31 +239,22 @@ public class PDBfile extends jalview.io.AlignFile
           x.printStackTrace();
 
         }
+      }
       ;
       if (prot.size() > 0)
+      {
         try
         {
           processPdbFileWithJmol(prot);
         } catch (Exception x)
         {
           System.err
-                  .println("Exceptions when dealing with RNA in pdb file");
-          x.printStackTrace();
-
-        }
-      ;
-      if (prot.size() > 0)
-        try
-        {
-          processPdbFileWithJmol(prot);
-        } catch (Exception x)
-        {
-          System.err
-                  .println("Exceptions when dealing with RNA in pdb file");
+                  .println("Exceptions from Jmol when processing data in pdb file");
           x.printStackTrace();
 
         }
-      ;
+      }
+      }
     } catch (OutOfMemoryError er)
     {
       System.out.println("OUT OF MEMORY LOADING PDB FILE");
@@ -252,8 +269,48 @@ public class PDBfile extends jalview.io.AlignFile
         System.err.println(line);
       }
     }
+    markCalcIds();
   }
 
+  private static String calcIdPrefix = "JalviewPDB:";
+
+  public static boolean isCalcIdHandled(String calcId)
+  {
+    return calcId != null
+            && (calcId.startsWith(calcIdPrefix) && calcId.indexOf(
+                    calcIdPrefix,
+            calcIdPrefix.length() + 1) > -1);
+  }
+  public static boolean isCalcIdForFile(String calcId, String pdbFile)
+  {
+    return (calcId != null && calcId.startsWith(calcIdPrefix + pdbFile
+            + ":" + calcIdPrefix));
+  }
+
+  public static String relocateCalcId(String calcId,
+          Hashtable<String, String> alreadyLoadedPDB) throws Exception
+  {
+    int s = calcIdPrefix.length(), end = calcId.indexOf(calcIdPrefix, s);
+    String between = calcId.substring(s, end - 1);
+    return calcIdPrefix + alreadyLoadedPDB.get(between) + ":"
+            + calcId.substring(end);
+  }
+
+  private void markCalcIds()
+  {
+    for (SequenceI sq : seqs)
+    {
+      for (AlignmentAnnotation aa : sq.getAnnotation())
+      {
+        String oldId = aa.getCalcId();
+        if (oldId == null)
+        {
+          oldId = "";
+        }
+        aa.setCalcId("JalviewPDB:" + id + ":JalviewPDB:" + oldId);
+      }
+    }
+  }
   private void processPdbFileWithJmol(ArrayList<SequenceI> prot)
           throws Exception
   {
@@ -270,7 +327,18 @@ public class PDBfile extends jalview.io.AlignFile
                 {}).invoke(jmf));
         cl.getMethod("addAnnotations", new Class[]
         { Alignment.class }).invoke(jmf, al);
-        replaceMatchingSeqsWith(prot, al, AlignSeq.PEP);
+        for (SequenceI sq : al.getSequences())
+        {
+          if (sq.getDatasetSequence() != null)
+          {
+            sq.getDatasetSequence().getPDBId().clear();
+          }
+          else
+          {
+            sq.getPDBId().clear();
+          }
+        }
+        AlignSeq.replaceMatchingSeqsWith(seqs, annotations, prot, al, AlignSeq.PEP, false);
       }
     } catch (ClassNotFoundException q)
     {
@@ -298,86 +366,24 @@ public class PDBfile extends jalview.io.AlignFile
                 new Class[]
                 { FileParse.class }).invoke(annotate3d, new Object[]
         { new FileParse(getDataName(), type) }));
-        replaceMatchingSeqsWith(rna, al, AlignSeq.DNA);
-      }
-    } catch (ClassNotFoundException x)
-    {
-      // ignore classnotfounds - occurs in applet
-    }
-    ;
-  }
-
-  /**
-   * matches ochains against al and populates seqs with the best match between
-   * each ochain and the set in al
-   * 
-   * @param ochains
-   * @param al
-   * @param dnaOrProtein
-   */
-  private void replaceMatchingSeqsWith(ArrayList<SequenceI> ochains,
-          AlignmentI al, String dnaOrProtein)
-  {
-    if (al != null && al.getHeight() > 0)
-    {
-      ArrayList<SequenceI> matches = new ArrayList<SequenceI>();
-      ArrayList<AlignSeq> aligns = new ArrayList<AlignSeq>();
-
-      for (SequenceI sq : ochains)
-      {
-        SequenceI bestm = null;
-        AlignSeq bestaseq = null;
-        int bestscore = 0;
-        for (SequenceI msq : al.getSequences())
-        {
-          AlignSeq aseq = AlignSeq.doGlobalNWAlignment(msq, sq,
-                  dnaOrProtein);
-          if (bestm == null || aseq.getMaxScore() > bestscore)
-          {
-            bestscore = aseq.getMaxScore();
-            bestaseq = aseq;
-            bestm = msq;
-          }
-        }
-        System.out.println("Best Score for " + (matches.size() + 1) + " :"
-                + bestscore);
-        matches.add(bestm);
-        aligns.add(bestaseq);
-        al.deleteSequence(bestm);
-      }
-      for (int p = 0, pSize = seqs.size(); p < pSize; p++)
-      {
-        SequenceI sq, sp = seqs.get(p);
-        int q;
-        if ((q = ochains.indexOf(sp)) > -1)
+        for (SequenceI sq : al.getSequences())
         {
-          seqs.set(p, sq = matches.get(q));
-          sq.setName(sp.getName());
-          sq.setDescription(sp.getDescription());
-          sq.transferAnnotation(sp, aligns.get(q).getMappingFromS1(false));
-          int inspos = -1;
-          for (int ap = 0; ap < annotations.size();)
+          if (sq.getDatasetSequence() != null)
           {
-            if (((AlignmentAnnotation) annotations.get(ap)).sequenceRef == sp)
-            {
-              if (inspos == -1)
-              {
-                inspos = ap;
-              }
-              annotations.remove(ap);
-            }
-            else
-            {
-              ap++;
-            }
+            sq.getDatasetSequence().getPDBId().clear();
           }
-          if (sq.getAnnotation() != null)
+          else
           {
-            annotations.addAll(inspos, Arrays.asList(sq.getAnnotation()));
+            sq.getPDBId().clear();
           }
         }
+        AlignSeq.replaceMatchingSeqsWith(seqs, annotations, rna, al, AlignSeq.DNA, false);
       }
+    } catch (ClassNotFoundException x)
+    {
+      // ignore classnotfounds - occurs in applet
     }
+    ;
   }
 
   /**
@@ -446,7 +452,7 @@ public class PDBfile extends jalview.io.AlignFile
     for (int i = 0; i < chains.size(); i++)
     {
       ((PDBChain) chains.elementAt(i)).setChainColours(Color.getHSBColor(
-              1.0f / (float) i, .4f, 1.0f));
+              1.0f / i, .4f, 1.0f));
     }
   }
 
index 4460985..f5afa9c 100755 (executable)
  */
 package jalview.analysis;
 
-import java.util.*;
-
-import java.awt.*;
-
-import jalview.datamodel.*;
-import jalview.schemes.*;
-import jalview.util.*;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Mapping;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+import jalview.schemes.ResidueProperties;
+import jalview.schemes.ScoreMatrix;
+import jalview.util.Comparison;
+import jalview.util.Format;
+import jalview.util.MapList;
+import jalview.util.MessageManager;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.StringTokenizer;
 
 /**
  * 
@@ -270,6 +281,34 @@ public class AlignSeq
   }
 
   /**
+   * 
+   * @return aligned instance of Seq 1
+   */
+  public SequenceI getAlignedSeq1()
+  {
+    SequenceI alSeq1 = new Sequence(s1.getName(), getAStr1());
+    alSeq1.setStart(s1.getStart() + getSeq1Start() - 1);
+    alSeq1.setEnd(s1.getStart() + getSeq1End() - 1);
+    alSeq1.setDatasetSequence(s1.getDatasetSequence() == null ? s1 : s1
+            .getDatasetSequence());
+    return alSeq1;
+  }
+
+  /**
+   * 
+   * @return aligned instance of Seq 2
+   */
+  public SequenceI getAlignedSeq2()
+  {
+    SequenceI alSeq2 = new Sequence(s2.getName(), getAStr2());
+    alSeq2.setStart(s2.getStart() + getSeq2Start() - 1);
+    alSeq2.setEnd(s2.getStart() + getSeq2End() - 1);
+    alSeq2.setDatasetSequence(s2.getDatasetSequence() == null ? s2 : s2
+            .getDatasetSequence());
+    return alSeq2;
+  }
+
+  /**
    * Construct score matrix for sequences with standard DNA or PEPTIDE matrix
    * 
    * @param s1
@@ -614,7 +653,7 @@ public class AlignSeq
       output = output.append("\n\n");
     }
 
-    pid = pid / (float) (aseq1.length - count) * 100;
+    pid = pid / (aseq1.length - count) * 100;
     output = output.append(new Format("Percentage ID = %2.2f\n\n")
             .form(pid));
 
@@ -1024,6 +1063,88 @@ public class AlignSeq
   }
 
   /**
+   * matches ochains against al and populates seqs with the best match between
+   * each ochain and the set in al
+   * 
+   * @param ochains
+   * @param al
+   * @param dnaOrProtein
+   * @param removeOldAnnots when true, old annotation is cleared before new annotation transferred
+   */
+  public static void replaceMatchingSeqsWith(List<SequenceI> seqs, List<AlignmentAnnotation> annotations, List<SequenceI> ochains,
+          AlignmentI al, String dnaOrProtein, boolean removeOldAnnots)
+  {
+    if (al != null && al.getHeight() > 0)
+    {
+      ArrayList<SequenceI> matches = new ArrayList<SequenceI>();
+      ArrayList<AlignSeq> aligns = new ArrayList<AlignSeq>();
+  
+      for (SequenceI sq : ochains)
+      {
+        SequenceI bestm = null;
+        AlignSeq bestaseq = null;
+        int bestscore = 0;
+        for (SequenceI msq : al.getSequences())
+        {
+          AlignSeq aseq = doGlobalNWAlignment(msq, sq,
+                  dnaOrProtein);
+          if (bestm == null || aseq.getMaxScore() > bestscore)
+          {
+            bestscore = aseq.getMaxScore();
+            bestaseq = aseq;
+            bestm = msq;
+          }
+        }
+        System.out.println("Best Score for " + (matches.size() + 1) + " :"
+                + bestscore);
+        matches.add(bestm);
+        aligns.add(bestaseq);
+        al.deleteSequence(bestm);
+      }
+      for (int p = 0, pSize = seqs.size(); p < pSize; p++)
+      {
+        SequenceI sq, sp = seqs.get(p);
+        int q;
+        if ((q = ochains.indexOf(sp)) > -1)
+        {
+          seqs.set(p, sq = matches.get(q));
+          sq.setName(sp.getName());
+          sq.setDescription(sp.getDescription());
+          Mapping sp2sq;
+          sq.transferAnnotation(sp, sp2sq = aligns.get(q).getMappingFromS1(false));
+          int inspos = -1;
+          for (int ap = 0; ap < annotations.size();)
+          {
+            if (annotations.get(ap).sequenceRef == sp)
+            {
+              if (inspos == -1)
+              {
+                inspos = ap;
+              }
+              if (removeOldAnnots) {
+                annotations.remove(ap);
+              } else {
+                AlignmentAnnotation alan = annotations.remove(ap);
+                alan.liftOver(sq, sp2sq);
+                alan.setSequenceRef(sq);
+                sq.addAlignmentAnnotation(alan);
+              }
+            }
+            else
+            {
+              ap++;
+            }
+          }
+          if (sq.getAnnotation() != null)
+          {
+            annotations.addAll(inspos, Arrays.asList(sq.getAnnotation()));
+          }
+        }
+      }
+    }
+  }
+
+  /**
    * compute the PID vector used by the redundancy filter.
    * 
    * @param originalSequences
diff --git a/src/jalview/analysis/AlignmentAnnotationUtils.java b/src/jalview/analysis/AlignmentAnnotationUtils.java
new file mode 100644 (file)
index 0000000..b5f77fd
--- /dev/null
@@ -0,0 +1,206 @@
+package jalview.analysis;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.SequenceI;
+import jalview.renderer.AnnotationRenderer;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class AlignmentAnnotationUtils
+{
+
+  /**
+   * Helper method to populate lists of annotation types for the Show/Hide
+   * Annotations menus. If sequenceGroup is not null, this is restricted to
+   * annotations which are associated with sequences in the selection group.
+   * <p/>
+   * If an annotation row is currently visible, its type (label) is added (once
+   * only per type), to the shownTypes list. If it is currently hidden, it is
+   * added to the hiddenTypesList.
+   * <p/>
+   * For rows that belong to a line graph group, so are always rendered
+   * together:
+   * <ul>
+   * <li>Treat all rows in the group as visible, if at least one of them is</li>
+   * <li>Build a list of all the annotation types that belong to the group</li>
+   * </ul>
+   * 
+   * @param shownTypes
+   *          a map, keyed by calcId (annotation source), whose entries are the
+   *          lists of annotation types found for the calcId; each annotation
+   *          type in turn may be a list (in the case of grouped annotations)
+   * @param hiddenTypes
+   *          a map, similar to shownTypes, but for hidden annotation types
+   * @param annotations
+   *          the annotations on the alignment to scan
+   * @param forSequences
+   *          the sequences to restrict search to
+   */
+  public static void getShownHiddenTypes(
+          Map<String, List<List<String>>> shownTypes,
+          Map<String, List<List<String>>> hiddenTypes,
+          List<AlignmentAnnotation> annotations,
+          List<SequenceI> forSequences)
+  {
+    BitSet visibleGraphGroups = AlignmentAnnotationUtils
+            .getVisibleLineGraphGroups(annotations);
+
+    /*
+     * Build a lookup, by calcId (annotation source), of all annotation types in
+     * each graph group.
+     */
+    Map<String, Map<Integer, List<String>>> groupLabels = new HashMap<String, Map<Integer, List<String>>>();
+
+    // trackers for which calcId!label combinations we have dealt with
+    List<String> addedToShown = new ArrayList<String>();
+    List<String> addedToHidden = new ArrayList<String>();
+
+    for (AlignmentAnnotation aa : annotations)
+    {
+      if (forSequences != null
+              && (aa.sequenceRef != null && forSequences
+                      .contains(aa.sequenceRef)))
+      {
+        String calcId = aa.getCalcId();
+
+        /*
+         * Build a 'composite label' for types in line graph groups.
+         */
+        final List<String> labelAsList = new ArrayList<String>();
+        final String displayLabel = aa.label;
+        labelAsList.add(displayLabel);
+        if (aa.graph == AlignmentAnnotation.LINE_GRAPH
+                && aa.graphGroup > -1)
+        {
+          if (!groupLabels.containsKey(calcId))
+          {
+            groupLabels.put(calcId, new HashMap<Integer, List<String>>());
+          }
+          Map<Integer, List<String>> groupLabelsForCalcId = groupLabels
+                  .get(calcId);
+          if (groupLabelsForCalcId.containsKey(aa.graphGroup))
+          {
+            if (!groupLabelsForCalcId.get(aa.graphGroup).contains(
+                    displayLabel))
+            {
+              groupLabelsForCalcId.get(aa.graphGroup).add(displayLabel);
+            }
+          }
+          else
+          {
+            groupLabelsForCalcId.put(aa.graphGroup, labelAsList);
+          }
+        }
+        else
+        /*
+         * 'Simple case' - not a grouped annotation type - list of one label
+         * only
+         */
+        {
+          String rememberAs = calcId + "!" + displayLabel;
+          if (aa.visible && !addedToShown.contains(rememberAs))
+          {
+            if (!shownTypes.containsKey(calcId))
+            {
+              shownTypes.put(calcId, new ArrayList<List<String>>());
+            }
+            shownTypes.get(calcId).add(labelAsList);
+            addedToShown.add(rememberAs);
+          }
+          else
+          {
+            if (!aa.visible && !addedToHidden.contains(rememberAs))
+            {
+              if (!hiddenTypes.containsKey(calcId))
+              {
+                hiddenTypes.put(calcId, new ArrayList<List<String>>());
+              }
+              hiddenTypes.get(calcId).add(labelAsList);
+              addedToHidden.add(rememberAs);
+            }
+          }
+        }
+      }
+    }
+    /*
+     * finally add the 'composite group labels' to the appropriate lists,
+     * depending on whether the group is identified as visible or hidden
+     */
+    for (String calcId : groupLabels.keySet())
+    {
+      for (int group : groupLabels.get(calcId).keySet())
+      {
+        final List<String> groupLabel = groupLabels.get(calcId).get(group);
+        if (visibleGraphGroups.get(group))
+        {
+          if (!shownTypes.containsKey(calcId))
+          {
+            shownTypes.put(calcId, new ArrayList<List<String>>());
+          }
+          shownTypes.get(calcId).add(groupLabel);
+        }
+        else
+        {
+          if (!hiddenTypes.containsKey(calcId))
+          {
+            hiddenTypes.put(calcId, new ArrayList<List<String>>());
+          }
+          hiddenTypes.get(calcId).add(groupLabel);
+        }
+      }
+    }
+  }
+
+  /**
+   * Returns a BitSet (possibly empty) of those graphGroups for line graph
+   * annotations, which have at least one member annotation row marked visible.
+   * <p/>
+   * Only one row in each visible group is marked visible, but when it is drawn,
+   * so are all the other rows in the same group.
+   * <p/>
+   * This lookup set allows us to check whether rows apparently marked not
+   * visible are in fact shown.
+   * 
+   * @see AnnotationRenderer#drawComponent
+   * @param annotations
+   * @return
+   */
+  public static BitSet getVisibleLineGraphGroups(
+          List<AlignmentAnnotation> annotations)
+  {
+    BitSet result = new BitSet();
+    for (AlignmentAnnotation ann : annotations)
+    {
+      if (ann.graph == AlignmentAnnotation.LINE_GRAPH && ann.visible)
+      {
+        int gg = ann.graphGroup;
+        if (gg > -1)
+        {
+          result.set(gg);
+        }
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Converts an array of AlignmentAnnotation into a List of
+   * AlignmentAnnotation. A null array is converted to an empty list.
+   * 
+   * @param anns
+   * @return
+   */
+  public static List<AlignmentAnnotation> asList(
+          AlignmentAnnotation[] anns)
+  {
+    // TODO use AlignmentAnnotationI instead when it exists
+    return (anns == null ? Collections.<AlignmentAnnotation> emptyList()
+            : Arrays.asList(anns));
+  }
+}
index 5e75725..b2d4f0f 100755 (executable)
@@ -22,7 +22,12 @@ package jalview.datamodel;
 
 import jalview.util.MessageManager;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
 
 /**
  * Data structure to hold and manipulate a multiple sequence alignment
index 601339a..c0d911e 100755 (executable)
@@ -22,14 +22,12 @@ package jalview.datamodel;
 
 import jalview.analysis.Rna;
 import jalview.analysis.SecStrConsensus.SimpleBP;
-
 import jalview.analysis.WUSSParseException;
 
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
-
-import fr.orsay.lri.varna.models.rna.RNA;
+import java.util.Map.Entry;
 
 /**
  * DOCUMENT ME!
@@ -105,7 +103,7 @@ public class AlignmentAnnotation
     // System.out.println("featuregroup " + _rnasecstr[0].getFeatureGroup());
   }
 
-  public java.util.Hashtable sequenceMapping;
+  public java.util.Hashtable<Integer, Annotation> sequenceMapping;
 
   /** DOCUMENT ME!! */
   public float graphMin;
@@ -259,7 +257,8 @@ public class AlignmentAnnotation
       // Check for RNA secondary structure
       {
         // System.out.println(annotations[i].secondaryStructure);
-        // TODO: 2.8.2 should this ss symbol validation check be a function in RNA/ResidueProperties ?
+        // TODO: 2.8.2 should this ss symbol validation check be a function in
+        // RNA/ResidueProperties ?
         if (annotations[i].secondaryStructure == '('
                 || annotations[i].secondaryStructure == '['
                 || annotations[i].secondaryStructure == '<'
@@ -602,7 +601,9 @@ public class AlignmentAnnotation
   {
     this.label = new String(annotation.label);
     if (annotation.description != null)
+    {
       this.description = new String(annotation.description);
+    }
     this.graphMin = annotation.graphMin;
     this.graphMax = annotation.graphMax;
     this.graph = annotation.graph;
@@ -657,7 +658,7 @@ public class AlignmentAnnotation
           {
             // could optimise this!
             p = (Integer) pos.nextElement();
-            Annotation a = (Annotation) annotation.sequenceMapping.get(p);
+            Annotation a = annotation.sequenceMapping.get(p);
             if (a == null)
             {
               continue;
@@ -700,13 +701,21 @@ public class AlignmentAnnotation
       return;
     }
     if (startRes < 0)
+    {
       startRes = 0;
+    }
     if (startRes >= annotations.length)
+    {
       startRes = annotations.length - 1;
+    }
     if (endRes >= annotations.length)
+    {
       endRes = annotations.length - 1;
+    }
     if (annotations == null)
+    {
       return;
+    }
     Annotation[] temp = new Annotation[endRes - startRes + 1];
     if (startRes < annotations.length)
     {
@@ -868,7 +877,9 @@ public class AlignmentAnnotation
   public void adjustForAlignment()
   {
     if (sequenceRef == null)
+    {
       return;
+    }
 
     if (annotations == null)
     {
@@ -894,7 +905,7 @@ public class AlignmentAnnotation
       {
         position = sequenceRef.findIndex(a) - 1;
 
-        temp[position] = (Annotation) sequenceMapping.get(index);
+        temp[position] = sequenceMapping.get(index);
       }
     }
 
@@ -915,8 +926,10 @@ public class AlignmentAnnotation
       if (annotations[i] == null)
       {
         if (i + 1 < iSize)
+        {
           System.arraycopy(annotations, i + 1, annotations, i, iSize - i
                   - 1);
+        }
         iSize--;
       }
       else
@@ -947,10 +960,14 @@ public class AlignmentAnnotation
     {
       if (sequenceRef != null)
       {
+        boolean rIsDs=sequenceRef.getDatasetSequence()==null,tIsDs=sequenceI.getDatasetSequence()==null;
         if (sequenceRef != sequenceI
-                && !sequenceRef.equals(sequenceI)
-                && sequenceRef.getDatasetSequence() != sequenceI
+                && (rIsDs && !tIsDs && sequenceRef != sequenceI
+                        .getDatasetSequence())
+                && (!rIsDs && tIsDs && sequenceRef.getDatasetSequence() != sequenceI)
+                && (!rIsDs && !tIsDs && sequenceRef.getDatasetSequence() != sequenceI
                         .getDatasetSequence())
+                && !sequenceRef.equals(sequenceI))
         {
           // if sequenceRef isn't intersecting with sequenceI
           // throw away old mapping and reconstruct.
@@ -1050,11 +1067,15 @@ public class AlignmentAnnotation
       for (int i = 0; i < annotations.length; i++)
       {
         if (annotations[i] == null)
+        {
           annotations[i] = new Annotation(String.valueOf(gapchar), null,
                   ' ', 0f, null);
+        }
         else if (annotations[i].displayCharacter == null
                 || annotations[i].displayCharacter.equals(" "))
+        {
           annotations[i].displayCharacter = String.valueOf(gapchar);
+        }
       }
     }
   }
@@ -1117,4 +1138,50 @@ public class AlignmentAnnotation
   {
     return isrna;
   }
+
+  /**
+   * transfer annotation to the given sequence using the given mapping from the
+   * current positions or an existing sequence mapping
+   * 
+   * @param sq
+   * @param sp2sq
+   *          map involving sq as To or From
+   */
+  public void liftOver(SequenceI sq, Mapping sp2sq)
+  {
+    if (sp2sq.getMappedWidth() != sp2sq.getWidth())
+    {
+      // TODO: employ getWord/MappedWord to transfer annotation between cDNA and Protein reference frames
+      throw new Error("liftOver currently not implemented for transfer of annotation between different types of seqeunce");
+    }
+    boolean mapIsTo = (sp2sq != null) ? (sp2sq.getTo() == sq || sp2sq
+            .getTo() == sq.getDatasetSequence()) : false;
+
+    // TODO build a better annotation element map and get rid of annotations[]
+    Hashtable<Integer, Annotation> mapForsq = new Hashtable();
+    if (sequenceMapping != null)
+    {
+      if (sp2sq != null)
+      {
+        for (Entry<Integer, Annotation> ie : sequenceMapping.entrySet())
+        {
+          Integer mpos = Integer.valueOf(mapIsTo ? sp2sq
+                  .getMappedPosition(ie.getKey()) : sp2sq.getPosition(ie
+                  .getKey()));
+          if (mpos >= sq.getStart() && mpos <= sq.getEnd())
+          {
+            mapForsq.put(mpos, ie.getValue());
+          }
+        }
+        sequenceMapping = mapForsq;
+        sequenceRef = sq;
+        adjustForAlignment();
+      }
+      else
+      {
+        // trim positions
+      }
+    }
+
+  }
 }
index d141697..c7e30a4 100755 (executable)
@@ -20,7 +20,9 @@
  */
 package jalview.datamodel;
 
-import java.util.*;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Data structure to hold and manipulate a multiple sequence alignment
index a17881e..c0f9ab4 100755 (executable)
@@ -20,8 +20,6 @@
  */
 package jalview.datamodel;
 
-import jalview.util.MessageManager;
-
 import java.util.*;
 
 public class AlignmentOrder
@@ -219,7 +217,7 @@ public class AlignmentOrder
       {
         if (!identity)
         {
-          throw new Error(MessageManager.getString("error.weak_sequencei_equivalence_not_yet_implemented"));
+          throw new Error("Weak sequenceI equivalence not yet implemented.");
         }
         else
         {
@@ -286,7 +284,7 @@ public class AlignmentOrder
         }
         if (!identity)
         {
-          throw new Error(MessageManager.getString("error.weak_sequencei_equivalence_not_yet_implemented"));
+          throw new Error("Weak sequenceI equivalence not yet implemented.");
         }
         else
         {
index 945a9d4..68bf8f2 100755 (executable)
@@ -22,7 +22,9 @@ package jalview.datamodel;
 
 import jalview.analysis.AlignSeq;
 
+import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.Vector;
 
 import fr.orsay.lri.varna.models.rna.RNA;
@@ -491,7 +493,9 @@ public class Sequence implements SequenceI
   public char[] getSequence(int start, int end)
   {
     if (start < 0)
+    {
       start = 0;
+    }
     // JBPNote - left to user to pad the result here (TODO:Decide on this
     // policy)
     if (start >= sequence.length)
@@ -901,7 +905,7 @@ public class Sequence implements SequenceI
     AlignmentAnnotation[] ret = new AlignmentAnnotation[annotation.size()];
     for (int r = 0; r < ret.length; r++)
     {
-      ret[r] = (AlignmentAnnotation) annotation.elementAt(r);
+      ret[r] = annotation.elementAt(r);
     }
 
     return ret;
@@ -926,7 +930,9 @@ public class Sequence implements SequenceI
     {
       this.annotation.removeElement(annotation);
       if (this.annotation.size() == 0)
+      {
         this.annotation = null;
+      }
     }
   }
 
@@ -1038,7 +1044,9 @@ public class Sequence implements SequenceI
       for (int i = 0; i < annotations.length; i++)
       {
         if (annotations[i] != null)
+        {
           addAlignmentAnnotation(annotations[i]);
+        }
       }
     }
   }
@@ -1235,4 +1243,28 @@ public class Sequence implements SequenceI
     return rna;
   }
 
+  /**
+   * Returns a (possibly empty) list of any annotations that match on given
+   * calcId (source) and label (type). Null values do not match.
+   * 
+   * @param calcId
+   * @param label
+   */
+  @Override
+  public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+          String label)
+  {
+    List<AlignmentAnnotation> result = new ArrayList<AlignmentAnnotation>();
+    if (this.annotation != null) {
+      for (AlignmentAnnotation ann : annotation) {
+        if (ann.calcId != null && ann.calcId.equals(calcId)
+                && ann.label != null && ann.label.equals(label))
+        {
+          result.add(ann);
+        }
+      }
+    }
+    return result;
+  }
+
 }
index b4cb3b1..17348c2 100755 (executable)
  */
 package jalview.datamodel;
 
-import java.util.*;
+import jalview.analysis.AAFrequency;
+import jalview.analysis.Conservation;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ResidueProperties;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Hashtable;
 import java.util.List;
-
-import java.awt.*;
-
-import jalview.analysis.*;
-import jalview.schemes.*;
+import java.util.Map;
+import java.util.Vector;
 
 /**
  * Collects a set contiguous ranges on a set of sequences
@@ -289,11 +294,13 @@ public class SequenceGroup implements AnnotatedCollectionI
     return eres;
   }
 
+  @Override
   public List<SequenceI> getSequences()
   {
     return sequences;
   }
 
+  @Override
   public List<SequenceI> getSequences(
           Map<SequenceI, SequenceCollectionI> hiddenReps)
   {
@@ -307,7 +314,7 @@ public class SequenceGroup implements AnnotatedCollectionI
       SequenceI seq;
       for (int i = 0; i < sequences.size(); i++)
       {
-        seq = (SequenceI) sequences.elementAt(i);
+        seq = sequences.elementAt(i);
         allSequences.addElement(seq);
         if (hiddenReps.containsKey(seq))
         {
@@ -635,6 +642,7 @@ public class SequenceGroup implements AnnotatedCollectionI
    * 
    * @return the first column selected by this group. Runs from 0<=i<N_cols
    */
+  @Override
   public int getStartRes()
   {
     return startRes;
@@ -644,6 +652,7 @@ public class SequenceGroup implements AnnotatedCollectionI
    * 
    * @return the groups last selected column. Runs from 0<=i<N_cols
    */
+  @Override
   public int getEndRes()
   {
     return endRes;
@@ -689,7 +698,7 @@ public class SequenceGroup implements AnnotatedCollectionI
    */
   public SequenceI getSequenceAt(int i)
   {
-    return (SequenceI) sequences.elementAt(i);
+    return sequences.elementAt(i);
   }
 
   /**
@@ -760,17 +769,18 @@ public class SequenceGroup implements AnnotatedCollectionI
    * 
    * @return DOCUMENT ME!
    */
+  @Override
   public int getWidth()
   {
     // MC This needs to get reset when characters are inserted and deleted
     if (sequences.size() > 0)
     {
-      width = ((SequenceI) sequences.elementAt(0)).getLength();
+      width = sequences.elementAt(0).getLength();
     }
 
     for (int i = 1; i < sequences.size(); i++)
     {
-      SequenceI seq = (SequenceI) sequences.elementAt(i);
+      SequenceI seq = sequences.elementAt(i);
 
       if (seq.getLength() > width)
       {
@@ -1211,7 +1221,7 @@ public class SequenceGroup implements AnnotatedCollectionI
     // TODO add in other methods like 'getAlignmentAnnotation(String label),
     // etc'
     ArrayList<AlignmentAnnotation> annot = new ArrayList<AlignmentAnnotation>();
-    for (SequenceI seq : (Vector<SequenceI>) sequences)
+    for (SequenceI seq : sequences)
     {
       AlignmentAnnotation[] aa = seq.getAnnotation();
       if (aa != null)
@@ -1250,6 +1260,27 @@ public class SequenceGroup implements AnnotatedCollectionI
     return aa;
   }
 
+  /**
+   * Answer true if any annotation matches the calcId passed in (if not null).
+   * 
+   * @param calcId
+   * @return
+   */
+  public boolean hasAnnotation(String calcId)
+  {
+    if (calcId != null && !"".equals(calcId))
+    {
+      for (AlignmentAnnotation a : getAlignmentAnnotation())
+      {
+        if (a.getCalcId() == calcId)
+        {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
   public void clear()
   {
     sequences.clear();
index b10a4d4..876db03 100755 (executable)
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)\r
- * Copyright (C) 2014 The Jalview Authors\r
- * \r
- * This file is part of Jalview.\r
- * \r
- * Jalview is free software: you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License \r
- * as published by the Free Software Foundation, either version 3\r
- * of the License, or (at your option) any later version.\r
- *  \r
- * Jalview is distributed in the hope that it will be useful, but \r
- * WITHOUT ANY WARRANTY; without even the implied warranty \r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
- * PURPOSE.  See the GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
- * The Jalview Authors are detailed in the 'AUTHORS' file.\r
- */\r
-package jalview.datamodel;\r
-\r
-import java.util.Vector;\r
-\r
-import fr.orsay.lri.varna.models.rna.RNA;\r
-\r
-/**\r
- * DOCUMENT ME!\r
- * \r
- * @author $author$\r
- * @version $Revision$\r
- */\r
-public interface SequenceI\r
-{\r
-  /**\r
-   * Set the display name for the sequence\r
-   * \r
-   * @param name\r
-   */\r
-  public void setName(String name);\r
-\r
-  /**\r
-   * Get the display name\r
-   */\r
-  public String getName();\r
-\r
-  /**\r
-   * Set start position of first non-gapped symbol in sequence\r
-   * \r
-   * @param start\r
-   *          new start position\r
-   */\r
-  public void setStart(int start);\r
-\r
-  /**\r
-   * get start position of first non-gapped residue in sequence\r
-   * \r
-   * @return\r
-   */\r
-  public int getStart();\r
-\r
-  /**\r
-   * get the displayed id of the sequence\r
-   * \r
-   * @return true means the id will be returned in the form\r
-   *         DisplayName/Start-End\r
-   */\r
-  public String getDisplayId(boolean jvsuffix);\r
-\r
-  /**\r
-   * set end position for last residue in sequence\r
-   * \r
-   * @param end\r
-   */\r
-  public void setEnd(int end);\r
-\r
-  /**\r
-   * get end position for last residue in sequence getEnd()>getStart() unless\r
-   * sequence only consists of gap characters\r
-   * \r
-   * @return\r
-   */\r
-  public int getEnd();\r
-\r
-  /**\r
-   * @return length of sequence including gaps\r
-   * \r
-   */\r
-  public int getLength();\r
-\r
-  /**\r
-   * Replace the sequence with the given string\r
-   * \r
-   * @param sequence\r
-   *          new sequence string\r
-   */\r
-  public void setSequence(String sequence);\r
-\r
-  /**\r
-   * @return sequence as string\r
-   */\r
-  public String getSequenceAsString();\r
-\r
-  /**\r
-   * get a range on the sequence as a string\r
-   * \r
-   * @param start\r
-   *          position relative to start of sequence including gaps (from 0)\r
-   * @param end\r
-   *          position relative to start of sequence including gaps (from 0)\r
-   * \r
-   * @return String containing all gap and symbols in specified range\r
-   */\r
-  public String getSequenceAsString(int start, int end);\r
-\r
-  /**\r
-   * Get the sequence as a character array\r
-   * \r
-   * @return seqeunce and any gaps\r
-   */\r
-  public char[] getSequence();\r
-\r
-  /**\r
-   * get stretch of sequence characters in an array\r
-   * \r
-   * @param start\r
-   *          absolute index into getSequence()\r
-   * @param end\r
-   *          exclusive index of last position in segment to be returned.\r
-   * \r
-   * @return char[max(0,end-start)];\r
-   */\r
-  public char[] getSequence(int start, int end);\r
-\r
-  /**\r
-   * create a new sequence object from start to end of this sequence\r
-   * \r
-   * @param start\r
-   *          int\r
-   * @param end\r
-   *          int\r
-   * @return SequenceI\r
-   */\r
-  public SequenceI getSubSequence(int start, int end);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @param i\r
-   *          DOCUMENT ME!\r
-   * \r
-   * @return DOCUMENT ME!\r
-   */\r
-  public char getCharAt(int i);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @param desc\r
-   *          DOCUMENT ME!\r
-   */\r
-  public void setDescription(String desc);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @return DOCUMENT ME!\r
-   */\r
-  public String getDescription();\r
-\r
-  /**\r
-   * Return the alignment column for a sequence position * Return the alignment\r
-   * position for a sequence position\r
-   * \r
-   * @param pos\r
-   *          lying from start to end\r
-   * \r
-   * @return aligned column for residue (0 if residue is upstream from\r
-   *         alignment, -1 if residue is downstream from alignment) note.\r
-   *         Sequence object returns sequence.getEnd() for positions upstream\r
-   *         currently. TODO: change sequence for\r
-   *         assert(findIndex(seq.getEnd()+1)==-1) and fix incremental bugs\r
-   * \r
-   */\r
-  public int findIndex(int pos);\r
-\r
-  /**\r
-   * Returns the sequence position for an alignment position\r
-   * \r
-   * @param i\r
-   *          column index in alignment (from 1)\r
-   * \r
-   * @return residue number for residue (left of and) nearest ith column\r
-   */\r
-  public int findPosition(int i);\r
-\r
-  /**\r
-   * Returns an int array where indices correspond to each residue in the\r
-   * sequence and the element value gives its position in the alignment\r
-   * \r
-   * @return int[SequenceI.getEnd()-SequenceI.getStart()+1] or null if no\r
-   *         residues in SequenceI object\r
-   */\r
-  public int[] gapMap();\r
-\r
-  /**\r
-   * Returns an int array where indices correspond to each position in sequence\r
-   * char array and the element value gives the result of findPosition for that\r
-   * index in the sequence.\r
-   * \r
-   * @return int[SequenceI.getLength()]\r
-   */\r
-  public int[] findPositionMap();\r
-\r
-  /**\r
-   * Delete a range of aligned sequence columns, creating a new dataset sequence\r
-   * if necessary and adjusting start and end positions accordingly.\r
-   * \r
-   * @param i\r
-   *          first column in range to delete\r
-   * @param j\r
-   *          last column in range to delete\r
-   */\r
-  public void deleteChars(int i, int j);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @param i\r
-   *          DOCUMENT ME!\r
-   * @param c\r
-   *          DOCUMENT ME!\r
-   */\r
-  public void insertCharAt(int i, char c);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @param i\r
-   *          DOCUMENT ME!\r
-   * @param c\r
-   *          DOCUMENT ME!\r
-   */\r
-  public void insertCharAt(int i, int length, char c);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @return DOCUMENT ME!\r
-   */\r
-  public SequenceFeature[] getSequenceFeatures();\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @param v\r
-   *          DOCUMENT ME!\r
-   */\r
-  public void setSequenceFeatures(SequenceFeature[] features);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @param id\r
-   *          DOCUMENT ME!\r
-   */\r
-  public void setPDBId(Vector ids);\r
-\r
-  /**\r
-   * DOCUMENT ME!\r
-   * \r
-   * @return DOCUMENT ME!\r
-   */\r
-  public Vector getPDBId();\r
-\r
-  /**\r
-   * add entry to the vector of PDBIds, if it isn't in the list already\r
-   * \r
-   * @param entry\r
-   */\r
-  public void addPDBId(PDBEntry entry);\r
-\r
-  /**\r
-   * update the list of PDBEntrys to include any DBRefEntrys citing structural\r
-   * databases\r
-   * \r
-   * @return true if PDBEntry list was modified\r
-   */\r
-  public boolean updatePDBIds();\r
-\r
-  public String getVamsasId();\r
-\r
-  public void setVamsasId(String id);\r
-\r
-  public void setDBRef(DBRefEntry[] dbs);\r
-\r
-  public DBRefEntry[] getDBRef();\r
-\r
-  /**\r
-   * add the given entry to the list of DBRefs for this sequence, or replace a\r
-   * similar one if entry contains a map object and the existing one doesnt.\r
-   * \r
-   * @param entry\r
-   */\r
-  public void addDBRef(DBRefEntry entry);\r
-\r
-  public void addSequenceFeature(SequenceFeature sf);\r
-\r
-  public void deleteFeature(SequenceFeature sf);\r
-\r
-  public void setDatasetSequence(SequenceI seq);\r
-\r
-  public SequenceI getDatasetSequence();\r
-\r
-  public AlignmentAnnotation[] getAnnotation();\r
-\r
-  public void addAlignmentAnnotation(AlignmentAnnotation annotation);\r
-\r
-  public void removeAlignmentAnnotation(AlignmentAnnotation annotation);\r
-\r
-  /**\r
-   * Derive a sequence (using this one's dataset or as the dataset)\r
-   * \r
-   * @return duplicate sequence with valid dataset sequence\r
-   */\r
-  public SequenceI deriveSequence();\r
-\r
-  /**\r
-   * set the array of associated AlignmentAnnotation for this sequenceI\r
-   * \r
-   * @param revealed\r
-   */\r
-  public void setAlignmentAnnotation(AlignmentAnnotation[] annotation);\r
-\r
-  /**\r
-   * Get one or more alignment annotations with a particular label.\r
-   * \r
-   * @param label\r
-   *          string which each returned annotation must have as a label.\r
-   * @return null or array of annotations.\r
-   */\r
-  public AlignmentAnnotation[] getAnnotation(String label);\r
-\r
-  /**\r
-   * create a new dataset sequence (if necessary) for this sequence and sets\r
-   * this sequence to refer to it. This call will move any features or\r
-   * references on the sequence onto the dataset. It will also make a duplicate\r
-   * of existing annotation rows for the dataset sequence, rather than relocate\r
-   * them in order to preserve external references (since 2.8.2).\r
-   * \r
-   * @return dataset sequence for this sequence\r
-   */\r
-  public SequenceI createDatasetSequence();\r
-\r
-  /**\r
-   * Transfer any database references or annotation from entry under a sequence\r
-   * mapping. <br/>\r
-   * <strong>Note: DOES NOT transfer sequence associated alignment\r
-   * annotation </strong><br/>\r
-   * \r
-   * @param entry\r
-   * @param mp\r
-   *          null or mapping from entry's numbering to local start/end\r
-   */\r
-  public void transferAnnotation(SequenceI entry, Mapping mp);\r
-\r
-  /**\r
-   * @param index\r
-   *          The sequence index in the MSA\r
-   */\r
-  public void setIndex(int index);\r
-\r
-  /**\r
-   * @return The index of the sequence in the alignment\r
-   */\r
-  public int getIndex();\r
-\r
-  /**\r
-   * @return The RNA of the sequence in the alignment\r
-   */\r
-\r
-  public RNA getRNA();\r
-\r
-  /**\r
-   * @param rna\r
-   *          The RNA.\r
-   */\r
-  public void setRNA(RNA rna);\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.datamodel;
+
+import java.util.List;
+import java.util.Vector;
+
+import fr.orsay.lri.varna.models.rna.RNA;
+
+/**
+ * DOCUMENT ME!
+ * 
+ * @author $author$
+ * @version $Revision$
+ */
+public interface SequenceI
+{
+  /**
+   * Set the display name for the sequence
+   * 
+   * @param name
+   */
+  public void setName(String name);
+
+  /**
+   * Get the display name
+   */
+  public String getName();
+
+  /**
+   * Set start position of first non-gapped symbol in sequence
+   * 
+   * @param start
+   *          new start position
+   */
+  public void setStart(int start);
+
+  /**
+   * get start position of first non-gapped residue in sequence
+   * 
+   * @return
+   */
+  public int getStart();
+
+  /**
+   * get the displayed id of the sequence
+   * 
+   * @return true means the id will be returned in the form
+   *         DisplayName/Start-End
+   */
+  public String getDisplayId(boolean jvsuffix);
+
+  /**
+   * set end position for last residue in sequence
+   * 
+   * @param end
+   */
+  public void setEnd(int end);
+
+  /**
+   * get end position for last residue in sequence getEnd()>getStart() unless
+   * sequence only consists of gap characters
+   * 
+   * @return
+   */
+  public int getEnd();
+
+  /**
+   * @return length of sequence including gaps
+   * 
+   */
+  public int getLength();
+
+  /**
+   * Replace the sequence with the given string
+   * 
+   * @param sequence
+   *          new sequence string
+   */
+  public void setSequence(String sequence);
+
+  /**
+   * @return sequence as string
+   */
+  public String getSequenceAsString();
+
+  /**
+   * get a range on the sequence as a string
+   * 
+   * @param start
+   *          position relative to start of sequence including gaps (from 0)
+   * @param end
+   *          position relative to start of sequence including gaps (from 0)
+   * 
+   * @return String containing all gap and symbols in specified range
+   */
+  public String getSequenceAsString(int start, int end);
+
+  /**
+   * Get the sequence as a character array
+   * 
+   * @return seqeunce and any gaps
+   */
+  public char[] getSequence();
+
+  /**
+   * get stretch of sequence characters in an array
+   * 
+   * @param start
+   *          absolute index into getSequence()
+   * @param end
+   *          exclusive index of last position in segment to be returned.
+   * 
+   * @return char[max(0,end-start)];
+   */
+  public char[] getSequence(int start, int end);
+
+  /**
+   * create a new sequence object from start to end of this sequence
+   * 
+   * @param start
+   *          int
+   * @param end
+   *          int
+   * @return SequenceI
+   */
+  public SequenceI getSubSequence(int start, int end);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param i
+   *          DOCUMENT ME!
+   * 
+   * @return DOCUMENT ME!
+   */
+  public char getCharAt(int i);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param desc
+   *          DOCUMENT ME!
+   */
+  public void setDescription(String desc);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @return DOCUMENT ME!
+   */
+  public String getDescription();
+
+  /**
+   * Return the alignment column for a sequence position * Return the alignment
+   * position for a sequence position
+   * 
+   * @param pos
+   *          lying from start to end
+   * 
+   * @return aligned column for residue (0 if residue is upstream from
+   *         alignment, -1 if residue is downstream from alignment) note.
+   *         Sequence object returns sequence.getEnd() for positions upstream
+   *         currently. TODO: change sequence for
+   *         assert(findIndex(seq.getEnd()+1)==-1) and fix incremental bugs
+   * 
+   */
+  public int findIndex(int pos);
+
+  /**
+   * Returns the sequence position for an alignment position
+   * 
+   * @param i
+   *          column index in alignment (from 1)
+   * 
+   * @return residue number for residue (left of and) nearest ith column
+   */
+  public int findPosition(int i);
+
+  /**
+   * Returns an int array where indices correspond to each residue in the
+   * sequence and the element value gives its position in the alignment
+   * 
+   * @return int[SequenceI.getEnd()-SequenceI.getStart()+1] or null if no
+   *         residues in SequenceI object
+   */
+  public int[] gapMap();
+
+  /**
+   * Returns an int array where indices correspond to each position in sequence
+   * char array and the element value gives the result of findPosition for that
+   * index in the sequence.
+   * 
+   * @return int[SequenceI.getLength()]
+   */
+  public int[] findPositionMap();
+
+  /**
+   * Delete a range of aligned sequence columns, creating a new dataset sequence
+   * if necessary and adjusting start and end positions accordingly.
+   * 
+   * @param i
+   *          first column in range to delete
+   * @param j
+   *          last column in range to delete
+   */
+  public void deleteChars(int i, int j);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param i
+   *          DOCUMENT ME!
+   * @param c
+   *          DOCUMENT ME!
+   */
+  public void insertCharAt(int i, char c);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param i
+   *          DOCUMENT ME!
+   * @param c
+   *          DOCUMENT ME!
+   */
+  public void insertCharAt(int i, int length, char c);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @return DOCUMENT ME!
+   */
+  public SequenceFeature[] getSequenceFeatures();
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param v
+   *          DOCUMENT ME!
+   */
+  public void setSequenceFeatures(SequenceFeature[] features);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @param id
+   *          DOCUMENT ME!
+   */
+  public void setPDBId(Vector ids);
+
+  /**
+   * DOCUMENT ME!
+   * 
+   * @return DOCUMENT ME!
+   */
+  public Vector getPDBId();
+
+  /**
+   * add entry to the vector of PDBIds, if it isn't in the list already
+   * 
+   * @param entry
+   */
+  public void addPDBId(PDBEntry entry);
+
+  /**
+   * update the list of PDBEntrys to include any DBRefEntrys citing structural
+   * databases
+   * 
+   * @return true if PDBEntry list was modified
+   */
+  public boolean updatePDBIds();
+
+  public String getVamsasId();
+
+  public void setVamsasId(String id);
+
+  public void setDBRef(DBRefEntry[] dbs);
+
+  public DBRefEntry[] getDBRef();
+
+  /**
+   * add the given entry to the list of DBRefs for this sequence, or replace a
+   * similar one if entry contains a map object and the existing one doesnt.
+   * 
+   * @param entry
+   */
+  public void addDBRef(DBRefEntry entry);
+
+  public void addSequenceFeature(SequenceFeature sf);
+
+  public void deleteFeature(SequenceFeature sf);
+
+  public void setDatasetSequence(SequenceI seq);
+
+  public SequenceI getDatasetSequence();
+
+  public AlignmentAnnotation[] getAnnotation();
+
+  public void addAlignmentAnnotation(AlignmentAnnotation annotation);
+
+  public void removeAlignmentAnnotation(AlignmentAnnotation annotation);
+
+  /**
+   * Derive a sequence (using this one's dataset or as the dataset)
+   * 
+   * @return duplicate sequence with valid dataset sequence
+   */
+  public SequenceI deriveSequence();
+
+  /**
+   * set the array of associated AlignmentAnnotation for this sequenceI
+   * 
+   * @param revealed
+   */
+  public void setAlignmentAnnotation(AlignmentAnnotation[] annotation);
+
+  /**
+   * Get one or more alignment annotations with a particular label.
+   * 
+   * @param label
+   *          string which each returned annotation must have as a label.
+   * @return null or array of annotations.
+   */
+  public AlignmentAnnotation[] getAnnotation(String label);
+
+  /**
+   * Return a list of any annotations which match the given calcId (source) and
+   * label (type). Null values do not match.
+   * 
+   * @param calcId
+   * @param label
+   * @return
+   */
+  public List<AlignmentAnnotation> getAlignmentAnnotations(String calcId,
+          String label);
+
+  /**
+   * 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
+   * of existing annotation rows for the dataset sequence, rather than relocate
+   * them in order to preserve external references (since 2.8.2).
+   * 
+   * @return dataset sequence for this sequence
+   */
+  public SequenceI createDatasetSequence();
+
+  /**
+   * Transfer any database references or annotation from entry under a sequence
+   * mapping. <br/>
+   * <strong>Note: DOES NOT transfer sequence associated alignment
+   * annotation </strong><br/>
+   * 
+   * @param entry
+   * @param mp
+   *          null or mapping from entry's numbering to local start/end
+   */
+  public void transferAnnotation(SequenceI entry, Mapping mp);
+
+  /**
+   * @param index
+   *          The sequence index in the MSA
+   */
+  public void setIndex(int index);
+
+  /**
+   * @return The index of the sequence in the alignment
+   */
+  public int getIndex();
+
+  /**
+   * @return The RNA of the sequence in the alignment
+   */
+
+  public RNA getRNA();
+
+  /**
+   * @param rna
+   *          The RNA.
+   */
+  public void setRNA(RNA rna);
+
+}
index c3d80d1..d9c0c6a 100644 (file)
@@ -334,6 +334,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     setMenusFromViewport(viewport);
     buildSortByAnnotationScoresMenu();
     buildTreeMenu();
+    
     if (viewport.wrapAlignment)
     {
       wrapMenuItem_actionPerformed(null);
@@ -505,14 +506,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         case KeyEvent.VK_F1:
           try
           {
-            ClassLoader cl = jalview.gui.Desktop.class.getClassLoader();
-            java.net.URL url = javax.help.HelpSet.findHelpSet(cl,
-                    "help/help");
-            javax.help.HelpSet hs = new javax.help.HelpSet(cl, url);
-
-            javax.help.HelpBroker hb = hs.createHelpBroker();
-            hb.setCurrentID("home");
-            hb.setDisplayed(true);
+            Help.showHelpWindow();
           } catch (Exception ex)
           {
             ex.printStackTrace();
@@ -729,6 +723,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     scaleLeft.setVisible(av.wrapAlignment);
     scaleRight.setVisible(av.wrapAlignment);
     annotationPanelMenuItem.setState(av.showAnnotation);
+    /*
+     * Show/hide all annotations only enabled if annotation panel is shown
+     */
+    showAllAnnotations.setEnabled(annotationPanelMenuItem.getState());
+    hideAllAnnotations.setEnabled(annotationPanelMenuItem.getState());
     viewBoxesMenuItem.setSelected(av.showBoxes);
     viewTextMenuItem.setSelected(av.showText);
     showNonconservedMenuItem.setSelected(av.getShowUnconserved());
@@ -2178,17 +2177,27 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       return;
     }
 
-    Vector seqs = new Vector();
+    List<SequenceI> seqs = new ArrayList<SequenceI>(sg.getSize());
     SequenceI seq;
     for (int i = 0; i < sg.getSize(); i++)
     {
       seq = sg.getSequenceAt(i);
-      seqs.addElement(seq);
+      seqs.add(seq);
     }
 
-    // If the cut affects all sequences, remove highlighted columns
+    // If the cut affects all sequences, warn, remove highlighted columns
     if (sg.getSize() == viewport.getAlignment().getHeight())
     {
+      int confirm = JOptionPane.showConfirmDialog(this,
+              MessageManager.getString("warn.delete_all"), // $NON-NLS-1$
+              MessageManager.getString("label.delete_all"), // $NON-NLS-1$
+              JOptionPane.OK_CANCEL_OPTION);
+
+      if (confirm == JOptionPane.CANCEL_OPTION
+              || confirm == JOptionPane.CLOSED_OPTION)
+      {
+        return;
+      }
       viewport.getColumnSelection().removeElements(sg.getStartRes(),
               sg.getEndRes() + 1);
     }
@@ -2196,7 +2205,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     SequenceI[] cut = new SequenceI[seqs.size()];
     for (int i = 0; i < seqs.size(); i++)
     {
-      cut[i] = (SequenceI) seqs.elementAt(i);
+      cut[i] = seqs.get(i);
     }
 
     /*
@@ -3033,16 +3042,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Action on toggle of the 'Show annotations' menu item. This shows or hides
+   * the annotations panel as a whole.
+   * 
+   * The options to show/hide all annotations should be enabled when the panel
+   * is shown, and disabled when the panel is hidden.
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   @Override
   public void annotationPanelMenuItem_actionPerformed(ActionEvent e)
   {
-    viewport.setShowAnnotation(annotationPanelMenuItem.isSelected());
-    alignPanel.setAnnotationVisible(annotationPanelMenuItem.isSelected());
+    final boolean setVisible = annotationPanelMenuItem.isSelected();
+    viewport.setShowAnnotation(setVisible);
+    alignPanel.setAnnotationVisible(setVisible);
+    this.showAllAnnotations.setEnabled(setVisible);
+    this.hideAllAnnotations.setEnabled(setVisible);
   }
 
   @Override
@@ -4021,6 +4036,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           tm.setText(title);//
           tm.addActionListener(new java.awt.event.ActionListener()
           {
+            @Override
             public void actionPerformed(ActionEvent e)
             {
               NewTreePanel(type, (String) pwtype, title);
@@ -4327,11 +4343,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           // object broker mechanism.
           final Vector<JMenu> wsmenu = new Vector<JMenu>();
           final IProgressIndicator af = me;
-          final JMenu msawsmenu = new JMenu(MessageManager.getString("label.alignment"));
-          final JMenu secstrmenu = new JMenu(MessageManager.getString("label.secondary_structure_prediction"));
-          final JMenu seqsrchmenu = new JMenu(MessageManager.getString("label.sequence_database_search"));
-          final JMenu analymenu = new JMenu(MessageManager.getString("label.analysis"));
-          final JMenu dismenu = new JMenu(MessageManager.getString("label.protein_disorder"));
+          final JMenu msawsmenu = new JMenu("Alignment");
+          final JMenu secstrmenu = new JMenu(
+                  "Secondary Structure Prediction");
+          final JMenu seqsrchmenu = new JMenu("Sequence Database Search");
+          final JMenu analymenu = new JMenu("Analysis");
+          final JMenu dismenu = new JMenu("Protein Disorder");
+          // final JMenu msawsmenu = new
+          // JMenu(MessageManager.getString("label.alignment"));
+          // final JMenu secstrmenu = new
+          // JMenu(MessageManager.getString("label.secondary_structure_prediction"));
+          // final JMenu seqsrchmenu = new
+          // JMenu(MessageManager.getString("label.sequence_database_search"));
+          // final JMenu analymenu = new
+          // JMenu(MessageManager.getString("label.analysis"));
+          // final JMenu dismenu = new
+          // JMenu(MessageManager.getString("label.protein_disorder"));
           // JAL-940 - only show secondary structure prediction services from
           // the legacy server
           if (// Cache.getDefault("SHOW_JWS1_SERVICES", true)
@@ -4998,14 +5025,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                           "AUTOASSOCIATE_PDBANDSEQS_IGNOREOTHERS", false) || JOptionPane
                           .showConfirmDialog(
                                   this,
-                                  MessageManager
+                                  "<html>"+MessageManager
                                           .formatMessage(
                                                   "label.ignore_unmatched_dropped_files_info",
                                                   new String[]
                                                   { Integer.valueOf(
                                                           filesnotmatched
                                                                   .size())
-                                                          .toString() }),
+                                                          .toString() })+"</html>",
                                   MessageManager
                                           .getString("label.ignore_unmatched_dropped_files"),
                                   JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION))
@@ -5308,6 +5335,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     trimrs.setSelected(Cache.getDefault("TRIM_FETCHED_DATASET_SEQS", true));
     trimrs.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         trimrs.setSelected(trimrs.isSelected());
@@ -5690,6 +5718,22 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       tabbedPane.setSelectedIndex(alignPanels.indexOf(alignmentPanel));
     }
   }
+
+  /**
+   * Action on selection of menu option to Show or Hide all annotations.
+   * 
+   * @param visibile
+   */
+  @Override
+  protected void setAllAnnotationsVisibility(boolean visible)
+  {
+    for (AlignmentAnnotation aa : alignPanel.getAlignment()
+            .getAlignmentAnnotation())
+    {
+      aa.visible = visible;
+    }
+    this.alignPanel.paintAlignment(true);
+  }
 }
 
 class PrintThread extends Thread
diff --git a/src/jalview/gui/AnnotationChooser.java b/src/jalview/gui/AnnotationChooser.java
new file mode 100644 (file)
index 0000000..33c4992
--- /dev/null
@@ -0,0 +1,634 @@
+package jalview.gui;
+
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceGroup;
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
+import java.awt.Checkbox;
+import java.awt.CheckboxGroup;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JButton;
+import javax.swing.JInternalFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
+
+/**
+ * A panel that allows the user to select which sequence-associated annotation
+ * rows to show or hide.
+ * 
+ * @author gmcarstairs
+ *
+ */
+@SuppressWarnings("serial")
+public class AnnotationChooser extends JPanel
+{
+
+  private static final Font CHECKBOX_FONT = new Font("Serif", Font.BOLD, 12);
+
+  private static final int MY_FRAME_WIDTH = 600;
+
+  private static final int MY_FRAME_HEIGHT = 250;
+
+  private JInternalFrame frame;
+
+  private AlignmentPanel ap;
+
+  private SequenceGroup sg;
+
+  // all annotation rows' original visible state
+  private boolean[] resetState = null;
+
+  // is 'Show' selected?
+  private boolean showSelected;
+
+  // apply settings to selected (or all) sequences?
+  private boolean applyToSelectedSequences;
+
+  // apply settings to unselected (or all) sequences?
+  private boolean applyToUnselectedSequences;
+
+  // currently selected 'annotation type' checkboxes
+  private Map<String, String> selectedTypes = new HashMap<String, String>();
+  
+  /**
+   * Constructor.
+   * 
+   * @param alignPane
+   */
+  public AnnotationChooser(AlignmentPanel alignPane)
+  {
+    super();
+    this.ap = alignPane;
+    this.sg = alignPane.av.getSelectionGroup();
+    saveResetState(alignPane.getAlignment());
+
+    try
+    {
+      jbInit();
+    } catch (Exception ex)
+    {
+      ex.printStackTrace();
+    }
+    showFrame();
+  }
+
+  /**
+   * Save the initial show/hide state of all annotations to allow a Cancel
+   * operation.
+   * 
+   * @param alignment
+   */
+  protected void saveResetState(AlignmentI alignment)
+  {
+    AlignmentAnnotation[] annotations = alignment.getAlignmentAnnotation();
+    final int count = annotations.length;
+    this.resetState = new boolean[count];
+    for (int i = 0; i < count; i++)
+    {
+      this.resetState[i] = annotations[i].visible;
+    }
+  }
+
+  /**
+   * Populate this frame with:
+   * <p>
+   * checkboxes for the types of annotation to show or hide (i.e. any annotation
+   * type shown for any sequence in the whole alignment)
+   * <p>
+   * option to show or hide selected types
+   * <p>
+   * option to show/hide for the currently selected group, or its inverse
+   * <p>
+   * OK and Cancel (reset) buttons
+   */
+  protected void jbInit()
+  {
+    setLayout(new GridLayout(3, 1));
+    add(buildAnnotationTypesPanel());
+    add(buildShowHideOptionsPanel());
+    add(buildActionButtonsPanel());
+    validate();
+  }
+
+  /**
+   * Construct the panel with checkboxes for annotation types.
+   * 
+   * @return
+   */
+  protected JPanel buildAnnotationTypesPanel()
+  {
+    JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT));
+
+    List<String> annotationTypes = getAnnotationTypes(
+            this.ap.getAlignment(), true);
+
+    for (final String type : annotationTypes)
+    {
+      final Checkbox check = new Checkbox(type);
+      check.setFont(CHECKBOX_FONT);
+      check.addItemListener(new ItemListener()
+      {
+        @Override
+        public void itemStateChanged(ItemEvent evt)
+        {
+          if (evt.getStateChange() == ItemEvent.SELECTED)
+          {
+            AnnotationChooser.this.selectedTypes.put(type, type);
+          }
+          else
+          {
+            AnnotationChooser.this.selectedTypes.remove(type);
+          }
+          changeTypeSelected_actionPerformed(type);
+        }
+      });
+      jp.add(check);
+    }
+    return jp;
+  }
+
+  /**
+   * Update display when scope (All/Selected sequences/Unselected) is changed.
+   * <p>
+   * Set annotations (with one of the selected types) to the selected Show/Hide
+   * visibility, if they are in the new application scope. Set to the opposite
+   * if outside the scope.
+   * <p>
+   * Note this only affects sequence-specific annotations, others are left
+   * unchanged.
+   */
+  protected void changeApplyTo_actionPerformed()
+  {
+    setAnnotationVisibility(true);
+
+    // copied from AnnotationLabel.actionPerformed (after show/hide row)...
+    // TODO should drive this functionality into AlignmentPanel
+    ap.updateAnnotation();
+    // this.ap.annotationPanel.adjustPanelHeight();
+    // this.ap.alabels.setSize(this.ap.alabels.getSize().width,
+    // this.ap.annotationPanel.getSize().height);
+    // this.ap.validate();
+    this.ap.paintAlignment(true);
+  }
+
+  /**
+   * Update display when an annotation type is selected or deselected.
+   * <p>
+   * If the type is selected, set visibility of annotations of that type which
+   * are in the application scope (all, selected or unselected sequences).
+   * <p>
+   * If the type is unselected, set visibility to the opposite value. That is,
+   * treat select/deselect as a 'toggle' operation.
+   * 
+   * @param type
+   */
+  protected void changeTypeSelected_actionPerformed(String type)
+  {
+    boolean typeSelected = this.selectedTypes.containsKey(type);
+    for (AlignmentAnnotation aa : this.ap.getAlignment()
+            .getAlignmentAnnotation())
+    {
+      if (aa.sequenceRef != null && type.equals(aa.label)
+              && isInActionScope(aa))
+      {
+        aa.visible = typeSelected ? this.showSelected : !this.showSelected;
+      }
+    }
+    ap.updateAnnotation();
+    // // this.ap.annotationPanel.adjustPanelHeight();
+    // this.ap.alabels.setSize(this.ap.alabels.getSize().width,
+    // this.ap.annotationPanel.getSize().height);
+    // this.ap.validate();
+    this.ap.paintAlignment(true);
+  }
+
+  /**
+   * Update display on change of choice of Show or Hide
+   * <p>
+   * For annotations of any selected type, set visibility of annotations of that
+   * type which are in the application scope (all, selected or unselected
+   * sequences).
+   * 
+   * @param type
+   */
+  protected void changeShowHide_actionPerformed()
+  {
+    setAnnotationVisibility(false);
+
+    this.ap.updateAnnotation();
+    // this.ap.annotationPanel.adjustPanelHeight();
+    this.ap.paintAlignment(true);
+  }
+
+  /**
+   * Update visibility flags on annotation rows as per the current user choices.
+   * 
+   * @param updateAllRows
+   */
+  protected void setAnnotationVisibility(boolean updateAllRows)
+  {
+    for (AlignmentAnnotation aa : this.ap.getAlignment()
+            .getAlignmentAnnotation())
+    {
+      if (aa.sequenceRef != null)
+      {
+        setAnnotationVisibility(aa, updateAllRows);
+      }
+    }
+  }
+
+  /**
+   * Determine and set the visibility of the given annotation from the currently
+   * selected options.
+   * <p>
+   * Only update annotations whose type is one of the selected types.
+   * <p>
+   * If its sequence is in the selected application scope
+   * (all/selected/unselected sequences), then we set its visibility according
+   * to the current choice of Show or Hide.
+   * <p>
+   * If force update of all rows is wanted, then set rows not in the sequence
+   * selection scope to the opposite visibility to those in scope.
+   * 
+   * @param aa
+   * @param updateAllRows
+   */
+  protected void setAnnotationVisibility(AlignmentAnnotation aa,
+          boolean updateAllRows)
+  {
+    if (this.selectedTypes.containsKey(aa.label))
+    {
+      if (isInActionScope(aa))
+      {
+        aa.visible = this.showSelected;
+      }
+      else if (updateAllRows)
+      {
+        aa.visible = !this.showSelected;
+      }
+    }
+    // TODO force not visible if associated sequence is hidden?
+    // currently hiding a sequence does not hide its annotation rows
+  }
+
+  /**
+   * Answers true if the annotation falls in the current selection criteria for
+   * show/hide.
+   * <p>
+   * It must be in the sequence selection group (for 'Apply to selection'), or
+   * not in it (for 'Apply except to selection'). No check needed for 'Apply to
+   * all'.
+   * 
+   * @param aa
+   * @return
+   */
+  protected boolean isInActionScope(AlignmentAnnotation aa)
+  {
+    boolean result = false;
+    if (this.applyToSelectedSequences && this.applyToUnselectedSequences)
+    {
+      // we don't care if the annotation's sequence is selected or not
+      result = true;
+    }
+    else if (this.sg == null)
+    {
+      // shouldn't happen - defensive programming
+      result = true;
+    }
+    else if (this.sg.getSequences().contains(aa.sequenceRef))
+    {
+      // annotation is for a member of the selection group
+      result = this.applyToSelectedSequences ? true : false;
+    }
+    else
+    {
+      // annotation is not associated with the selection group
+      result = this.applyToUnselectedSequences ? true : false;
+    }
+    return result;
+  }
+
+  /**
+   * Get annotation 'types' for an alignment, optionally restricted to
+   * sequence-specific annotations only. The label is currently used for 'type'.
+   * 
+   * TODO refactor to helper class. See
+   * AnnotationColourChooser.getAnnotationItems() for another client
+   * 
+   * @param alignment
+   * @param sequenceSpecific
+   * @return
+   */
+  public static List<String> getAnnotationTypes(AlignmentI alignment,
+          boolean sequenceSpecificOnly)
+  {
+    List<String> result = new ArrayList<String>();
+    for (AlignmentAnnotation aa : alignment.getAlignmentAnnotation())
+    {
+      if (!sequenceSpecificOnly || aa.sequenceRef != null)
+      {
+        String label = aa.label;
+        if (!result.contains(label))
+        {
+          result.add(label);
+        }
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Construct the panel with options to:
+   * <p>
+   * show or hide the selected annotation types
+   * <p>
+   * do this for the current selection group or its inverse
+   * 
+   * @return
+   */
+  protected JPanel buildShowHideOptionsPanel()
+  {
+    JPanel jp = new JPanel();
+    jp.setLayout(new BorderLayout());
+
+    JPanel showHideOptions = buildShowHidePanel();
+    jp.add(showHideOptions, BorderLayout.CENTER);
+
+    JPanel applyToOptions = buildApplyToOptionsPanel();
+    jp.add(applyToOptions, BorderLayout.SOUTH);
+
+    return jp;
+  }
+
+  /**
+   * Build a panel with radio buttons options for sequences to apply show/hide
+   * to. Options are all, current selection, all except current selection.
+   * Initial state has 'current selection' selected.
+   * <p>
+   * If the sequence group is null, then we are acting on the whole alignment,
+   * and only 'all sequences' is enabled (and selected).
+   * 
+   * @return
+   */
+  protected JPanel buildApplyToOptionsPanel()
+  {
+    final boolean wholeAlignment = this.sg == null;
+    JPanel applyToOptions = new JPanel(new FlowLayout(FlowLayout.LEFT));
+    CheckboxGroup actingOn = new CheckboxGroup();
+    
+    String forAll = MessageManager.getString("label.all_sequences");
+    final Checkbox allSequences = new Checkbox(forAll, actingOn,
+            wholeAlignment);
+    allSequences.addItemListener(new ItemListener()
+    {
+      @Override
+      public void itemStateChanged(ItemEvent evt)
+      {
+        if (evt.getStateChange() == ItemEvent.SELECTED) {
+          AnnotationChooser.this.setApplyToSelectedSequences(true);
+          AnnotationChooser.this.setApplyToUnselectedSequences(true);
+          AnnotationChooser.this.changeApplyTo_actionPerformed();
+        }
+      }
+    });
+    applyToOptions.add(allSequences);
+    
+    String forSelected = MessageManager
+            .getString("label.selected_sequences");
+    final Checkbox selectedSequences = new Checkbox(forSelected, actingOn,
+            !wholeAlignment);
+    selectedSequences.setEnabled(!wholeAlignment);
+    selectedSequences.addItemListener(new ItemListener()
+    {
+      @Override
+      public void itemStateChanged(ItemEvent evt)
+      {
+        if (evt.getStateChange() == ItemEvent.SELECTED)
+        {
+          AnnotationChooser.this.setApplyToSelectedSequences(true);
+          AnnotationChooser.this.setApplyToUnselectedSequences(false);
+          AnnotationChooser.this.changeApplyTo_actionPerformed();
+        }
+      }
+    });
+    applyToOptions.add(selectedSequences);
+    
+    String exceptSelected = MessageManager
+            .getString("label.except_selected_sequences");
+    final Checkbox unselectedSequences = new Checkbox(exceptSelected, actingOn, false);
+    unselectedSequences.setEnabled(!wholeAlignment);
+    unselectedSequences.addItemListener(new ItemListener()
+    {
+      @Override
+      public void itemStateChanged(ItemEvent evt)
+      {
+        if (evt.getStateChange() == ItemEvent.SELECTED)
+        {
+          AnnotationChooser.this.setApplyToSelectedSequences(false);
+          AnnotationChooser.this.setApplyToUnselectedSequences(true);
+          AnnotationChooser.this.changeApplyTo_actionPerformed();
+        }
+      }
+    });
+    applyToOptions.add(unselectedSequences);
+    
+    // set member variables to match the initial selection state
+    this.applyToSelectedSequences = selectedSequences.getState()
+            || allSequences.getState();
+    this.applyToUnselectedSequences = unselectedSequences.getState()
+            || allSequences.getState();
+
+    return applyToOptions;
+  }
+
+  /**
+   * Build a panel with radio button options to show or hide selected
+   * annotations.
+   * 
+   * @return
+   */
+  protected JPanel buildShowHidePanel()
+  {
+    JPanel showHideOptions = new JPanel(new FlowLayout(FlowLayout.LEFT));
+    CheckboxGroup showOrHide = new CheckboxGroup();
+
+    /*
+     * Radio button 'Show selected annotations' - initially unselected
+     */
+    String showLabel = MessageManager
+            .getString("label.show_selected_annotations");
+    final Checkbox showOption = new Checkbox(showLabel, showOrHide, false);
+    showOption.addItemListener(new ItemListener()
+    {
+      @Override
+      public void itemStateChanged(ItemEvent evt)
+      {
+        if (evt.getStateChange() == ItemEvent.SELECTED) {
+          AnnotationChooser.this.setShowSelected(true);
+          AnnotationChooser.this.changeShowHide_actionPerformed();
+        }
+      }
+    });
+    showHideOptions.add(showOption);
+
+    /*
+     * Radio button 'hide selected annotations'- initially selected
+     */
+    String hideLabel = MessageManager
+            .getString("label.hide_selected_annotations");
+    final Checkbox hideOption = new Checkbox(hideLabel, showOrHide, true);
+    hideOption.addItemListener(new ItemListener()
+    {
+      @Override
+      public void itemStateChanged(ItemEvent evt)
+      {
+        if (evt.getStateChange() == ItemEvent.SELECTED)
+        {
+          AnnotationChooser.this.setShowSelected(false);
+          AnnotationChooser.this.changeShowHide_actionPerformed();
+        }
+      }
+    });
+    showHideOptions.add(hideOption);
+
+    /*
+     * Set member variable to match initial selection state
+     */
+    this.showSelected = showOption.getState();
+
+    return showHideOptions;
+  }
+
+  /**
+   * Construct the panel with OK and Cancel buttons.
+   * 
+   * @return
+   */
+  protected JPanel buildActionButtonsPanel()
+  {
+    JPanel jp = new JPanel();
+    final Font labelFont = JvSwingUtils.getLabelFont();
+    
+    JButton ok = new JButton(MessageManager.getString("action.ok"));
+    ok.setFont(labelFont);
+    ok.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        close_actionPerformed();
+      }
+    });
+    jp.add(ok);
+    
+    JButton cancel = new JButton(MessageManager.getString("action.cancel"));
+    cancel.setFont(labelFont);
+    cancel.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        cancel_actionPerformed();
+      }
+    });
+    jp.add(cancel);
+
+    return jp;
+  }
+
+  /**
+   * On 'Cancel' button, undo any changes.
+   */
+  protected void cancel_actionPerformed()
+  {
+    resetOriginalState();
+    this.ap.repaint();
+    close_actionPerformed();
+  }
+
+  /**
+   * Restore annotation visibility to their state on entry here, and repaint
+   * alignment.
+   */
+  protected void resetOriginalState()
+  {
+    int i = 0;
+    for (AlignmentAnnotation aa : this.ap.getAlignment()
+            .getAlignmentAnnotation())
+    {
+      aa.visible = this.resetState[i++];
+    }
+  }
+
+  /**
+   * On 'Close' button, close the dialog.
+   */
+  protected void close_actionPerformed()
+  {
+    try
+    {
+      this.frame.setClosed(true);
+    } catch (Exception exe)
+    {
+    }
+  }
+
+  /**
+   * Render a frame containing this panel.
+   */
+  private void showFrame()
+  {
+    frame = new JInternalFrame();
+    frame.setContentPane(this);
+    frame.setLayer(JLayeredPane.PALETTE_LAYER);
+    Desktop.addInternalFrame(frame,
+            MessageManager.getString("label.choose_annotations"),
+            MY_FRAME_WIDTH, MY_FRAME_HEIGHT, true);
+  }
+
+  protected void setShowSelected(boolean showSelected)
+  {
+    this.showSelected = showSelected;
+  }
+
+  protected void setApplyToSelectedSequences(
+          boolean applyToSelectedSequences)
+  {
+    this.applyToSelectedSequences = applyToSelectedSequences;
+  }
+
+  protected void setApplyToUnselectedSequences(
+          boolean applyToUnselectedSequences)
+  {
+    this.applyToUnselectedSequences = applyToUnselectedSequences;
+  }
+
+  protected boolean isShowSelected()
+  {
+    return showSelected;
+  }
+
+  protected boolean isApplyToSelectedSequences()
+  {
+    return applyToSelectedSequences;
+  }
+
+  protected boolean isApplyToUnselectedSequences()
+  {
+    return applyToUnselectedSequences;
+  }
+
+}
index 7226eb0..3c552a4 100644 (file)
  */
 package jalview.gui;
 
-import java.util.*;
-
-import java.awt.*;
-import java.awt.event.*;
-
-import javax.swing.*;
-import javax.swing.event.*;
-
-import net.miginfocom.swing.MigLayout;
-
 import jalview.bin.Cache;
-import jalview.datamodel.*;
-import jalview.schemes.*;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.SequenceGroup;
+import jalview.schemes.AnnotationColourGradient;
+import jalview.schemes.ColourSchemeI;
 import jalview.util.MessageManager;
 
+import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.Hashtable;
+import java.util.Vector;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JColorChooser;
+import javax.swing.JComboBox;
+import javax.swing.JInternalFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.JTextField;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import net.miginfocom.swing.MigLayout;
 
 public class AnnotationColourChooser extends JPanel
 {
@@ -84,11 +100,12 @@ public class AnnotationColourChooser extends JPanel
 
     slider.addChangeListener(new ChangeListener()
     {
+      @Override
       public void stateChanged(ChangeEvent evt)
       {
         if (!adjusting)
         {
-          thresholdValue.setText(((float) slider.getValue() / 1000f) + "");
+          thresholdValue.setText((slider.getValue() / 1000f) + "");
           valueChanged(!sliderDragging);
         }
       }
@@ -109,6 +126,7 @@ public class AnnotationColourChooser extends JPanel
         super.mouseDragged(e);
       }
 
+      @Override
       public void mouseReleased(MouseEvent evt)
       {
         if (sliderDragging)
@@ -212,7 +230,7 @@ public class AnnotationColourChooser extends JPanel
       if (!list.contains(label))
       {
         anmap[list.size()] = i;
-        list.addElement(label);
+        list.add(label);
 
       }
       else
@@ -220,13 +238,13 @@ public class AnnotationColourChooser extends JPanel
         if (!isSeqAssociated)
         {
           anmap[list.size()] = i;
-          list.addElement(label + "_" + (index++));
+          list.add(label + "_" + (index++));
         }
       }
     }
     seqAssociated.setEnabled(enableSeqAss);
-    annmap = new int[list.size()];
-    System.arraycopy(anmap, 0, annmap, 0, annmap.length);
+    this.annmap = new int[list.size()];
+    System.arraycopy(anmap, 0, this.annmap, 0, this.annmap.length);
     return list;
   }
 
@@ -257,6 +275,7 @@ public class AnnotationColourChooser extends JPanel
     minColour.setToolTipText(MessageManager.getString("label.min_colour"));
     minColour.addMouseListener(new MouseAdapter()
     {
+      @Override
       public void mousePressed(MouseEvent e)
       {
         if (minColour.isEnabled())
@@ -271,6 +290,7 @@ public class AnnotationColourChooser extends JPanel
     maxColour.setToolTipText(MessageManager.getString("label.max_colour"));
     maxColour.addMouseListener(new MouseAdapter()
     {
+      @Override
       public void mousePressed(MouseEvent e)
       {
         if (maxColour.isEnabled())
@@ -283,6 +303,7 @@ public class AnnotationColourChooser extends JPanel
     ok.setText(MessageManager.getString("action.ok"));
     ok.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         ok_actionPerformed(e);
@@ -292,6 +313,7 @@ public class AnnotationColourChooser extends JPanel
     cancel.setText(MessageManager.getString("action.cancel"));
     cancel.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         cancel_actionPerformed(e);
@@ -313,6 +335,7 @@ public class AnnotationColourChooser extends JPanel
 
     annotations.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         annotations_actionPerformed(e);
@@ -320,6 +343,7 @@ public class AnnotationColourChooser extends JPanel
     });
     threshold.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         threshold_actionPerformed(e);
@@ -327,6 +351,7 @@ public class AnnotationColourChooser extends JPanel
     });
     thresholdValue.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         thresholdValue_actionPerformed(e);
@@ -346,6 +371,7 @@ public class AnnotationColourChooser extends JPanel
             .getString("label.use_original_colours"));
     currentColours.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         currentColours_actionPerformed(e);
@@ -357,6 +383,7 @@ public class AnnotationColourChooser extends JPanel
             .getString("label.threshold_minmax"));
     thresholdIsMin.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent actionEvent)
       {
         thresholdIsMin_actionPerformed(actionEvent);
@@ -678,7 +705,7 @@ public class AnnotationColourChooser extends JPanel
     {
       changeColour();
     }
-    currentAnnotation.threshold.value = (float) slider.getValue() / 1000f;
+    currentAnnotation.threshold.value = slider.getValue() / 1000f;
     propagateSeqAssociatedThreshold(updateAllAnnotation);
     ap.paintAlignment(false);
   }
index 009b807..ad6f9e5 100755 (executable)
  */
 package jalview.gui;
 
-import java.util.*;
-import java.util.regex.Pattern;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.io.FormatAdapter;
+import jalview.util.MessageManager;
 
-import java.awt.*;
-import java.awt.datatransfer.*;
-import java.awt.event.*;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.MediaTracker;
+import java.awt.RenderingHints;
+import java.awt.Toolkit;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
 import java.awt.geom.AffineTransform;
-import java.awt.image.*;
-import javax.swing.*;
+import java.awt.image.BufferedImage;
+import java.util.Arrays;
+import java.util.Vector;
+import java.util.regex.Pattern;
 
-import jalview.datamodel.*;
-import jalview.io.*;
-import jalview.util.MessageManager;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.SwingUtilities;
+import javax.swing.ToolTipManager;
 
 /**
  * DOCUMENT ME!
@@ -115,7 +139,7 @@ public class AnnotationLabels extends JPanel implements MouseListener,
     Graphics2D g = (Graphics2D) bi.getGraphics();
     g.rotate(Math.toRadians(90));
     g.drawImage(temp, 0, -bi.getWidth(this), this);
-    image = (Image) bi;
+    image = bi;
 
     addMouseListener(this);
     addMouseMotionListener(this);
@@ -249,11 +273,18 @@ public class AnnotationLabels extends JPanel implements MouseListener,
       aa[selectedRow].scaleColLabel = !aa[selectedRow].scaleColLabel;
     }
 
+    refresh();
+
+  }
+
+  /**
+   * Redraw sensibly.
+   */
+  protected void refresh()
+  {
     ap.validateAnnotationDimensions(false);
     ap.addNotify();
     ap.repaint();
-    // validate();
-    // ap.paintAlignment(true);
   }
 
   /**
@@ -467,7 +498,9 @@ public class AnnotationLabels extends JPanel implements MouseListener,
         this.setToolTipText(desc.toString());
       }
       else
+      {
         this.setToolTipText(null);
+      }
     }
 
   }
@@ -480,7 +513,7 @@ public class AnnotationLabels extends JPanel implements MouseListener,
    */
   public void mouseClicked(MouseEvent evt)
   {
-    AlignmentAnnotation[] aa = ap.av.getAlignment()
+    final AlignmentAnnotation[] aa = ap.av.getAlignment()
             .getAlignmentAnnotation();
     if (SwingUtilities.isLeftMouseButton(evt))
     {
@@ -579,6 +612,35 @@ public class AnnotationLabels extends JPanel implements MouseListener,
     item = new JMenuItem(HIDE);
     item.addActionListener(this);
     pop.add(item);
+    // JAL-1264 hide all sequence-specific annotations of this type
+    final String label = aa[selectedRow].label;
+    if (selectedRow < aa.length)
+    {
+      if (aa[selectedRow].sequenceRef != null)
+      {
+        JMenuItem hideType = new JMenuItem();
+        String text = MessageManager.getString("label.hide_all") + " " + label;
+        hideType.setText(text);
+        hideType.addActionListener(new ActionListener()
+        {
+          @Override
+          public void actionPerformed(ActionEvent e)
+          {
+            for (AlignmentAnnotation ann : ap.av.getAlignment()
+                    .getAlignmentAnnotation())
+            {
+              if (ann.sequenceRef != null && ann.label != null
+                      && ann.label.equals(label))
+              {
+                ann.visible = false;
+              }
+            }
+            refresh();
+          }
+        });
+        pop.add(hideType);
+      }
+    }
     item = new JMenuItem(DELETE);
     item.addActionListener(this);
     pop.add(item);
@@ -608,7 +670,7 @@ public class AnnotationLabels extends JPanel implements MouseListener,
           pop.add(item);
         }
       }
-      else if (aa[selectedRow].label.indexOf("Consensus") > -1)
+      else if (label.indexOf("Consensus") > -1)
       {
         pop.addSeparator();
         // av and sequencegroup need to implement same interface for
@@ -969,7 +1031,9 @@ public class AnnotationLabels extends JPanel implements MouseListener,
           offset -= fm.getDescent();
         }
         else
+        {
           offset += fm.getDescent();
+        }
 
         x = width - fm.stringWidth(aa[i].label) - 3;
 
index 01f1cb0..ce75821 100644 (file)
@@ -44,10 +44,12 @@ public class AssociatePdbFileWithSeq
           SequenceI sequence, boolean prompt)
   {
     PDBEntry entry = new PDBEntry();
+    MCview.PDBfile pdbfile = null;
     try
     {
-      MCview.PDBfile pdbfile = new MCview.PDBfile(choice, protocol);
-
+      // TODO JAL-674 extract secondary structure and transfer it to associated
+      // sequence
+      pdbfile = new MCview.PDBfile(false, false, choice, protocol);
       if (pdbfile.id == null)
       {
         String reply = null;
index 123aed2..63f0caa 100644 (file)
@@ -89,9 +89,9 @@ import javax.swing.JPopupMenu;
 import javax.swing.JProgressBar;
 import javax.swing.SwingUtilities;
 import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.HyperlinkEvent.EventType;
 import javax.swing.event.MenuEvent;
 import javax.swing.event.MenuListener;
-import javax.swing.event.HyperlinkEvent.EventType;
 
 /**
  * Jalview Desktop
@@ -317,8 +317,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
     else
     {
       Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-      setBounds((int) (screenSize.width - 900) / 2,
-              (int) (screenSize.height - 650) / 2, 900, 650);
+      setBounds((screenSize.width - 900) / 2,
+              (screenSize.height - 650) / 2, 900, 650);
     }
     jconsole = new Console(this, showjconsole);
     // add essential build information
@@ -1183,13 +1183,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
   {
     try
     {
-      ClassLoader cl = jalview.gui.Desktop.class.getClassLoader();
-      java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help");
-      javax.help.HelpSet hs = new javax.help.HelpSet(cl, url);
-
-      javax.help.HelpBroker hb = hs.createHelpBroker();
-      hb.setCurrentID("home");
-      hb.setDisplayed(true);
+      Help.showHelpWindow();
     } catch (Exception ex)
     {
     }
@@ -2364,7 +2358,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
       throw new Error(MessageManager.getString("error.call_setprogressbar_before_registering_handler"));
     }
     progressBarHandlers.put(new Long(id), handler);
-    final JPanel progressPanel = (JPanel) progressBars.get(new Long(id));
+    final JPanel progressPanel = progressBars.get(new Long(id));
     if (handler.canCancel())
     {
       JButton cancel = new JButton(
index 662d7c6..693e6fe 100644 (file)
  */
 package jalview.gui;
 
-import java.io.*;
-import java.util.*;
-import java.util.List;
-import java.awt.*;
-import java.awt.event.*;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.table.*;
-
 import jalview.analysis.AlignmentSorter;
 import jalview.bin.Cache;
 import jalview.commands.OrderCommand;
-import jalview.datamodel.*;
-import jalview.io.*;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.io.JalviewFileChooser;
 import jalview.schemes.AnnotationColourGradient;
 import jalview.schemes.GraduatedColor;
 import jalview.util.MessageManager;
 import jalview.ws.dbsources.das.api.jalviewSourceI;
 
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.GridLayout;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.AbstractCellEditor;
+import javax.swing.BorderFactory;
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JColorChooser;
+import javax.swing.JDialog;
+import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
+import javax.swing.JLayeredPane;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JSlider;
+import javax.swing.JTabbedPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+
 public class FeatureSettings extends JPanel
 {
   DasSourceBrowser dassourceBrowser;
@@ -115,6 +162,19 @@ public class FeatureSettings extends JPanel
                   (String) table.getValueAt(selectedRow, 0));
         }
       }
+
+      // isPopupTrigger fires on mouseReleased on Mac
+      @Override
+      public void mouseReleased(MouseEvent evt)
+      {
+        selectedRow = table.rowAtPoint(evt.getPoint());
+        if (evt.isPopupTrigger())
+        {
+          popupSort(selectedRow, (String) table.getValueAt(selectedRow, 0),
+                  table.getValueAt(selectedRow, 1), fr.minmax, evt.getX(),
+                  evt.getY());
+        }
+      }
     });
 
     table.addMouseMotionListener(new MouseMotionAdapter()
@@ -661,7 +721,7 @@ public class FeatureSettings extends JPanel
                 file), "UTF-8");
 
         jalview.schemabinding.version2.JalviewUserColours jucs = new jalview.schemabinding.version2.JalviewUserColours();
-        jucs = (jalview.schemabinding.version2.JalviewUserColours) jucs
+        jucs = jucs
                 .unmarshal(in);
 
         for (int i = jucs.getColourCount() - 1; i >= 0; i--)
@@ -1028,7 +1088,7 @@ public class FeatureSettings extends JPanel
     {
       public void stateChanged(ChangeEvent evt)
       {
-        fr.setTransparency((float) (100 - transparency.getValue()) / 100f);
+        fr.setTransparency((100 - transparency.getValue()) / 100f);
         af.alignPanel.paintAlignment(true);
       }
     });
index bc5f823..8eddc06 100755 (executable)
  */
 package jalview.gui;
 
-import java.util.*;
-import java.awt.event.*;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.jbgui.GFinder;
+import jalview.util.MessageManager;
 
-import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.util.Vector;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
-import jalview.datamodel.*;
-import jalview.jbgui.*;
-import jalview.util.MessageManager;
+import javax.swing.JInternalFrame;
+import javax.swing.JLayeredPane;
+import javax.swing.JOptionPane;
 
 /**
- * DOCUMENT ME!
+ * Performs the menu option for searching the alignment, for the next or all
+ * matches. If matches are found, they are highlighted, and the user has the
+ * option to create a new feature on the alignment for the matched positions.
+ * 
+ * Searches can be for a simple base sequence, or may use a regular expression.
+ * Any gaps are ignored.
  * 
  * @author $author$
  * @version $Revision$
  */
 public class Finder extends GFinder
 {
+  private static final int HEIGHT = 110;
+
+  private static final int WIDTH = 340;
+
   AlignViewport av;
 
   AlignmentPanel ap;
@@ -50,14 +65,7 @@ public class Finder extends GFinder
   SearchResults searchResults;
 
   /**
-   * Creates a new Finder object.
-   * 
-   * @param av
-   *          DOCUMENT ME!
-   * @param ap
-   *          DOCUMENT ME!
-   * @param f
-   *          DOCUMENT ME!
+   * Creates a new Finder object with no associated viewport or panel.
    */
   public Finder()
   {
@@ -65,6 +73,13 @@ public class Finder extends GFinder
     focusfixed = false;
   }
 
+  /**
+   * Constructor given an associated viewport and alignment panel. Constructs
+   * and displays an internal frame where the user can enter a search string.
+   * 
+   * @param viewport
+   * @param alignPanel
+   */
   public Finder(AlignViewport viewport, AlignmentPanel alignPanel)
   {
     av = viewport;
@@ -73,16 +88,16 @@ public class Finder extends GFinder
     frame = new JInternalFrame();
     frame.setContentPane(this);
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
-    Desktop.addInternalFrame(frame, "Find", 340, 110);
+    Desktop.addInternalFrame(frame, MessageManager.getString("label.find"),
+            WIDTH, HEIGHT);
 
     textfield.requestFocus();
   }
 
   /**
-   * DOCUMENT ME!
+   * Performs the 'Find Next' action.
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   public void findNext_actionPerformed(ActionEvent e)
   {
@@ -93,10 +108,9 @@ public class Finder extends GFinder
   }
 
   /**
-   * DOCUMENT ME!
+   * Performs the 'Find All' action.
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   public void findAll_actionPerformed(ActionEvent e)
   {
@@ -178,10 +192,10 @@ public class Finder extends GFinder
   }
 
   /**
-   * incrementally search the alignment
+   * Search the alignment for the next or all matches. If 'all matches', a
+   * dialog is shown with the number of sequence ids and subsequences matched.
    * 
    * @param findAll
-   *          true means find all results and raise a dialog box
    */
   void doSearch(boolean findAll)
   {
@@ -189,7 +203,7 @@ public class Finder extends GFinder
 
     String searchString = textfield.getText().trim();
 
-    if (searchString.length() < 1)
+    if (isInvalidSearchString(searchString))
     {
       return;
     }
@@ -269,4 +283,54 @@ public class Finder extends GFinder
     }
 
   }
+
+  /**
+   * Displays an error dialog, and answers false, if the search string is
+   * invalid, else answers true.
+   * 
+   * @param searchString
+   * @return
+   */
+  protected boolean isInvalidSearchString(String searchString)
+  {
+    String error = getSearchValidationError(searchString);
+    if (error == null)
+    {
+      return false;
+    }
+    JOptionPane.showInternalMessageDialog(this, error,
+            MessageManager.getString("label.invalid_search"), // $NON-NLS-1$
+            JOptionPane.ERROR_MESSAGE);
+    return true;
+  }
+
+  /**
+   * Returns an error message string if the search string is invalid, else
+   * returns null.
+   * 
+   * Currently validation is limited to checking the string is not empty, and is
+   * a valid regular expression (simple searches for base sub-sequences will
+   * pass this test). Additional validations may be added in future if the
+   * search syntax is expanded.
+   * 
+   * @param searchString
+   * @return
+   */
+  protected String getSearchValidationError(String searchString)
+  {
+    String error = null;
+    if (searchString == null || searchString.length() == 0)
+    {
+      error = MessageManager.getString("label.invalid_search");
+    }
+    try
+    {
+      Pattern.compile(searchString);
+    } catch (PatternSyntaxException e)
+    {
+      error = MessageManager.getString("error.invalid_regex") + ": "
+              + e.getDescription();
+    }
+    return error;
+  }
 }
diff --git a/src/jalview/gui/Help.java b/src/jalview/gui/Help.java
new file mode 100644 (file)
index 0000000..dac17c0
--- /dev/null
@@ -0,0 +1,55 @@
+package jalview.gui;
+
+import java.net.URL;
+
+import javax.help.HelpBroker;
+import javax.help.HelpSet;
+import javax.help.HelpSetException;
+
+/**
+ * Utility class to show the help documentation window.
+ * 
+ * @author gmcarstairs
+ *
+ */
+public class Help
+{
+
+  private static final long HALF_A_MO = 500; // half a second
+
+  private static long lastOpenedTime = 0L;
+
+  /**
+   * Not instantiable
+   */
+  private Help()
+  {
+
+  }
+
+  /**
+   * Show help text in a new window. But do nothing if within half a second of
+   * the last invocation.
+   * 
+   * This is a workaround for issue JAL-914 - both Desktop and AlignFrame
+   * responding to F1 key, resulting in duplicate help windows opened.
+   * 
+   * @throws HelpSetException
+   */
+  public static void showHelpWindow() throws HelpSetException
+  {
+    long timeNow = System.currentTimeMillis();
+
+    if (timeNow - lastOpenedTime > HALF_A_MO)
+    {
+      lastOpenedTime = timeNow;
+      ClassLoader cl = Desktop.class.getClassLoader();
+      URL url = HelpSet.findHelpSet(cl, "help/help"); // $NON-NLS-$
+      HelpSet hs = new HelpSet(cl, url);
+
+      HelpBroker hb = hs.createHelpBroker();
+      hb.setCurrentID("home");
+      hb.setDisplayed(true);
+    }
+  }
+}
index 39afd2c..6b1109a 100755 (executable)
  */
 package jalview.gui;
 
-import java.awt.*;
-import java.awt.event.*;
-import java.util.List;
-import java.util.Vector;
-
-import javax.swing.*;
-
-import jalview.datamodel.*;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
 import jalview.io.SequenceAnnotationReport;
 import jalview.util.MessageManager;
 import jalview.util.UrlLink;
 
+import java.awt.BorderLayout;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.ToolTipManager;
+
 /**
- * DOCUMENT ME!
+ * This panel hosts alignment sequence ids and responds to mouse clicks on them,
+ * as well as highlighting ids matched by a search from the Find menu.
  * 
  * @author $author$
  * @version $Revision$
@@ -64,9 +75,7 @@ public class IdPanel extends JPanel implements MouseListener,
    * Creates a new IdPanel object.
    * 
    * @param av
-   *          DOCUMENT ME!
    * @param parent
-   *          DOCUMENT ME!
    */
   public IdPanel(AlignViewport av, AlignmentPanel parent)
   {
@@ -84,7 +93,8 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Respond to mouse movement by constructing tooltip text for the sequence id
+   * under the mouse.
    * 
    * @param e
    *          DOCUMENT ME!
@@ -97,7 +107,7 @@ public class IdPanel extends JPanel implements MouseListener,
     if (seq > -1 && seq < av.getAlignment().getHeight())
     {
       SequenceI sequence = av.getAlignment().getSequenceAt(seq);
-      StringBuffer tip = new StringBuffer();
+      StringBuffer tip = new StringBuffer(64);
       seqAnnotReport
               .createSequenceAnnotationReport(tip, sequence,
                       av.isShowDbRefs(), av.isShowNpFeats(),
@@ -108,10 +118,10 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Responds to a mouse drag by selecting the sequences under the dragged
+   * region.
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   @Override
   public void mouseDragged(MouseEvent e)
@@ -133,6 +143,9 @@ public class IdPanel extends JPanel implements MouseListener,
     alignPanel.paintAlignment(true);
   }
 
+  /**
+   * Response to the mouse wheel by scrolling the alignment panel.
+   */
   @Override
   public void mouseWheelMoved(MouseWheelEvent e)
   {
@@ -142,7 +155,6 @@ public class IdPanel extends JPanel implements MouseListener,
       if (e.isShiftDown())
       {
         alignPanel.scrollRight(true);
-
       }
       else
       {
@@ -163,20 +175,28 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Handle a mouse click event. Currently only responds to a double-click. The
+   * action is to try to open a browser window at a URL that searches for the
+   * selected sequence id. The search URL is configured in Preferences |
+   * Connections | URL link from Sequence ID. For example:
+   * 
+   * http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   @Override
   public void mouseClicked(MouseEvent e)
   {
-    if (e.getClickCount() < 2)
+    /*
+     * Ignore single click. Ignore 'left' click followed by 'right' click (user
+     * selects a row then its pop-up menu).
+     */
+    if (e.getClickCount() < 2 || SwingUtilities.isRightMouseButton(e))
     {
       return;
     }
 
-    java.util.Vector links = Preferences.sequenceURLLinks;
+    Vector links = Preferences.sequenceURLLinks;
     if (links == null || links.size() < 1)
     {
       return;
@@ -231,7 +251,6 @@ public class IdPanel extends JPanel implements MouseListener,
                       MessageManager.getString("label.web_browser_not_found"), JOptionPane.WARNING_MESSAGE);
       ex.printStackTrace();
     }
-
   }
 
   /**
@@ -276,22 +295,29 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Respond to a mouse press. Does nothing for (left) double-click as this is
+   * handled by mouseClicked().
+   * 
+   * Right mouse down - construct and show context menu.
+   * 
+   * Ctrl-down or Shift-down - add to or expand current selection group if there
+   * is one.
+   * 
+   * Mouse down - select this sequence.
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   @Override
   public void mousePressed(MouseEvent e)
   {
-    if (e.getClickCount() == 2)
+    if (e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton(e))
     {
       return;
     }
 
     int seq = alignPanel.seqPanel.findSeq(e);
 
-    if (javax.swing.SwingUtilities.isRightMouseButton(e))
+    if (SwingUtilities.isRightMouseButton(e))
     {
       Sequence sq = (Sequence) av.getAlignment().getSequenceAt(seq);
       // build a new links menu based on the current links + any non-positional
@@ -341,10 +367,9 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Toggle whether the sequence is part of the current selection group.
    * 
    * @param seq
-   *          DOCUMENT ME!
    */
   void selectSeq(int seq)
   {
@@ -355,12 +380,11 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Add contiguous rows of the alignment to the current selection group. Does
+   * nothing if there is no selection group.
    * 
    * @param start
-   *          DOCUMENT ME!
    * @param end
-   *          DOCUMENT ME!
    */
   void selectSeqs(int start, int end)
   {
@@ -392,10 +416,10 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Respond to mouse released. Refreshes the display and triggers broadcast of
+   * the new selection group to any listeners.
    * 
    * @param e
-   *          DOCUMENT ME!
    */
   @Override
   public void mouseReleased(MouseEvent e)
@@ -412,10 +436,10 @@ public class IdPanel extends JPanel implements MouseListener,
   }
 
   /**
-   * DOCUMENT ME!
+   * Highlight sequence ids that match the given list, and if necessary scroll
+   * to the start sequence of the list.
    * 
    * @param list
-   *          DOCUMENT ME!
    */
   public void highlightSearchResults(List<SequenceI> list)
   {
index 78ddb3f..d2f04a1 100644 (file)
@@ -390,12 +390,12 @@ public class OptsAndParamsPage
         // Only create description boxes if there actually is a description.
         if (finfo != null)
         {
-          showDesc.setToolTipText(JvSwingUtils.wrapTooltip(false, MessageManager.formatMessage("label.opt_and_params_show_brief_desc_image_link", new String[]{linkImageURL.toExternalForm()})));
+          showDesc.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.formatMessage("label.opt_and_params_show_brief_desc_image_link", new String[]{linkImageURL.toExternalForm()})));
           showDesc.addMouseListener(this);
         }
         else
         {
-          showDesc.setToolTipText(JvSwingUtils.wrapTooltip(false, MessageManager.getString("label.opt_and_params_show_brief_desc")));
+          showDesc.setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.opt_and_params_show_brief_desc")));
         }
         showDesc.addActionListener(new ActionListener()
         {
index 0957d28..ad7726d 100644 (file)
 package jalview.gui;
 
 import jalview.analysis.AAFrequency;
+import jalview.analysis.AlignmentAnnotationUtils;
 import jalview.analysis.Conservation;
 import jalview.commands.ChangeCaseCommand;
 import jalview.commands.EditCommand;
 import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.AlignmentView;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.PDBEntry;
@@ -59,8 +58,16 @@ import jalview.util.UrlLink;
 import java.awt.Color;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 import java.util.Vector;
 
 import javax.swing.ButtonGroup;
@@ -80,6 +87,10 @@ import javax.swing.JRadioButtonMenuItem;
  */
 public class PopupMenu extends JPopupMenu
 {
+  private static final String ALL_ANNOTATIONS = "All";
+
+  private static final String COMMA = ",";
+
   JMenu groupMenu = new JMenu();
 
   JMenuItem groupName = new JMenuItem();
@@ -129,6 +140,8 @@ public class PopupMenu extends JPopupMenu
 
   JMenuItem sequenceSelDetails = new JMenuItem();
 
+  JMenuItem chooseAnnotations = new JMenuItem();
+
   SequenceI sequence;
 
   JMenuItem createGroupMenuItem = new JMenuItem();
@@ -177,6 +190,12 @@ public class PopupMenu extends JPopupMenu
 
   JMenu outputMenu = new JMenu();
 
+  JMenu showAnnotationsMenu = new JMenu();
+
+  JMenu hideAnnotationsMenu = new JMenu();
+
+  JMenuItem addReferenceAnnotations = new JMenuItem();
+
   JMenuItem sequenceFeature = new JMenuItem();
 
   JMenuItem textColour = new JMenuItem();
@@ -251,6 +270,7 @@ public class PopupMenu extends JPopupMenu
 
       item.addActionListener(new java.awt.event.ActionListener()
       {
+        @Override
         public void actionPerformed(ActionEvent e)
         {
           outputText_actionPerformed(e);
@@ -260,6 +280,20 @@ public class PopupMenu extends JPopupMenu
       outputMenu.add(item);
     }
 
+    /*
+     * Build menus for annotation types that may be shown or hidden, and for
+     * 'reference annotations' that may be added to the alignment. The scope is
+     * annotations for the current selection group (if there is one), else the
+     * current sequence (if there is one), else not applicable (e.g. for popup
+     * menu within the sequence).
+     */
+    final List<SequenceI> sequenceScope = getSequenceScope(seq);
+    if (!sequenceScope.isEmpty())
+    {
+      buildAnnotationTypesMenus(sequenceScope);
+      configureReferenceAnnotationsMenu(addReferenceAnnotations, sequenceScope);
+    }
+
     try
     {
       jbInit();
@@ -285,8 +319,9 @@ public class PopupMenu extends JPopupMenu
 
           menuItem = new JMenuItem();
           menuItem.setText(pdb.getId());
-          menuItem.addActionListener(new java.awt.event.ActionListener()
+          menuItem.addActionListener(new ActionListener()
           {
+            @Override
             public void actionPerformed(ActionEvent e)
             {
               // TODO re JAL-860: optionally open dialog or provide a menu entry
@@ -298,7 +333,6 @@ public class PopupMenu extends JPopupMenu
                               ap.av.collateForPDB(new PDBEntry[]
                               { pdb })[0], null, ap);
             }
-
           });
           viewStructureMenu.add(menuItem);
 
@@ -335,8 +369,8 @@ public class PopupMenu extends JPopupMenu
                     "label.2d_rna_structure_line", new String[]
                     { structureLine }));
             menuItem.addActionListener(new java.awt.event.ActionListener()
-
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 // System.out.println("1:"+structureLine);
@@ -377,6 +411,7 @@ public class PopupMenu extends JPopupMenu
                       { seq.getName() }));
               menuItem.addActionListener(new java.awt.event.ActionListener()
               {
+                @Override
                 public void actionPerformed(ActionEvent e)
                 {
                   // TODO: VARNA does'nt print gaps in the sequence
@@ -397,6 +432,7 @@ public class PopupMenu extends JPopupMenu
               MessageManager.getString("action.hide_sequences"));
       menuItem.addActionListener(new java.awt.event.ActionListener()
       {
+        @Override
         public void actionPerformed(ActionEvent e)
         {
           hideSequences(false);
@@ -412,6 +448,7 @@ public class PopupMenu extends JPopupMenu
                 { seq.getName() }));
         menuItem.addActionListener(new java.awt.event.ActionListener()
         {
+          @Override
           public void actionPerformed(ActionEvent e)
           {
             hideSequences(true);
@@ -431,6 +468,7 @@ public class PopupMenu extends JPopupMenu
                   MessageManager.getString("action.reveal_sequences"));
           menuItem.addActionListener(new ActionListener()
           {
+            @Override
             public void actionPerformed(ActionEvent e)
             {
               ap.av.showSequence(index);
@@ -452,6 +490,7 @@ public class PopupMenu extends JPopupMenu
                 MessageManager.getString("action.reveal_all"));
         menuItem.addActionListener(new ActionListener()
         {
+          @Override
           public void actionPerformed(ActionEvent e)
           {
             ap.av.showAllHiddenSeqs();
@@ -555,8 +594,7 @@ public class PopupMenu extends JPopupMenu
       SequenceI sqass = null;
       for (SequenceI sq : ap.av.getSequenceSelection())
       {
-        Vector<PDBEntry> pes = (Vector<PDBEntry>) sq.getDatasetSequence()
-                .getPDBId();
+        Vector<PDBEntry> pes = sq.getDatasetSequence().getPDBId();
         if (pes != null && pes.size() > 0)
         {
           reppdb.put(pes.get(0).getId(), pes.get(0));
@@ -770,6 +808,158 @@ public class PopupMenu extends JPopupMenu
     }
   }
 
+  /**
+   * Add annotation types to a 'Show annotations' or 'Hide annotations' menu.
+   * "All" is added first, followed by a separator. Then add any annotation
+   * types associated with the current selection.
+   * <p>
+   * Some annotation rows are always rendered together - these can be identified
+   * by a common graphGroup property > -1. Only one of each group will be marked
+   * as visible (to avoid duplication of the display). For such groups we add a
+   * composite type name, e.g.
+   * <p>
+   * IUPredWS (Long), IUPredWS (Short)
+   * 
+   * @param forSequences
+   */
+  protected void buildAnnotationTypesMenus(List<SequenceI> forSequences)
+  {
+    showAnnotationsMenu.removeAll();
+    hideAnnotationsMenu.removeAll();
+    final List<String> all = Arrays.asList(ALL_ANNOTATIONS);
+    addAnnotationTypeToShowHide(showAnnotationsMenu, forSequences, "", all,
+            true, true);
+    addAnnotationTypeToShowHide(hideAnnotationsMenu, forSequences, "", all,
+            true, false);
+    showAnnotationsMenu.addSeparator();
+    hideAnnotationsMenu.addSeparator();
+
+    final AlignmentAnnotation[] annotations = ap.getAlignment()
+            .getAlignmentAnnotation();
+
+    /*
+     * Find shown/hidden annotations types, distinguished by source (calcId),
+     * and grouped by graphGroup.
+     */
+    Map<String, List<List<String>>> shownTypes = new HashMap<String, List<List<String>>>();
+    Map<String, List<List<String>>> hiddenTypes = new HashMap<String, List<List<String>>>();
+    AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes,
+            hiddenTypes,
+            AlignmentAnnotationUtils.asList(annotations),
+            forSequences);
+
+    for (String calcId : hiddenTypes.keySet())
+    {
+      for (List<String> type : hiddenTypes.get(calcId))
+      {
+        addAnnotationTypeToShowHide(showAnnotationsMenu, forSequences,
+                calcId, type, false, true);
+      }
+    }
+    // grey out 'show annotations' if none are hidden
+    showAnnotationsMenu.setEnabled(!hiddenTypes.isEmpty());
+
+    for (String calcId : shownTypes.keySet())
+    {
+      for (List<String> type : shownTypes.get(calcId))
+      {
+        addAnnotationTypeToShowHide(hideAnnotationsMenu, forSequences,
+                calcId, type, false, false);
+      }
+    }
+    // grey out 'hide annotations' if none are shown
+    hideAnnotationsMenu.setEnabled(!shownTypes.isEmpty());
+  }
+
+  /**
+   * Returns a list of sequences - either the current selection group (if there
+   * is one), else the specified single sequence.
+   * 
+   * @param seq
+   * @return
+   */
+  protected List<SequenceI> getSequenceScope(SequenceI seq)
+  {
+    List<SequenceI> forSequences = null;
+    final SequenceGroup selectionGroup = ap.av.getSelectionGroup();
+    if (selectionGroup != null && selectionGroup.getSize() > 0)
+    {
+      forSequences = selectionGroup.getSequences();
+    }
+    else
+    {
+      forSequences = seq == null ? Collections.<SequenceI> emptyList()
+              : Arrays.asList(seq);
+    }
+    return forSequences;
+  }
+
+  /**
+   * Add one annotation type to the 'Show Annotations' or 'Hide Annotations'
+   * menus.
+   * 
+   * @param showOrHideMenu
+   *          the menu to add to
+   * @param forSequences
+   *          the sequences whose annotations may be shown or hidden
+   * @param calcId
+   * @param types
+   *          the label to add
+   * @param allTypes
+   *          if true this is a special label meaning 'All'
+   * @param actionIsShow
+   *          if true, the select menu item action is to show the annotation
+   *          type, else hide
+   */
+  protected void addAnnotationTypeToShowHide(JMenu showOrHideMenu,
+          final List<SequenceI> forSequences, String calcId,
+          final List<String> types, final boolean allTypes,
+          final boolean actionIsShow)
+  {
+    String label = types.toString(); // [a, b, c]
+    label = label.substring(1, label.length() - 1);
+    final JMenuItem item = new JMenuItem(label);
+    item.setToolTipText(calcId);
+    item.addActionListener(new java.awt.event.ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        showHideAnnotation_actionPerformed(types, forSequences, allTypes,
+                actionIsShow);
+      }
+    });
+    showOrHideMenu.add(item);
+  }
+
+  /**
+   * Action on selecting a list of annotation type (or the 'all types' values)
+   * to show or hide for the specified sequences.
+   * 
+   * @param types
+   * @param forSequences
+   * @param anyType
+   * @param doShow
+   */
+  protected void showHideAnnotation_actionPerformed(
+          Collection<String> types, List<SequenceI> forSequences,
+          boolean anyType, boolean doShow)
+  {
+    for (AlignmentAnnotation aa : ap.getAlignment()
+            .getAlignmentAnnotation())
+    {
+      if (anyType || types.contains(aa.label))
+      {
+        if ((aa.sequenceRef != null)
+                && forSequences.contains(aa.sequenceRef))
+        {
+          aa.visible = doShow;
+        }
+      }
+    }
+    refresh();
+  }
+
   private void buildGroupURLMenu(SequenceGroup sg, Vector groupLinks)
   {
 
@@ -942,11 +1132,13 @@ public class PopupMenu extends JPopupMenu
             { url }));
     item.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         new Thread(new Runnable()
         {
 
+          @Override
           public void run()
           {
             showLink(url);
@@ -982,11 +1174,13 @@ public class PopupMenu extends JPopupMenu
     // TODO: put in info about what is being sent.
     item.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         new Thread(new Runnable()
         {
 
+          @Override
           public void run()
           {
             try
@@ -1017,6 +1211,7 @@ public class PopupMenu extends JPopupMenu
     groupName.setText(MessageManager.getString("label.name"));
     groupName.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         groupName_actionPerformed();
@@ -1027,15 +1222,27 @@ public class PopupMenu extends JPopupMenu
             .getString("label.edit_name_description"));
     sequenceName.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         sequenceName_actionPerformed();
       }
     });
+    chooseAnnotations.setText(MessageManager
+            .getString("label.choose_annotations") + "...");
+    chooseAnnotations.addActionListener(new java.awt.event.ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        chooseAnnotations_actionPerformed(e);
+      }
+    });
     sequenceDetails.setText(MessageManager
             .getString("label.sequence_details") + "...");
     sequenceDetails.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         sequenceDetails_actionPerformed();
@@ -1046,6 +1253,7 @@ public class PopupMenu extends JPopupMenu
     sequenceSelDetails
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 sequenceSelectionDetails_actionPerformed();
@@ -1056,6 +1264,7 @@ public class PopupMenu extends JPopupMenu
             .setText(MessageManager.getString("action.remove_group"));
     unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         unGroupMenuItem_actionPerformed();
@@ -1066,6 +1275,7 @@ public class PopupMenu extends JPopupMenu
     createGroupMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 createGroupMenuItem_actionPerformed();
@@ -1075,6 +1285,7 @@ public class PopupMenu extends JPopupMenu
     outline.setText(MessageManager.getString("action.border_colour"));
     outline.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         outline_actionPerformed();
@@ -1084,6 +1295,7 @@ public class PopupMenu extends JPopupMenu
             .setText(MessageManager.getString("label.nucleotide"));
     nucleotideMenuItem.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         nucleotideMenuItem_actionPerformed();
@@ -1094,6 +1306,7 @@ public class PopupMenu extends JPopupMenu
     showBoxes.setState(true);
     showBoxes.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showBoxes_actionPerformed();
@@ -1103,6 +1316,7 @@ public class PopupMenu extends JPopupMenu
     showText.setState(true);
     showText.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showText_actionPerformed();
@@ -1111,6 +1325,7 @@ public class PopupMenu extends JPopupMenu
     showColourText.setText(MessageManager.getString("label.colour_text"));
     showColourText.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showColourText_actionPerformed();
@@ -1121,6 +1336,7 @@ public class PopupMenu extends JPopupMenu
     displayNonconserved.setState(true);
     displayNonconserved.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showNonconserved_actionPerformed();
@@ -1130,6 +1346,7 @@ public class PopupMenu extends JPopupMenu
     cut.setText(MessageManager.getString("action.cut"));
     cut.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         cut_actionPerformed();
@@ -1138,6 +1355,7 @@ public class PopupMenu extends JPopupMenu
     upperCase.setText(MessageManager.getString("label.to_upper_case"));
     upperCase.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         changeCase(e);
@@ -1146,6 +1364,7 @@ public class PopupMenu extends JPopupMenu
     copy.setText(MessageManager.getString("action.copy"));
     copy.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         copy_actionPerformed();
@@ -1154,6 +1373,7 @@ public class PopupMenu extends JPopupMenu
     lowerCase.setText(MessageManager.getString("label.to_lower_case"));
     lowerCase.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         changeCase(e);
@@ -1162,6 +1382,7 @@ public class PopupMenu extends JPopupMenu
     toggle.setText(MessageManager.getString("label.toggle_case"));
     toggle.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         changeCase(e);
@@ -1172,6 +1393,7 @@ public class PopupMenu extends JPopupMenu
     pdbFromFile.setText(MessageManager.getString("label.from_file"));
     pdbFromFile.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         pdbFromFile_actionPerformed();
@@ -1206,6 +1428,7 @@ public class PopupMenu extends JPopupMenu
     enterPDB.setText(MessageManager.getString("label.enter_pdb_id"));
     enterPDB.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         enterPDB_actionPerformed();
@@ -1214,6 +1437,7 @@ public class PopupMenu extends JPopupMenu
     discoverPDB.setText(MessageManager.getString("label.discover_pdb_ids"));
     discoverPDB.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         discoverPDB_actionPerformed();
@@ -1221,10 +1445,15 @@ public class PopupMenu extends JPopupMenu
     });
     outputMenu.setText(MessageManager.getString("label.out_to_textbox")
             + "...");
+    showAnnotationsMenu.setText(MessageManager
+            .getString("label.show_annotations"));
+    hideAnnotationsMenu.setText(MessageManager
+            .getString("label.hide_annotations"));
     sequenceFeature.setText(MessageManager
             .getString("label.create_sequence_feature"));
     sequenceFeature.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         sequenceFeature_actionPerformed();
@@ -1233,6 +1462,7 @@ public class PopupMenu extends JPopupMenu
     textColour.setText(MessageManager.getString("label.text_colour"));
     textColour.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         textColour_actionPerformed();
@@ -1247,6 +1477,7 @@ public class PopupMenu extends JPopupMenu
             + "...");
     editSequence.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent actionEvent)
       {
         editSequence_actionPerformed(actionEvent);
@@ -1263,6 +1494,26 @@ public class PopupMenu extends JPopupMenu
     add(groupMenu);
     add(sequenceMenu);
     this.add(structureMenu);
+    // annotations configuration panel suppressed for now
+    // groupMenu.add(chooseAnnotations);
+
+    /*
+     * Add show/hide annotations to either Selection menu (if a selection group
+     * in force), else to the Sequence menu.
+     */
+    SequenceGroup sg = this.ap.av.getSelectionGroup();
+    if (sg != null && sg.getSize() > 0)
+    {
+      groupMenu.add(showAnnotationsMenu);
+      groupMenu.add(hideAnnotationsMenu);
+      groupMenu.add(addReferenceAnnotations);
+    }
+    else
+    {
+      sequenceMenu.add(showAnnotationsMenu);
+      sequenceMenu.add(hideAnnotationsMenu);
+      sequenceMenu.add(addReferenceAnnotations);
+    }
     groupMenu.add(editMenu);
     groupMenu.add(outputMenu);
     groupMenu.add(sequenceFeature);
@@ -1303,6 +1554,7 @@ public class PopupMenu extends JPopupMenu
         JMenuItem item = new JMenuItem(userColours.nextElement().toString());
         item.addActionListener(new ActionListener()
         {
+          @Override
           public void actionPerformed(ActionEvent evt)
           {
             userDefinedColour_actionPerformed(evt);
@@ -1342,6 +1594,7 @@ public class PopupMenu extends JPopupMenu
     noColourmenuItem.setText(MessageManager.getString("label.none"));
     noColourmenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         noColourmenuItem_actionPerformed();
@@ -1352,6 +1605,7 @@ public class PopupMenu extends JPopupMenu
             .getString("label.clustalx_colours"));
     clustalColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         clustalColour_actionPerformed();
@@ -1360,6 +1614,7 @@ public class PopupMenu extends JPopupMenu
     zappoColour.setText(MessageManager.getString("label.zappo"));
     zappoColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         zappoColour_actionPerformed();
@@ -1368,6 +1623,7 @@ public class PopupMenu extends JPopupMenu
     taylorColour.setText(MessageManager.getString("label.taylor"));
     taylorColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         taylorColour_actionPerformed();
@@ -1378,6 +1634,7 @@ public class PopupMenu extends JPopupMenu
     hydrophobicityColour
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 hydrophobicityColour_actionPerformed();
@@ -1386,6 +1643,7 @@ public class PopupMenu extends JPopupMenu
     helixColour.setText(MessageManager.getString("label.helix_propensity"));
     helixColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         helixColour_actionPerformed();
@@ -1395,6 +1653,7 @@ public class PopupMenu extends JPopupMenu
             .getString("label.strand_propensity"));
     strandColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         strandColour_actionPerformed();
@@ -1403,6 +1662,7 @@ public class PopupMenu extends JPopupMenu
     turnColour.setText(MessageManager.getString("label.turn_propensity"));
     turnColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         turnColour_actionPerformed();
@@ -1411,6 +1671,7 @@ public class PopupMenu extends JPopupMenu
     buriedColour.setText(MessageManager.getString("label.buried_index"));
     buriedColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         buriedColour_actionPerformed();
@@ -1420,6 +1681,7 @@ public class PopupMenu extends JPopupMenu
             .getString("label.above_identity_percentage"));
     abovePIDColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         abovePIDColour_actionPerformed();
@@ -1429,6 +1691,7 @@ public class PopupMenu extends JPopupMenu
             .getString("action.user_defined"));
     userDefinedColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         userDefinedColour_actionPerformed(e);
@@ -1438,6 +1701,7 @@ public class PopupMenu extends JPopupMenu
             .setText(MessageManager.getString("label.percentage_identity"));
     PIDColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         PIDColour_actionPerformed();
@@ -1446,6 +1710,7 @@ public class PopupMenu extends JPopupMenu
     BLOSUM62Colour.setText(MessageManager.getString("label.blosum62"));
     BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         BLOSUM62Colour_actionPerformed();
@@ -1456,6 +1721,7 @@ public class PopupMenu extends JPopupMenu
     purinePyrimidineColour
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 purinePyrimidineColour_actionPerformed();
@@ -1473,6 +1739,7 @@ public class PopupMenu extends JPopupMenu
     conservationMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 conservationMenuItem_actionPerformed();
@@ -1480,6 +1747,147 @@ public class PopupMenu extends JPopupMenu
             });
   }
 
+  /**
+   * Check for any annotations on the underlying dataset sequences (for the
+   * current selection group) which are not on the alignment annotations for the
+   * sequence. If any are found, enable the option to add them to the alignment.
+   * The criteria for 'on the alignment' is finding an alignment annotation on
+   * the sequence, that matches on calcId and label. A tooltip is also
+   * constructed that displays the source (calcId) and type (label) of the
+   * annotations that can be added.
+   * 
+   * @param menuItem
+   * @param forSequences
+   */
+  protected void configureReferenceAnnotationsMenu(
+          JMenuItem menuItem, List<SequenceI> forSequences)
+  {
+    menuItem.setText(MessageManager
+            .getString("label.add_reference_annotations"));
+    menuItem.setEnabled(false);
+    if (forSequences == null)
+    {
+      return;
+    }
+
+    /*
+     * Temporary store to hold distinct calcId / type pairs for the tooltip.
+     * Using TreeMap means calcIds are shown in alphabetical order.
+     */
+    Map<String, String> tipEntries = new TreeMap<String, String>();
+    StringBuilder tooltip = new StringBuilder(64);
+    tooltip.append(MessageManager.getString("label.add_annotations_for"));
+
+    /*
+     * For each sequence selected in the alignment, make a list of any
+     * annotations on the underlying dataset sequence which are not already on
+     * the sequence in the alignment.
+     * 
+     * Build a map of { alignmentSequence, <List of annotations to add> }
+     */
+    final Map<SequenceI, List<AlignmentAnnotation>> candidates = new LinkedHashMap<SequenceI, List<AlignmentAnnotation>>();
+    for (SequenceI seq : forSequences)
+    {
+      SequenceI dataset = seq.getDatasetSequence();
+      if (dataset == null)
+      {
+        continue;
+      }
+      AlignmentAnnotation[] datasetAnnotations = dataset.getAnnotation();
+      if (datasetAnnotations == null)
+      {
+        continue;
+      }
+      final List<AlignmentAnnotation> result = new ArrayList<AlignmentAnnotation>();
+      for (AlignmentAnnotation dsann : datasetAnnotations)
+      {
+        /*
+         * If the sequence has no annotation that matches this one, then add
+         * this one to the results list.
+         */
+        if (seq.getAlignmentAnnotations(dsann.getCalcId(), dsann.label)
+                .isEmpty())
+        {
+          result.add(dsann);
+          tipEntries.put(dsann.getCalcId(), dsann.label);
+        }
+      }
+      /*
+       * Save any addable annotations for this sequence
+       */
+      if (!result.isEmpty())
+      {
+        candidates.put(seq, result);
+      }
+    }
+    if (!candidates.isEmpty())
+    {
+      /*
+       * Found annotations that could be added. Enable the menu item, and
+       * configure its tooltip and action.
+       */
+      menuItem.setEnabled(true);
+      for (String calcId : tipEntries.keySet())
+      {
+        tooltip.append("<br/>" + calcId + "/" + tipEntries.get(calcId));
+      }
+      String tooltipText = JvSwingUtils.wrapTooltip(true,
+              tooltip.toString());
+      menuItem.setToolTipText(tooltipText);
+
+      menuItem.addActionListener(new ActionListener()
+      {
+        @Override
+        public void actionPerformed(ActionEvent e)
+        {
+          addReferenceAnnotations_actionPerformed(candidates);
+        }
+      });
+    }
+  }
+
+  /**
+   * Add annotations to the sequences and to the alignment.
+   * 
+   * @param candidates
+   *          a map whose keys are sequences on the alignment, and values a list
+   *          of annotations to add to each sequence
+   */
+  protected void addReferenceAnnotations_actionPerformed(
+          Map<SequenceI, List<AlignmentAnnotation>> candidates)
+  {
+    /*
+     * Add annotations at the top of the annotation, in the same order as their
+     * related sequences.
+     */
+    int insertPosition = 0;
+    for (SequenceI seq : candidates.keySet())
+    {
+      for (AlignmentAnnotation ann : candidates.get(seq))
+      {
+        AlignmentAnnotation copyAnn = new AlignmentAnnotation(ann);
+        int startRes = 0;
+        int endRes = ann.annotations.length;
+        final SequenceGroup selectionGroup = this.ap.av.getSelectionGroup();
+        if (selectionGroup != null)
+        {
+          startRes = selectionGroup.getStartRes();
+          endRes = selectionGroup.getEndRes();
+        }
+        copyAnn.restrict(startRes, endRes);
+
+        // add to the sequence (sets copyAnn.datasetSequence)
+        seq.addAlignmentAnnotation(copyAnn);
+        // adjust for gaps
+        copyAnn.adjustForAlignment();
+        // add to the alignment and set visible
+        this.ap.getAlignment().addAnnotation(copyAnn, insertPosition++);
+        copyAnn.visible = true;
+      }
+    }
+    refresh();
+  }
+
   protected void sequenceSelectionDetails_actionPerformed()
   {
     createSequenceDetailsReport(ap.av.getSequenceSelection());
@@ -1721,6 +2129,18 @@ public class PopupMenu extends JPopupMenu
   }
 
   /**
+   * Open a panel where the user can choose which types of sequence annotation
+   * to show or hide.
+   * 
+   * @param e
+   */
+  protected void chooseAnnotations_actionPerformed(ActionEvent e)
+  {
+    // todo correct way to guard against opening a duplicate panel?
+    new AnnotationChooser(ap);
+  }
+
+  /**
    * DOCUMENT ME!
    * 
    * @param e
@@ -2109,7 +2529,8 @@ public class PopupMenu extends JPopupMenu
     // or we simply trust the user wants
     // wysiwig behaviour
 
-    cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(), ap.av, true));
+    cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(),
+            ap.av, true));
   }
 
   public void pdbFromFile_actionPerformed()
@@ -2171,6 +2592,7 @@ public class PopupMenu extends JPopupMenu
             : ap.av.getSequenceSelection());
     Thread discpdb = new Thread(new Runnable()
     {
+      @Override
       public void run()
       {
 
@@ -2255,7 +2677,9 @@ public class PopupMenu extends JPopupMenu
     if (sg != null)
     {
       if (sequence == null)
-        sequence = (Sequence) sg.getSequenceAt(0);
+      {
+        sequence = sg.getSequenceAt(0);
+      }
 
       EditNameDialog dialog = new EditNameDialog(
               sequence.getSequenceAsString(sg.getStartRes(),
index 6fe7660..4315e0b 100644 (file)
@@ -68,7 +68,7 @@ public class TextColourChooser
     JPanel panel = new JPanel();
     bigpanel.add(panel, BorderLayout.CENTER);
     bigpanel.add(
-            new JLabel(MessageManager.getString("label.select_dark_light_set_thereshold")),
+            new JLabel("<html>"+MessageManager.getString("label.select_dark_light_set_thereshold")+"</html>"),
             BorderLayout.NORTH);
     panel.add(col1);
     panel.add(slider);
index f73e250..af835ca 100755 (executable)
@@ -51,7 +51,7 @@ public abstract class AlignFile extends FileParse
   /**
    * annotation to be added to generated alignment object
    */
-  protected Vector annotations;
+  protected Vector<AlignmentAnnotation> annotations;
 
   /**
    * Properties to be added to generated alignment object
@@ -64,6 +64,8 @@ public abstract class AlignFile extends FileParse
 
   boolean jvSuffix = true;
 
+  private boolean parseCalled;
+
   /**
    * Creates a new AlignFile object.
    */
@@ -85,16 +87,28 @@ public abstract class AlignFile extends FileParse
    */
   public AlignFile(String inFile, String type) throws IOException
   {
+    this(true, inFile, type);
+  }
+  
+  /**
+   * Constructor which (optionally delays) parsing of data from a file of some specified type.
+   * 
+   * @param parseImmediately
+   *          if false, need to call 'doParse()' to begin parsing data
+   * @param inFile
+   *          Filename to read from.
+   * @param type
+   *          What type of file to read from (File, URL)
+   * @throws IOException
+   */
+  public AlignFile(boolean parseImmediately, String inFile, String type) throws IOException
+  {
     super(inFile, type);
     initData();
-    parse();
-    // sets the index of each sequence in the alignment
-    for (int i = 0, c = seqs.size(); i < c; i++)
-    {
-      seqs.get(i).setIndex(i);
+    if (parseImmediately) {
+      doParse();
     }
   }
-
   /**
    * Attempt to read from the position where some other parsing process left
    * off.
@@ -104,8 +118,36 @@ public abstract class AlignFile extends FileParse
    */
   public AlignFile(FileParse source) throws IOException
   {
+    this(true,source);
+  }
+  /**
+   * Construct a new parser to read from the position where some other parsing process left
+   * 
+   * @param parseImmediately
+   *          if false, need to call 'doParse()' to begin parsing data
+   * @param source
+   */
+  public AlignFile(boolean parseImmediately, FileParse source) throws IOException
+  {
     super(source);
     initData();
+    if (parseImmediately) {
+      doParse();
+    }
+  }
+  /**
+   * called if parsing was delayed till after parser was constructed
+   * @throws IOException
+   */
+  public void doParse() throws IOException
+  {
+    if (parseCalled)
+    {
+      throw new IOException(
+              "Implementation error: Parser called twice for same data.\n"
+                      + "Need to call initData() again before parsing can be reattempted.");
+    }
+    parseCalled=true;
     parse();
     // sets the index of each sequence in the alignment
     for (int i = 0, c = seqs.size(); i < c; i++)
@@ -114,6 +156,7 @@ public abstract class AlignFile extends FileParse
     }
   }
 
+
   /**
    * Return the seqs Vector
    */
@@ -226,6 +269,7 @@ public abstract class AlignFile extends FileParse
   {
     seqs = new Vector();
     annotations = new Vector();
+    parseCalled=false;
   }
 
   /**
index ed49d5e..5366cb4 100755 (executable)
@@ -236,7 +236,7 @@ public class AppletFormatAdapter
       }
       else if (format.equals("PDB"))
       {
-        afile = new MCview.PDBfile(inFile, type);
+        afile = new MCview.PDBfile(true,true,inFile, type);
         // Uncomment to test Jmol data based PDB processing: JAL-1213
         // afile = new jalview.ext.jmol.PDBFileWithJmol(inFile, type);
       }
@@ -357,7 +357,7 @@ public class AppletFormatAdapter
       }
       else if (format.equals("PDB"))
       {
-        afile = new MCview.PDBfile(source);
+        afile = new MCview.PDBfile(true,true,source);
       }
       else if (format.equals("STH"))
       {
index e122f21..afb0dc1 100755 (executable)
@@ -20,6 +20,8 @@
  */
 package jalview.jbgui;
 
+import jalview.bin.Cache;
+import jalview.gui.JvSwingUtils;
 import jalview.schemes.ColourSchemeProperty;
 import jalview.util.MessageManager;
 
@@ -302,6 +304,10 @@ public class GAlignFrame extends JInternalFrame
 
   JMenuItem showAllhidden = new JMenuItem();
 
+  protected JMenuItem showAllAnnotations = new JMenuItem();
+
+  protected JMenuItem hideAllAnnotations = new JMenuItem();
+
   protected JCheckBoxMenuItem hiddenMarkers = new JCheckBoxMenuItem();
 
   JMenuItem invertColSel = new JMenuItem();
@@ -371,6 +377,7 @@ public class GAlignFrame extends JInternalFrame
 
         item.addActionListener(new java.awt.event.ActionListener()
         {
+          @Override
           public void actionPerformed(ActionEvent e)
           {
             outputText_actionPerformed(e);
@@ -381,6 +388,7 @@ public class GAlignFrame extends JInternalFrame
       }
     } catch (Exception e)
     {
+      System.err.println(e.toString());
     }
 
     if (!new jalview.util.Platform().isAMac())
@@ -407,6 +415,7 @@ public class GAlignFrame extends JInternalFrame
         radioItem.setName("USER_DEFINED");
         radioItem.addMouseListener(new MouseAdapter()
         {
+          @Override
           public void mousePressed(MouseEvent evt)
           {
             if (evt.isControlDown()
@@ -431,6 +440,7 @@ public class GAlignFrame extends JInternalFrame
               {
                 radioItem.addActionListener(new ActionListener()
                 {
+                  @Override
                   public void actionPerformed(ActionEvent evt)
                   {
                     userDefinedColour_actionPerformed(evt);
@@ -442,6 +452,7 @@ public class GAlignFrame extends JInternalFrame
         });
         radioItem.addActionListener(new ActionListener()
         {
+          @Override
           public void actionPerformed(ActionEvent evt)
           {
             userDefinedColour_actionPerformed(evt);
@@ -580,6 +591,7 @@ public class GAlignFrame extends JInternalFrame
                     | java.awt.event.KeyEvent.SHIFT_MASK, false));
     saveAs.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         saveAs_actionPerformed(e);
@@ -591,6 +603,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     closeMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         closeMenuItem_actionPerformed(false);
@@ -609,6 +622,7 @@ public class GAlignFrame extends JInternalFrame
     selectAllSequenceMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 selectAllSequenceMenuItem_actionPerformed(e);
@@ -621,6 +635,7 @@ public class GAlignFrame extends JInternalFrame
     deselectAllSequenceMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 deselectAllSequenceMenuItem_actionPerformed(e);
@@ -634,6 +649,7 @@ public class GAlignFrame extends JInternalFrame
     invertSequenceMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 invertSequenceMenuItem_actionPerformed(e);
@@ -643,6 +659,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("action.make_groups_selection"));
     grpsFromSelection.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         makeGrpsFromSelection_actionPerformed(e);
@@ -668,6 +685,7 @@ public class GAlignFrame extends JInternalFrame
     remove2LeftMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 remove2LeftMenuItem_actionPerformed(e);
@@ -681,6 +699,7 @@ public class GAlignFrame extends JInternalFrame
     remove2RightMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 remove2RightMenuItem_actionPerformed(e);
@@ -694,6 +713,7 @@ public class GAlignFrame extends JInternalFrame
     removeGappedColumnMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 removeGappedColumnMenuItem_actionPerformed(e);
@@ -708,6 +728,7 @@ public class GAlignFrame extends JInternalFrame
     removeAllGapsMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 removeAllGapsMenuItem_actionPerformed(e);
@@ -718,6 +739,7 @@ public class GAlignFrame extends JInternalFrame
     justifyLeftMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 justifyLeftMenuItem_actionPerformed(e);
@@ -728,6 +750,7 @@ public class GAlignFrame extends JInternalFrame
     justifyRightMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 justifyRightMenuItem_actionPerformed(e);
@@ -737,6 +760,7 @@ public class GAlignFrame extends JInternalFrame
     viewBoxesMenuItem.setState(true);
     viewBoxesMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         viewBoxesMenuItem_actionPerformed(e);
@@ -746,6 +770,7 @@ public class GAlignFrame extends JInternalFrame
     viewTextMenuItem.setState(true);
     viewTextMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         viewTextMenuItem_actionPerformed(e);
@@ -757,6 +782,7 @@ public class GAlignFrame extends JInternalFrame
     showNonconservedMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 showUnconservedMenuItem_actionPerformed(e);
@@ -767,6 +793,7 @@ public class GAlignFrame extends JInternalFrame
     sortPairwiseMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 sortPairwiseMenuItem_actionPerformed(e);
@@ -775,6 +802,7 @@ public class GAlignFrame extends JInternalFrame
     sortIDMenuItem.setText(MessageManager.getString("action.by_id"));
     sortIDMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         sortIDMenuItem_actionPerformed(e);
@@ -785,6 +813,7 @@ public class GAlignFrame extends JInternalFrame
     sortLengthMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 sortLengthMenuItem_actionPerformed(e);
@@ -793,6 +822,7 @@ public class GAlignFrame extends JInternalFrame
     sortGroupMenuItem.setText(MessageManager.getString("action.by_group"));
     sortGroupMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         sortGroupMenuItem_actionPerformed(e);
@@ -806,6 +836,7 @@ public class GAlignFrame extends JInternalFrame
     removeRedundancyMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 removeRedundancyMenuItem_actionPerformed(e);
@@ -816,6 +847,7 @@ public class GAlignFrame extends JInternalFrame
     pairwiseAlignmentMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 pairwiseAlignmentMenuItem_actionPerformed(e);
@@ -825,6 +857,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.principal_component_analysis"));
     PCAMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         PCAMenuItem_actionPerformed(e);
@@ -835,6 +868,7 @@ public class GAlignFrame extends JInternalFrame
     averageDistanceTreeMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 averageDistanceTreeMenuItem_actionPerformed(e);
@@ -845,6 +879,7 @@ public class GAlignFrame extends JInternalFrame
     neighbourTreeMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 neighbourTreeMenuItem_actionPerformed(e);
@@ -862,6 +897,7 @@ public class GAlignFrame extends JInternalFrame
 
     clustalColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         clustalColour_actionPerformed(e);
@@ -870,6 +906,7 @@ public class GAlignFrame extends JInternalFrame
     zappoColour.setText(MessageManager.getString("label.zappo"));
     zappoColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         zappoColour_actionPerformed(e);
@@ -878,6 +915,7 @@ public class GAlignFrame extends JInternalFrame
     taylorColour.setText(MessageManager.getString("label.taylor"));
     taylorColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         taylorColour_actionPerformed(e);
@@ -888,6 +926,7 @@ public class GAlignFrame extends JInternalFrame
     hydrophobicityColour
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 hydrophobicityColour_actionPerformed(e);
@@ -896,6 +935,7 @@ public class GAlignFrame extends JInternalFrame
     helixColour.setText(MessageManager.getString("label.helix_propensity"));
     helixColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         helixColour_actionPerformed(e);
@@ -905,6 +945,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.strand_propensity"));
     strandColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         strandColour_actionPerformed(e);
@@ -913,6 +954,7 @@ public class GAlignFrame extends JInternalFrame
     turnColour.setText(MessageManager.getString("label.turn_propensity"));
     turnColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         turnColour_actionPerformed(e);
@@ -921,6 +963,7 @@ public class GAlignFrame extends JInternalFrame
     buriedColour.setText(MessageManager.getString("label.buried_index"));
     buriedColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         buriedColour_actionPerformed(e);
@@ -930,6 +973,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("action.user_defined"));
     userDefinedColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         userDefinedColour_actionPerformed(e);
@@ -939,6 +983,7 @@ public class GAlignFrame extends JInternalFrame
             .setText(MessageManager.getString("label.percentage_identity"));
     PIDColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         PIDColour_actionPerformed(e);
@@ -948,6 +993,7 @@ public class GAlignFrame extends JInternalFrame
             .setText(MessageManager.getString("label.blosum62_score"));
     BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         BLOSUM62Colour_actionPerformed(e);
@@ -956,6 +1002,7 @@ public class GAlignFrame extends JInternalFrame
     nucleotideColour.setText(MessageManager.getString("label.nucleotide"));
     nucleotideColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         nucleotideColour_actionPerformed(e);
@@ -967,6 +1014,7 @@ public class GAlignFrame extends JInternalFrame
     purinePyrimidineColour
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 purinePyrimidineColour_actionPerformed(e);
@@ -977,6 +1025,7 @@ public class GAlignFrame extends JInternalFrame
     RNAInteractionColour
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 RNAInteractionColour_actionPerformed(e);
@@ -994,6 +1043,7 @@ public class GAlignFrame extends JInternalFrame
     avDistanceTreeBlosumMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 avTreeBlosumMenuItem_actionPerformed(e);
@@ -1004,6 +1054,7 @@ public class GAlignFrame extends JInternalFrame
     njTreeBlosumMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 njTreeBlosumMenuItem_actionPerformed(e);
@@ -1012,21 +1063,47 @@ public class GAlignFrame extends JInternalFrame
     annotationPanelMenuItem.setActionCommand("");
     annotationPanelMenuItem.setText(MessageManager
             .getString("label.show_annotations"));
-    annotationPanelMenuItem.setState(jalview.bin.Cache.getDefault(
-            "SHOW_ANNOTATIONS", true));
-    annotationPanelMenuItem
-            .addActionListener(new java.awt.event.ActionListener()
-            {
-              public void actionPerformed(ActionEvent e)
-              {
-                annotationPanelMenuItem_actionPerformed(e);
-              }
-            });
+    annotationPanelMenuItem.setState(Cache.getDefault("SHOW_ANNOTATIONS",
+            true));
+    annotationPanelMenuItem.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        annotationPanelMenuItem_actionPerformed(e);
+      }
+    });
+    /*
+     * Show/hide all annotations only enabled if annotation panel is shown
+     */
+    showAllAnnotations.setText(MessageManager
+            .getString("label.show_all_annotations"));
+    showAllAnnotations.setEnabled(annotationPanelMenuItem.getState());
+    showAllAnnotations.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        showAllAnnotations_actionPerformed();
+      }
+    });
+    hideAllAnnotations.setText(MessageManager
+            .getString("label.hide_all_annotations"));
+    hideAllAnnotations.setEnabled(annotationPanelMenuItem.getState());
+    hideAllAnnotations.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        hideAllAnnotations_actionPerformed();
+      }
+    });
     colourTextMenuItem.setText(MessageManager
             .getString("label.colour_text"));
     colourTextMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 colourTextMenuItem_actionPerformed(e);
@@ -1035,6 +1112,7 @@ public class GAlignFrame extends JInternalFrame
     htmlMenuItem.setText(MessageManager.getString("label.html"));
     htmlMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         htmlMenuItem_actionPerformed(e);
@@ -1044,6 +1122,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.overview_window"));
     overviewMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         overviewMenuItem_actionPerformed(e);
@@ -1056,6 +1135,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     undoMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         undoMenuItem_actionPerformed(e);
@@ -1068,6 +1148,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     redoMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         redoMenuItem_actionPerformed(e);
@@ -1078,6 +1159,7 @@ public class GAlignFrame extends JInternalFrame
     conservationMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 conservationMenuItem_actionPerformed(e);
@@ -1086,6 +1168,7 @@ public class GAlignFrame extends JInternalFrame
     noColourmenuItem.setText(MessageManager.getString("label.none"));
     noColourmenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         noColourmenuItem_actionPerformed(e);
@@ -1094,6 +1177,7 @@ public class GAlignFrame extends JInternalFrame
     wrapMenuItem.setText(MessageManager.getString("label.wrap"));
     wrapMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         wrapMenuItem_actionPerformed(e);
@@ -1105,6 +1189,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     printMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         printMenuItem_actionPerformed(e);
@@ -1116,6 +1201,7 @@ public class GAlignFrame extends JInternalFrame
     renderGapsMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 renderGapsMenuItem_actionPerformed(e);
@@ -1125,8 +1211,11 @@ public class GAlignFrame extends JInternalFrame
     findMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
             java.awt.event.KeyEvent.VK_F, Toolkit.getDefaultToolkit()
                     .getMenuShortcutKeyMask(), false));
+    findMenuItem.setToolTipText(JvSwingUtils.wrapTooltip(true,
+            MessageManager.getString("label.find_tip")));
     findMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         findMenuItem_actionPerformed(e);
@@ -1136,6 +1225,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.above_identity_threshold"));
     abovePIDThreshold.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         abovePIDThreshold_actionPerformed(e);
@@ -1145,6 +1235,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.show_sequence_features"));
     showSeqFeatures.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent actionEvent)
       {
         showSeqFeatures_actionPerformed(actionEvent);
@@ -1161,6 +1252,7 @@ public class GAlignFrame extends JInternalFrame
     showDbRefsMenuitem.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showDbRefs_actionPerformed(e);
@@ -1172,6 +1264,7 @@ public class GAlignFrame extends JInternalFrame
     showNpFeatsMenuitem.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showNpFeats_actionPerformed(e);
@@ -1183,6 +1276,7 @@ public class GAlignFrame extends JInternalFrame
     showGroupConservation.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showGroupConservation_actionPerformed(e);
@@ -1195,6 +1289,7 @@ public class GAlignFrame extends JInternalFrame
     showGroupConsensus.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showGroupConsensus_actionPerformed(e);
@@ -1206,6 +1301,7 @@ public class GAlignFrame extends JInternalFrame
     showConsensusHistogram.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showConsensusHistogram_actionPerformed(e);
@@ -1217,6 +1313,7 @@ public class GAlignFrame extends JInternalFrame
     showSequenceLogo.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showSequenceLogo_actionPerformed(e);
@@ -1228,6 +1325,7 @@ public class GAlignFrame extends JInternalFrame
     normaliseSequenceLogo.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         normaliseSequenceLogo_actionPerformed(e);
@@ -1241,6 +1339,7 @@ public class GAlignFrame extends JInternalFrame
     applyAutoAnnotationSettings.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         applyAutoAnnotationSettings_actionPerformed(e);
@@ -1251,6 +1350,7 @@ public class GAlignFrame extends JInternalFrame
     nucleotideColour.setText(MessageManager.getString("label.nucleotide"));
     nucleotideColour.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         nucleotideColour_actionPerformed(e);
@@ -1276,6 +1376,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     deleteGroups.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         deleteGroups_actionPerformed(e);
@@ -1287,6 +1388,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     createGroup.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         createGroup_actionPerformed(e);
@@ -1299,6 +1401,7 @@ public class GAlignFrame extends JInternalFrame
                     | java.awt.event.KeyEvent.SHIFT_MASK, false));
     unGroup.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         unGroup_actionPerformed(e);
@@ -1311,6 +1414,7 @@ public class GAlignFrame extends JInternalFrame
 
     copy.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         copy_actionPerformed(e);
@@ -1322,16 +1426,16 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     cut.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         cut_actionPerformed(e);
       }
     });
     delete.setText(MessageManager.getString("action.delete"));
-    delete.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
-            java.awt.event.KeyEvent.VK_BACK_SPACE, 0, false));
     delete.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         delete_actionPerformed(e);
@@ -1345,6 +1449,7 @@ public class GAlignFrame extends JInternalFrame
                     | java.awt.event.KeyEvent.SHIFT_MASK, false));
     pasteNew.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         pasteNew_actionPerformed(e);
@@ -1356,6 +1461,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     pasteThis.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         pasteThis_actionPerformed(e);
@@ -1365,6 +1471,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.apply_colour_to_all_groups"));
     applyToAllGroups.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         applyToAllGroups_actionPerformed(e);
@@ -1372,6 +1479,7 @@ public class GAlignFrame extends JInternalFrame
     });
     createPNG.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         createPNG(null);
@@ -1383,6 +1491,7 @@ public class GAlignFrame extends JInternalFrame
     font.setText(MessageManager.getString("action.font"));
     font.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         font_actionPerformed(e);
@@ -1394,6 +1503,7 @@ public class GAlignFrame extends JInternalFrame
     seqLimits.setState(jalview.bin.Cache.getDefault("SHOW_JVSUFFIX", true));
     seqLimits.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         seqLimit_actionPerformed(e);
@@ -1402,6 +1512,7 @@ public class GAlignFrame extends JInternalFrame
     epsFile.setText("EPS");
     epsFile.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         createEPS(null);
@@ -1413,6 +1524,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.load_associated_tree"));
     LoadtreeMenuItem.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         LoadtreeMenuItem_actionPerformed(e);
@@ -1423,6 +1535,7 @@ public class GAlignFrame extends JInternalFrame
     scaleAbove.setText(MessageManager.getString("action.scale_above"));
     scaleAbove.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         scaleAbove_actionPerformed(e);
@@ -1433,6 +1546,7 @@ public class GAlignFrame extends JInternalFrame
     scaleLeft.setText(MessageManager.getString("action.scale_left"));
     scaleLeft.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         scaleLeft_actionPerformed(e);
@@ -1443,6 +1557,7 @@ public class GAlignFrame extends JInternalFrame
     scaleRight.setText(MessageManager.getString("action.scale_right"));
     scaleRight.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         scaleRight_actionPerformed(e);
@@ -1455,6 +1570,7 @@ public class GAlignFrame extends JInternalFrame
     centreColumnLabelsMenuItem
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 centreColumnLabels_actionPerformed(e);
@@ -1467,6 +1583,7 @@ public class GAlignFrame extends JInternalFrame
     followHighlightMenuItem.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         followHighlight_actionPerformed();
@@ -1478,6 +1595,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.modify_identity_thereshold"));
     modifyPID.addActionListener(new java.awt.event.ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         modifyPID_actionPerformed(e);
@@ -1488,6 +1606,7 @@ public class GAlignFrame extends JInternalFrame
     modifyConservation
             .addActionListener(new java.awt.event.ActionListener()
             {
+              @Override
               public void actionPerformed(ActionEvent e)
               {
                 modifyConservation_actionPerformed(e);
@@ -1498,15 +1617,18 @@ public class GAlignFrame extends JInternalFrame
     sort.setText(MessageManager.getString("action.sort"));
     sort.addMenuListener(new MenuListener()
     {
+      @Override
       public void menuSelected(MenuEvent e)
       {
         buildTreeMenu();
       }
 
+      @Override
       public void menuDeselected(MenuEvent e)
       {
       }
 
+      @Override
       public void menuCanceled(MenuEvent e)
       {
       }
@@ -1517,14 +1639,17 @@ public class GAlignFrame extends JInternalFrame
     sortByAnnotScore.addMenuListener(new javax.swing.event.MenuListener()
     {
 
+      @Override
       public void menuCanceled(MenuEvent e)
       {
       }
 
+      @Override
       public void menuDeselected(MenuEvent e)
       {
       }
 
+      @Override
       public void menuSelected(MenuEvent e)
       {
         buildSortByAnnotationScoresMenu();
@@ -1541,6 +1666,7 @@ public class GAlignFrame extends JInternalFrame
             .getDefault("PAD_GAPS", false));
     padGapsMenuitem.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         padGapsMenuitem_actionPerformed(e);
@@ -1550,6 +1676,7 @@ public class GAlignFrame extends JInternalFrame
     vamsasStore.setText(MessageManager.getString("label.vamsas_store"));
     vamsasStore.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         vamsasStore_actionPerformed(e);
@@ -1559,6 +1686,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.translate_cDNA"));
     showTranslation.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showTranslation_actionPerformed(e);
@@ -1568,6 +1696,7 @@ public class GAlignFrame extends JInternalFrame
             + "...");
     extractScores.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         extractScores_actionPerformed(e);
@@ -1586,6 +1715,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.feature_settings"));
     openFeatureSettings.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         featureSettings_actionPerformed(e);
@@ -1595,6 +1725,7 @@ public class GAlignFrame extends JInternalFrame
             .setText(MessageManager.getString("label.fetch_sequences"));
     fetchSequence.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         fetchSequence_actionPerformed(e);
@@ -1605,6 +1736,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("action.by_annotation"));
     annotationColour.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         annotationColour_actionPerformed(e);
@@ -1615,6 +1747,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("action.by_rna_helixes"));
     rnahelicesColour.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         rnahelicesColour_actionPerformed(e);
@@ -1625,6 +1758,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.load_features_annotations"));
     associatedData.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         associatedData_actionPerformed(e);
@@ -1636,6 +1770,7 @@ public class GAlignFrame extends JInternalFrame
             "AUTO_CALC_CONSENSUS", true));
     autoCalculate.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         autoCalculate_actionPerformed(e);
@@ -1651,6 +1786,7 @@ public class GAlignFrame extends JInternalFrame
             .setState(jalview.bin.Cache.getDefault("SORT_BY_TREE", false));
     sortByTree.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         sortByTreeOption_actionPerformed(e);
@@ -1666,6 +1802,7 @@ public class GAlignFrame extends JInternalFrame
     listenToViewSelections.setState(false);
     listenToViewSelections.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         listenToViewSelections_actionPerformed(e);
@@ -1677,6 +1814,7 @@ public class GAlignFrame extends JInternalFrame
     addFromFile.setText(MessageManager.getString("label.from_file"));
     addFromFile.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         addFromFile_actionPerformed(e);
@@ -1685,6 +1823,7 @@ public class GAlignFrame extends JInternalFrame
     addFromText.setText(MessageManager.getString("label.from_textbox"));
     addFromText.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         addFromText_actionPerformed(e);
@@ -1693,6 +1832,7 @@ public class GAlignFrame extends JInternalFrame
     addFromURL.setText(MessageManager.getString("label.from_url"));
     addFromURL.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         addFromURL_actionPerformed(e);
@@ -1702,6 +1842,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.export_features"));
     exportFeatures.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         exportFeatures_actionPerformed(e);
@@ -1711,6 +1852,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.export_annotations"));
     exportAnnotations.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         exportAnnotations_actionPerformed(e);
@@ -1723,6 +1865,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.toggle_sequence_visibility"));
     showAllSeqs.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showAllSeqs_actionPerformed(e);
@@ -1733,6 +1876,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.toggle_columns_visibility"));
     showAllColumns.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showAllColumns_actionPerformed(e);
@@ -1745,6 +1889,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.toggle_sequence_visibility"));
     hideSelSequences.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         hideSelSequences_actionPerformed(e);
@@ -1756,6 +1901,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.toggle_columns_visibility"));
     hideSelColumns.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         hideSelColumns_actionPerformed(e);
@@ -1765,6 +1911,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.selected_region"));
     hideAllSelection.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         hideAllSelection_actionPerformed(e);
@@ -1775,6 +1922,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.all_but_selected_region"));
     hideAllButSelection.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         hideAllButSelection_actionPerformed(e);
@@ -1786,16 +1934,17 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.toggles_visibility_hidden_selected_regions"));
     showAllhidden.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         showAllhidden_actionPerformed(e);
       }
     });
-
     hiddenMarkers.setText(MessageManager
             .getString("action.show_hidden_markers"));
     hiddenMarkers.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         hiddenMarkers_actionPerformed(e);
@@ -1809,6 +1958,7 @@ public class GAlignFrame extends JInternalFrame
                     | java.awt.event.KeyEvent.ALT_MASK, false));
     invertColSel.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         invertColSel_actionPerformed(e);
@@ -1816,6 +1966,7 @@ public class GAlignFrame extends JInternalFrame
     });
     tabbedPane.addChangeListener(new javax.swing.event.ChangeListener()
     {
+      @Override
       public void stateChanged(ChangeEvent evt)
       {
         JTabbedPane pane = (JTabbedPane) evt.getSource();
@@ -1825,6 +1976,7 @@ public class GAlignFrame extends JInternalFrame
     });
     tabbedPane.addMouseListener(new MouseAdapter()
     {
+      @Override
       public void mousePressed(MouseEvent e)
       {
         tabbedPane_mousePressed(e);
@@ -1832,6 +1984,7 @@ public class GAlignFrame extends JInternalFrame
     });
     tabbedPane.addFocusListener(new FocusAdapter()
     {
+      @Override
       public void focusGained(FocusEvent e)
       {
         tabbedPane_focusGained(e);
@@ -1843,6 +1996,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     save.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         save_actionPerformed(e);
@@ -1852,6 +2006,7 @@ public class GAlignFrame extends JInternalFrame
     reload.setText(MessageManager.getString("action.reload"));
     reload.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         reload_actionPerformed(e);
@@ -1863,6 +2018,7 @@ public class GAlignFrame extends JInternalFrame
                     .getMenuShortcutKeyMask(), false));
     newView.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         newView_actionPerformed(e);
@@ -1875,6 +2031,7 @@ public class GAlignFrame extends JInternalFrame
             + "...");
     textColour.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         textColour_actionPerformed(e);
@@ -1886,6 +2043,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.right_align_sequence_id"));
     idRightAlign.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         idRightAlign_actionPerformed(e);
@@ -1897,6 +2055,7 @@ public class GAlignFrame extends JInternalFrame
             java.awt.event.KeyEvent.VK_G, 0, false));
     gatherViews.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         gatherViews_actionPerformed(e);
@@ -1908,6 +2067,7 @@ public class GAlignFrame extends JInternalFrame
             java.awt.event.KeyEvent.VK_X, 0, false));
     expandViews.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         expandViews_actionPerformed(e);
@@ -1917,6 +2077,7 @@ public class GAlignFrame extends JInternalFrame
             .setText(MessageManager.getString("action.page_setup") + "...");
     pageSetup.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         pageSetup_actionPerformed(e);
@@ -1926,6 +2087,7 @@ public class GAlignFrame extends JInternalFrame
             .getString("label.alignment_props") + "...");
     alignmentProperties.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent actionEvent)
       {
         alignmentProperties();
@@ -1989,6 +2151,8 @@ public class GAlignFrame extends JInternalFrame
     viewMenu.addSeparator();
     viewMenu.add(followHighlightMenuItem);
     viewMenu.add(annotationPanelMenuItem);
+    viewMenu.add(showAllAnnotations);
+    viewMenu.add(hideAllAnnotations);
     autoAnnMenu.add(applyAutoAnnotationSettings);
     autoAnnMenu.add(showConsensusHistogram);
     autoAnnMenu.add(showSequenceLogo);
@@ -2107,6 +2271,32 @@ public class GAlignFrame extends JInternalFrame
     // selectMenu.add(listenToViewSelections);
   }
 
+  /**
+   * Action on clicking Show all annotations.
+   */
+  protected void showAllAnnotations_actionPerformed()
+  {
+    setAllAnnotationsVisibility(true);
+  }
+
+  /**
+   * Action on clicking Hide all annotations.
+   */
+  protected void hideAllAnnotations_actionPerformed()
+  {
+    setAllAnnotationsVisibility(false);
+  }
+
+  /**
+   * Set the visibility of all annotations to true or false.
+   * 
+   * @param visible
+   */
+  protected void setAllAnnotationsVisibility(boolean visible)
+  {
+
+  }
+
   protected void normaliseSequenceLogo_actionPerformed(ActionEvent e)
   {
     // TODO Auto-generated method stub
index e14e96b..7a04248 100644 (file)
@@ -148,7 +148,7 @@ public class GRestServiceEditorPane extends JPanel
     hSeparable = new JCheckBox(MessageManager.getString("label.per_seq"));
     hSeparable
             .setToolTipText(JvSwingUtils
-                            .wrapTooltip(false, MessageManager.getString("label.job_created_when_checked")));
+                            .wrapTooltip(true, MessageManager.getString("label.job_created_when_checked")));
     hSeparable.addActionListener(new ActionListener()
     {
 
@@ -162,7 +162,7 @@ public class GRestServiceEditorPane extends JPanel
     vSeparable = new JCheckBox(
             MessageManager.getString("label.result_vertically_separable"));
     vSeparable
-            .setToolTipText(JvSwingUtils.wrapTooltip(false, MessageManager.getString("label.when_checked_job_visible_region_and_results")));
+            .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.when_checked_job_visible_region_and_results")));
     vSeparable.addActionListener(new ActionListener()
     {
 
@@ -393,7 +393,7 @@ public class GRestServiceEditorPane extends JPanel
     urldescPane.add(urldescVp, "span");
     paste.add(urldescPane, "span");
     urldescPane
-            .setToolTipText(JvSwingUtils.wrapTooltip(false, MessageManager.getString("label.flat_file_representation")));
+            .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.flat_file_representation")));
 
     parseRes = new JTextArea();
     parseResVp = new JScrollPane();
@@ -405,7 +405,7 @@ public class GRestServiceEditorPane extends JPanel
     parseWarnings.setBorder(new TitledBorder(MessageManager
             .getString("label.parsing_errors")));
     parseWarnings
-            .setToolTipText(JvSwingUtils.wrapTooltip(false, MessageManager.getString("label.result_of_parsing_rsbs")));
+            .setToolTipText(JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.result_of_parsing_rsbs")));
     parseWarnings.add(parseResVp, "center");
     parseRes.setEditable(false);
     paste.add(parseWarnings, "span");
index 73a5905..4d94b2d 100644 (file)
  */
 package jalview.structure;
 
-import java.io.*;
-import java.util.*;
-
-import MCview.*;
-import jalview.analysis.*;
-import jalview.api.AlignmentViewPanel;
+import jalview.analysis.AlignSeq;
 import jalview.api.StructureSelectionManagerProvider;
-import jalview.datamodel.*;
+import jalview.datamodel.AlignedCodonFrame;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SequenceI;
 import jalview.util.MessageManager;
 
+import java.io.PrintStream;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.IdentityHashMap;
+import java.util.Vector;
+
+import MCview.Atom;
+import MCview.PDBChain;
+
 public class StructureSelectionManager
 {
   static IdentityHashMap<StructureSelectionManagerProvider, StructureSelectionManager> instances;
@@ -181,9 +189,26 @@ public class StructureSelectionManager
      * the tried and tested MCview pdb mapping
      */
     MCview.PDBfile pdb = null;
+    boolean parseSecStr=true;
+    for (SequenceI sq:sequence)
+    {
+      SequenceI ds = sq;while (ds.getDatasetSequence()!=null) { ds = ds.getDatasetSequence();};
+      if (ds.getAnnotation()!=null)
+      {
+        for (AlignmentAnnotation ala:ds.getAnnotation())
+        {
+          // false if any annotation present from this structure
+          if (MCview.PDBfile.isCalcIdForFile(ala.getCalcId(), pdbFile))
+          {
+            parseSecStr = false;
+          }
+        }
+      }
+    }
     try
     {
-      pdb = new MCview.PDBfile(pdbFile, protocol);
+      pdb = new MCview.PDBfile(true, parseSecStr, pdbFile, protocol);
+      
     } catch (Exception ex)
     {
       ex.printStackTrace();
@@ -217,7 +242,9 @@ public class StructureSelectionManager
         }
       }
       else
+      {
         targetChain = "";
+      }
 
       int max = -10;
       AlignSeq maxAlignseq = null;
@@ -317,7 +344,9 @@ public class StructureSelectionManager
       }
 
       if (protocol.equals(jalview.io.AppletFormatAdapter.PASTE))
+      {
         pdbFile = "INLINE" + pdb.id;
+      }
 
       mappings[mappings.length - 1] = new StructureMapping(sequence[s],
               pdbFile, pdb.id, maxChainId, mapping,
@@ -352,7 +381,9 @@ public class StructureSelectionManager
     String[] handlepdbs;
     Vector pdbs = new Vector();
     for (int i = 0; i < pdbfiles.length; pdbs.addElement(pdbfiles[i++]))
+    {
       ;
+    }
     StructureListener sl;
     for (int i = 0; i < listeners.size(); i++)
     {
@@ -444,7 +475,9 @@ public class StructureSelectionManager
       {
         Object li = listeners.elementAt(i);
         if (li instanceof SequenceListener)
+        {
           ((SequenceListener) li).highlightSequence(results);
+        }
       }
     }
   }
@@ -468,7 +501,9 @@ public class StructureSelectionManager
     boolean hasSequenceListeners = handlingVamsasMo || seqmappings != null;
     SearchResults results = null;
     if (index == -1)
+    {
       index = seq.findPosition(indexpos);
+    }
     StructureListener sl;
     int atomNo = 0;
     for (int i = 0; i < listeners.size(); i++)
@@ -686,9 +721,13 @@ public class StructureSelectionManager
           AlignedCodonFrame[] codonFrames)
   {
     if (!add && (seqmappings == null || seqmappings.size() == 0))
+    {
       return;
+    }
     if (seqmappings == null)
+    {
       seqmappings = new Vector();
+    }
     if (codonFrames != null && codonFrames.length > 0)
     {
       for (int cf = 0; cf < codonFrames.length; cf++)
@@ -726,8 +765,10 @@ public class StructureSelectionManager
             int[] nsr = new int[(seqmappingrefs == null) ? 1
                     : seqmappingrefs.length + 1];
             if (seqmappingrefs != null && seqmappingrefs.length > 0)
+            {
               System.arraycopy(seqmappingrefs, 0, nsr, 0,
                       seqmappingrefs.length);
+            }
             nsr[(seqmappingrefs == null) ? 0 : seqmappingrefs.length] = 1;
             seqmappingrefs = nsr;
           }
index 69bdd24..c754ee3 100644 (file)
@@ -79,6 +79,7 @@ public class ConsensusThread extends AlignCalcWorker implements
       if (alignViewport.isClosed())
       {
         abortAndDestroy();
+        return;
       }
       AlignmentI alignment = alignViewport.getAlignment();
 
index 7ed50d8..a7180a0 100644 (file)
  */
 package jalview.workers;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import jalview.analysis.Conservation;
 import jalview.api.AlignCalcWorkerI;
-import jalview.api.AlignmentViewPanel;
 import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class ConservationThread extends AlignCalcWorker implements
         AlignCalcWorkerI
 {
@@ -74,6 +74,7 @@ public class ConservationThread extends AlignCalcWorker implements
       if (alignViewport.isClosed())
       {
         abortAndDestroy();
+        return;
       }
       List<AlignmentAnnotation> ourAnnot = new ArrayList<AlignmentAnnotation>();
       AlignmentI alignment = alignViewport.getAlignment();
index 72d26ff..3230a36 100644 (file)
@@ -20,8 +20,6 @@
  */
 package jalview.workers;
 
-import java.util.Hashtable;
-
 import jalview.analysis.StructureFrequency;
 import jalview.api.AlignCalcWorkerI;
 import jalview.api.AlignViewportI;
@@ -31,6 +29,8 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.SequenceI;
 
+import java.util.Hashtable;
+
 public class StrucConsensusThread extends AlignCalcWorker implements
         AlignCalcWorkerI
 {
@@ -74,6 +74,7 @@ public class StrucConsensusThread extends AlignCalcWorker implements
       if (alignViewport.isClosed())
       {
         abortAndDestroy();
+        return;
       }
       AlignmentI alignment = alignViewport.getAlignment();
 
diff --git a/test/jalview/analysis/AlignmentAnnotationUtilsTest.java b/test/jalview/analysis/AlignmentAnnotationUtilsTest.java
new file mode 100644 (file)
index 0000000..1da1939
--- /dev/null
@@ -0,0 +1,361 @@
+package jalview.analysis;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class AlignmentAnnotationUtilsTest
+{
+  // 4 sequences x 13 positions
+  final static String EOL = "\n";
+
+  // @formatter:off
+  final static String TEST_DATA = 
+          ">FER_CAPAA Ferredoxin" + EOL +
+          "TIETHKEAELVG-" + EOL +
+          ">FER_CAPAN Ferredoxin, chloroplast precursor" + EOL +
+          "TIETHKEAELVG-" + EOL +
+          ">FER1_SOLLC Ferredoxin-1, chloroplast precursor" + EOL +
+          "TIETHKEEELTA-" + EOL + 
+          ">Q93XJ9_SOLTU Ferredoxin I precursor" + EOL +
+          "TIETHKEEELTA-" + EOL;
+  // @formatter:on
+
+  private static final int SEQ_ANN_COUNT = 10;
+
+  private AlignmentI alignment;
+
+  /**
+   * Test method that converts a (possibly null) array to a list.
+   */
+  @Test
+  public void testAsList()
+  {
+    // null array
+    Collection<AlignmentAnnotation> c1 = AlignmentAnnotationUtils
+            .asList(null);
+    assertTrue(c1.isEmpty());
+    
+    // empty array
+    AlignmentAnnotation[] anns = new AlignmentAnnotation[0];
+    c1 = AlignmentAnnotationUtils.asList(anns);
+    assertTrue(c1.isEmpty());
+
+    // non-empty array
+    anns = new AlignmentAnnotation[2];
+    anns[0] = new AlignmentAnnotation("label0", "desc0", 0.0f);
+    anns[1] = new AlignmentAnnotation("label1", "desc1", 1.0f);
+    c1 = AlignmentAnnotationUtils.asList(anns);
+    assertEquals(2, c1.size());
+    assertTrue(c1.contains(anns[0]));
+    assertTrue(c1.contains(anns[1]));
+  }
+
+  /**
+   * This output is not part of the test but may help make sense of it...
+   * 
+   * @param shownTypes
+   * @param hiddenTypes
+   */
+  protected void consoleDebug(Map<String, List<List<String>>> shownTypes,
+          Map<String, List<List<String>>> hiddenTypes)
+  {
+    for (String calcId : shownTypes.keySet())
+    {
+      System.out.println("Visible annotation types for calcId=" + calcId);
+      for (List<String> type : shownTypes.get(calcId))
+      {
+        System.out.println("   " + type);
+      }
+    }
+    for (String calcId : hiddenTypes.keySet())
+    {
+      System.out.println("Hidden annotation types for calcId=" + calcId);
+      for (List<String> type : hiddenTypes.get(calcId))
+      {
+        System.out.println("   " + type);
+      }
+    }
+  }
+
+  /**
+   * Add a sequence group to the alignment with the specified sequences (base 0)
+   * in it
+   * 
+   * @param i
+   * @param more
+   */
+  private List<SequenceI> selectSequences(int... selected)
+  {
+    List<SequenceI> result = new ArrayList<SequenceI>();
+    SequenceI[] seqs = alignment.getSequencesArray();
+    for (int i : selected)
+    {
+      result.add(seqs[i]);
+    }
+    return result;
+  }
+
+  @Before
+  public void setUp() throws IOException
+  {
+    alignment = new jalview.io.FormatAdapter().readFile(TEST_DATA,
+            AppletFormatAdapter.PASTE, "FASTA");
+  
+    AlignmentAnnotation[] anns = new AlignmentAnnotation[SEQ_ANN_COUNT];
+    for (int i = 0; i < anns.length; i++)
+    {
+      anns[i] = new AlignmentAnnotation("Label" + i, null, 0d);
+      anns[i].setCalcId("CalcId" + i);
+      anns[i].visible = true;
+      alignment.addAnnotation(anns[i]);
+    }
+  }
+
+  /**
+   * Test a mixture of show/hidden annotations in/outside selection group.
+   */
+  @Test
+  public void testGetShownHiddenTypes_forSelectionGroup()
+  {
+    Map<String, List<List<String>>> shownTypes = new HashMap<String, List<List<String>>>();
+    Map<String, List<List<String>>> hiddenTypes = new HashMap<String, List<List<String>>>();
+    AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
+    SequenceI[] seqs = alignment.getSequencesArray();
+  
+    /*
+     * Configure annotation properties for test
+     */
+    // not in selection group (should be ignored):
+    // hidden annotation Label4 not in selection group
+    anns[4].sequenceRef = seqs[2];
+    anns[4].visible = false;
+    anns[7].sequenceRef = seqs[1];
+    anns[7].visible = true;
+  
+    /*
+     * in selection group, hidden:
+     */
+    anns[2].sequenceRef = seqs[3]; // CalcId2/Label2
+    anns[2].visible = false;
+    anns[3].sequenceRef = seqs[3]; // CalcId3/Label2
+    anns[3].visible = false;
+    anns[3].label = "Label2";
+    anns[4].sequenceRef = seqs[3]; // CalcId2/Label3
+    anns[4].visible = false;
+    anns[4].label = "Label3";
+    anns[4].setCalcId("CalcId2");
+    anns[8].sequenceRef = seqs[0]; // CalcId9/Label9
+    anns[8].visible = false;
+    anns[8].label = "Label9";
+    anns[8].setCalcId("CalcId9");
+    /*
+     * in selection group, visible
+     */
+    anns[6].sequenceRef = seqs[0]; // CalcId6/Label6
+    anns[6].visible = true;
+    anns[9].sequenceRef = seqs[3]; // CalcId9/Label9
+    anns[9].visible = true;
+  
+    List<SequenceI> selected = selectSequences(0, 3);
+    AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes,
+            AlignmentAnnotationUtils.asList(anns),
+            selected);
+  
+    // check results; note CalcId9/Label9 is both hidden and shown (for
+    // different sequences) so should be in both
+    // shown: CalcId6/Label6 and CalcId9/Label9
+    assertEquals(2, shownTypes.size());
+    assertEquals(1, shownTypes.get("CalcId6").size());
+    assertEquals(1, shownTypes.get("CalcId6").get(0).size());
+    assertEquals("Label6", shownTypes.get("CalcId6").get(0).get(0));
+    assertEquals(1, shownTypes.get("CalcId9").size());
+    assertEquals(1, shownTypes.get("CalcId9").get(0).size());
+    assertEquals("Label9", shownTypes.get("CalcId9").get(0).get(0));
+  
+    // hidden: CalcId2/Label2, CalcId2/Label3, CalcId3/Label2, CalcId9/Label9
+    assertEquals(3, hiddenTypes.size());
+    assertEquals(2, hiddenTypes.get("CalcId2").size());
+    assertEquals(1, hiddenTypes.get("CalcId2").get(0).size());
+    assertEquals("Label2", hiddenTypes.get("CalcId2").get(0).get(0));
+    assertEquals(1, hiddenTypes.get("CalcId2").get(1).size());
+    assertEquals("Label3", hiddenTypes.get("CalcId2").get(1).get(0));
+    assertEquals(1, hiddenTypes.get("CalcId3").size());
+    assertEquals(1, hiddenTypes.get("CalcId3").get(0).size());
+    assertEquals("Label2", hiddenTypes.get("CalcId3").get(0).get(0));
+    assertEquals(1, hiddenTypes.get("CalcId9").size());
+    assertEquals(1, hiddenTypes.get("CalcId9").get(0).size());
+    assertEquals("Label9", hiddenTypes.get("CalcId9").get(0).get(0));
+  
+    consoleDebug(shownTypes, hiddenTypes);
+  }
+
+  /**
+   * Test case where there are 'grouped' annotations, visible and hidden, within
+   * and without the selection group.
+   */
+  @Test
+  public void testGetShownHiddenTypes_withGraphGroups()
+  {
+    final int GROUP_4 = 4;
+    final int GROUP_5 = 5;
+    final int GROUP_6 = 6;
+  
+    Map<String, List<List<String>>> shownTypes = new HashMap<String, List<List<String>>>();
+    Map<String, List<List<String>>> hiddenTypes = new HashMap<String, List<List<String>>>();
+    AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
+    SequenceI[] seqs = alignment.getSequencesArray();
+  
+    /*
+     * Configure annotation properties for test
+     */
+    // annotations for selection group and graph group
+    // hidden annotations Label2, Label3, in (hidden) group 5
+    anns[2].sequenceRef = seqs[3];
+    anns[2].visible = false;
+    anns[2].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[2].graphGroup = GROUP_5; // not a visible group
+    anns[3].sequenceRef = seqs[0];
+    anns[3].visible = false;
+    anns[3].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[3].graphGroup = GROUP_5;
+    // need to ensure annotations have the same calcId as well
+    anns[3].setCalcId("CalcId2");
+  
+    // annotations Label1 (hidden), Label5 (visible) in group 6 (visible)
+    anns[1].sequenceRef = seqs[3];
+    // being in a visible group should take precedence over this visibility
+    anns[1].visible = false;
+    anns[1].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[1].graphGroup = GROUP_6;
+    anns[5].sequenceRef = seqs[0];
+    anns[5].visible = true;
+    anns[5].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[5].graphGroup = GROUP_6;
+    anns[5].setCalcId("CalcId1");
+  
+    // annotations outwith selection group - should be ignored
+    // hidden grouped annotations
+    anns[6].sequenceRef = seqs[2];
+    anns[6].visible = false;
+    anns[6].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[6].graphGroup = GROUP_4;
+    anns[8].sequenceRef = seqs[1];
+    anns[8].visible = false;
+    anns[8].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[8].graphGroup = GROUP_4;
+    // visible grouped annotations Label7, Label9
+    anns[7].sequenceRef = seqs[2];
+    anns[7].visible = true;
+    anns[7].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[7].graphGroup = GROUP_4;
+    anns[9].sequenceRef = seqs[1];
+    anns[9].visible = true;
+    anns[9].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[9].graphGroup = GROUP_4;
+  
+    List<SequenceI> selected = selectSequences(0, 3);
+    AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes,
+            AlignmentAnnotationUtils.asList(anns),
+            selected);
+  
+    consoleDebug(shownTypes, hiddenTypes);
+  
+    // CalcId1 / Label1, Label5 (only) should be 'shown', as a compound type
+    assertEquals(1, shownTypes.get("CalcId1").size());
+    assertEquals(2, shownTypes.get("CalcId1").get(0).size());
+    assertEquals("Label1", shownTypes.get("CalcId1").get(0).get(0));
+    assertEquals("Label5", shownTypes.get("CalcId1").get(0).get(1));
+  
+    // CalcId2 / Label2, Label3 (only) should be 'hidden'
+    assertEquals(1, hiddenTypes.get("CalcId2").size());
+    assertEquals(2, hiddenTypes.get("CalcId2").get(0).size());
+    assertEquals("Label2", hiddenTypes.get("CalcId2").get(0).get(0));
+    assertEquals("Label3", hiddenTypes.get("CalcId2").get(0).get(1));
+  }
+
+  /**
+   * Test method that determines visible graph groups.
+   */
+  @Test
+  public void testGetVisibleGraphGroups()
+  {
+    AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
+    /*
+     * a bar graph group is not included
+     */
+    anns[0].graph = AlignmentAnnotation.BAR_GRAPH;
+    anns[0].graphGroup = 1;
+    anns[0].visible = true;
+  
+    /*
+     * a line graph group is included as long as one of its members is visible
+     */
+    anns[1].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[1].graphGroup = 5;
+    anns[1].visible = false;
+    anns[2].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[2].graphGroup = 5;
+    anns[2].visible = true;
+  
+    /*
+     * a line graph group with no visible rows is not included
+     */
+    anns[3].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[3].graphGroup = 3;
+    anns[3].visible = false;
+  
+    // a visible line graph with no graph group is not included
+    anns[4].graph = AlignmentAnnotation.LINE_GRAPH;
+    anns[4].graphGroup = -1;
+    anns[4].visible = true;
+  
+    BitSet result = AlignmentAnnotationUtils
+            .getVisibleLineGraphGroups(AlignmentAnnotationUtils
+                    .asList(anns));
+    assertTrue(result.get(5));
+    assertFalse(result.get(0));
+    assertFalse(result.get(1));
+    assertFalse(result.get(2));
+    assertFalse(result.get(3));
+  }
+
+  /**
+   * Test for case where no sequence is selected. Shouldn't normally arise but
+   * check it handles it gracefully.
+   */
+  @Test
+  public void testGetShownHiddenTypes_noSequenceSelected()
+  {
+    Map<String, List<List<String>>> shownTypes = new HashMap<String, List<List<String>>>();
+    Map<String, List<List<String>>> hiddenTypes = new HashMap<String, List<List<String>>>();
+    AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
+    // selected sequences null
+    AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes,
+            AlignmentAnnotationUtils.asList(anns), null);
+    assertTrue(shownTypes.isEmpty());
+    assertTrue(hiddenTypes.isEmpty());
+
+    List<SequenceI> sequences = new ArrayList<SequenceI>();
+    // selected sequences empty list
+    AlignmentAnnotationUtils.getShownHiddenTypes(shownTypes, hiddenTypes,
+            AlignmentAnnotationUtils.asList(anns), sequences);
+    assertTrue(shownTypes.isEmpty());
+    assertTrue(hiddenTypes.isEmpty());
+  }
+}
diff --git a/test/jalview/datamodel/AlignmentAnnotationTests.java b/test/jalview/datamodel/AlignmentAnnotationTests.java
new file mode 100644 (file)
index 0000000..7df6255
--- /dev/null
@@ -0,0 +1,153 @@
+package jalview.datamodel;
+
+import static org.junit.Assert.*;
+
+import java.awt.Frame;
+
+import javax.swing.JFrame;
+import javax.swing.SwingWorker;
+
+import jalview.analysis.AlignSeq;
+import jalview.gui.AlignFrame;
+import jalview.io.AppletFormatAdapter;
+import jalview.io.FormatAdapter;
+
+import org.junit.Test;
+
+public class AlignmentAnnotationTests
+{
+  /**
+   * create some dummy annotation derived from the sequence
+   * 
+   * @param sq
+   */
+  public static void createAnnotation(SequenceI sq)
+  {
+    Annotation[] al = new Annotation[sq.getLength()];
+    for (int i = 0; i < al.length; i++)
+    {
+      al[i] = new Annotation(new Annotation("" + sq.getCharAt(i), "",
+              (char) 0, (float) sq.findPosition(i)));
+    }
+    AlignmentAnnotation alan = new AlignmentAnnotation("For "
+            + sq.getName(), "Fake alignment annot", al);
+    // create a sequence mapping for the annotation vector in its current state
+    alan.createSequenceMapping(sq, sq.getStart(), false);
+    sq.addAlignmentAnnotation(alan);
+  }
+
+  /**
+   * use this to test annotation derived from method above as it is transferred
+   * across different sequences derived from same dataset coordinate frame
+   * 
+   * @param ala
+   */
+  public static void testAnnotTransfer(AlignmentAnnotation ala)
+  {
+    assertEquals(
+            "Failed - need annotation created by createAnnotation method",
+            ala.description, "Fake alignment annot");
+    ala.adjustForAlignment();
+    for (int p = 0; p < ala.annotations.length; p++)
+    {
+      if (ala.annotations[p] != null)
+      {
+        assertEquals("Mismatch at position " + p
+                + " between annotation position value and sequence"
+                + ala.annotations[p], (int) ala.annotations[p].value,
+                ala.sequenceRef.findPosition(p));
+      }
+    }
+  }
+
+  /**
+   * Tests the liftOver method and also exercises the functions for remapping
+   * annotation across different reference sequences. Here, the test is between
+   * different dataset frames (annotation transferred by mapping between
+   * sequences)
+   */
+  @Test
+  public void testLiftOver()
+  {
+    SequenceI sqFrom = new Sequence("fromLong", "QQQCDEWGH");
+    sqFrom.setStart(10);
+    sqFrom.setEnd(sqFrom.findPosition(sqFrom.getLength() - 1));
+    SequenceI sqTo = new Sequence("toShort", "RCDEW");
+    sqTo.setStart(20);
+    sqTo.setEnd(sqTo.findPosition(sqTo.getLength() - 1));
+    createAnnotation(sqTo);
+    AlignmentAnnotation origTo = sqTo.getAnnotation()[0];
+    createAnnotation(sqFrom);
+    AlignmentAnnotation origFrom = sqFrom.getAnnotation()[0];
+    AlignSeq align = AlignSeq.doGlobalNWAlignment(sqFrom, sqTo,
+            AlignSeq.PEP);
+    SequenceI alSeq1 = new Sequence(sqFrom.getName(), align.getAStr1());
+    alSeq1.setStart(sqFrom.getStart() + align.getSeq1Start() - 1);
+    alSeq1.setEnd(sqFrom.getStart() + align.getSeq1End() - 1);
+    alSeq1.setDatasetSequence(sqFrom);
+    SequenceI alSeq2 = new Sequence(sqTo.getName(), align.getAStr2());
+    alSeq2.setStart(sqTo.getStart() + align.getSeq2Start() - 1);
+    alSeq2.setEnd(sqTo.getStart() + align.getSeq2End() - 1);
+    alSeq2.setDatasetSequence(sqTo);
+    System.out.println(new AppletFormatAdapter().formatSequences("STH",
+            new Alignment(new SequenceI[]
+            { sqFrom, alSeq1, sqTo, alSeq2 }), true));
+
+    Mapping mp = align.getMappingFromS1(false);
+
+    AlignmentAnnotation almap1 = new AlignmentAnnotation(
+            sqTo.getAnnotation()[0]);
+    almap1.liftOver(sqFrom, mp);
+    assertEquals(almap1.sequenceRef, sqFrom);
+    alSeq1.addAlignmentAnnotation(almap1);
+    almap1.setSequenceRef(alSeq1);
+    almap1.adjustForAlignment();
+    AlignmentAnnotation almap2 = new AlignmentAnnotation(
+            sqFrom.getAnnotation()[0]);
+    almap2.liftOver(sqTo, mp);
+    assertEquals(almap2.sequenceRef, sqTo);
+
+    alSeq2.addAlignmentAnnotation(almap2);
+    almap2.setSequenceRef(alSeq2);
+    almap2.adjustForAlignment();
+
+    AlignmentI all = new Alignment(new SequenceI[]
+    { alSeq1, alSeq2 });
+    all.addAnnotation(almap1);
+    all.addAnnotation(almap2);
+    System.out.println(new AppletFormatAdapter().formatSequences("STH",
+            all, true));
+
+    for (int p = 0; p < alSeq1.getLength(); p++)
+    {
+      Annotation orig1, trans1, orig2, trans2;
+      trans2 = almap2.annotations[p];
+      orig2 = origFrom.annotations[alSeq1.findPosition(p)
+              - sqFrom.getStart()];
+      orig1 = origTo.annotations[alSeq2.findPosition(p) - sqTo.getStart()];
+      trans1 = almap1.annotations[p];
+      if (trans1 == trans2)
+      {
+        System.out.println("Pos " + p + " mismatch");
+        continue;
+      }
+      assertEquals(
+              "Mismatch on Original From and transferred annotation on 2",
+              (orig2 != null) ? orig2.toString() : null,
+              (trans2 != null) ? trans2.toString() : null);
+      assertEquals(
+              "Mismatch on Original To and transferred annotation on 1",
+              (orig1 != null) ? orig1.toString() : null,
+              (trans1 != null) ? trans1.toString() : null);
+      String alm1 = ""
+              + (almap1.annotations.length > p ? almap1.annotations[p].displayCharacter
+                      : "Out of range");
+      String alm2 = ""
+              + (almap2.annotations.length > p ? almap2.annotations[p].displayCharacter
+                      : "Out of range");
+      assertEquals("Position " + p + " " + alm1 + " " + alm2, alm1, alm2);
+    }
+    // new jalview.io.FormatAdapter().formatSequences("STOCKHOLM", n)
+  }
+
+}
diff --git a/test/jalview/datamodel/AlignmentTest.java b/test/jalview/datamodel/AlignmentTest.java
new file mode 100644 (file)
index 0000000..93170b7
--- /dev/null
@@ -0,0 +1,71 @@
+package jalview.datamodel;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import jalview.io.AppletFormatAdapter;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for Alignment datamodel.
+ * 
+ * @author gmcarstairs
+ *
+ */
+public class AlignmentTest
+{
+  // @formatter:off
+  private static final String TEST_DATA = 
+          "# STOCKHOLM 1.0\n" +
+          "#=GS D.melanogaster.1 AC AY119185.1/838-902\n" +
+          "#=GS D.melanogaster.2 AC AC092237.1/57223-57161\n" +
+          "#=GS D.melanogaster.3 AC AY060611.1/560-627\n" +
+          "D.melanogaster.1          G.AGCC.CU...AUGAUCGA\n" +
+          "#=GR D.melanogaster.1 SS  ................((((\n" +
+          "D.melanogaster.2          C.AUUCAACU.UAUGAGGAU\n" +
+          "#=GR D.melanogaster.2 SS  ................((((\n" +
+          "D.melanogaster.3          G.UGGCGCU..UAUGACGCA\n" +
+          "#=GR D.melanogaster.3 SS  (.(((...(....(((((((\n" +
+          "//";
+  // @formatter:on
+
+
+  private Alignment al;
+
+  /*
+   * Read in Stockholm format test data including secondary structure
+   * annotations.
+   */
+  @Before
+  public void setUp() throws IOException
+  {
+    al = new jalview.io.FormatAdapter().readFile(TEST_DATA,
+            AppletFormatAdapter.PASTE, "STH");
+    for (int i = 0; i < al.getSequencesArray().length; ++i)
+    {
+      al.addAnnotation(al.getSequenceAt(i).getAnnotation()[0]);
+      al.getSequenceAt(i).getAnnotation()[0].setCalcId("CalcIdFor"
+              + al.getSequenceAt(i).getName());
+    }
+  }
+
+  /**
+   * Test method that returns annotations that match on calcId.
+   */
+  @Test
+  public void testFindAnnotation_byCalcId()
+  {
+    Iterable<AlignmentAnnotation> anns = al
+            .findAnnotation("CalcIdForD.melanogaster.2");
+    Iterator<AlignmentAnnotation> iter = anns.iterator();
+    assertTrue(iter.hasNext());
+    AlignmentAnnotation ann = iter.next();
+    assertEquals("D.melanogaster.2", ann.sequenceRef.getName());
+    assertFalse(iter.hasNext());
+  }
+}
diff --git a/test/jalview/datamodel/SequenceTest.java b/test/jalview/datamodel/SequenceTest.java
new file mode 100644 (file)
index 0000000..d9101cf
--- /dev/null
@@ -0,0 +1,106 @@
+package jalview.datamodel;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class SequenceTest
+{
+  Sequence seq;
+
+  @Before
+  public void setUp()
+  {
+    seq = new Sequence("FER1", "AKPNGVL");
+  }
+  @Test
+  public void testGetAnnotation()
+  {
+    // initial state returns null not an empty array
+    assertNull(seq.getAnnotation());
+    AlignmentAnnotation ann = addAnnotation("label1", "desc1", "calcId1",
+            1f);
+    AlignmentAnnotation[] anns = seq.getAnnotation();
+    assertEquals(1, anns.length);
+    assertSame(ann, anns[0]);
+
+    // removing all annotations reverts array to null
+    seq.removeAlignmentAnnotation(ann);
+    assertNull(seq.getAnnotation());
+  }
+
+  @Test
+  public void testGetAnnotation_forLabel()
+  {
+    AlignmentAnnotation ann1 = addAnnotation("label1", "desc1", "calcId1", 1f);
+    AlignmentAnnotation ann2 = addAnnotation("label2", "desc2", "calcId2", 1f);
+    AlignmentAnnotation ann3 = addAnnotation("label1", "desc3", "calcId3", 1f);
+    AlignmentAnnotation[] anns = seq.getAnnotation("label1");
+    assertEquals(2, anns.length);
+    assertSame(ann1, anns[0]);
+    assertSame(ann3, anns[1]);
+  }
+
+  private AlignmentAnnotation addAnnotation(String label,
+          String description, String calcId,
+          float value)
+  {
+    final AlignmentAnnotation annotation = new AlignmentAnnotation(label, description,
+            value);
+    annotation.setCalcId(calcId);
+    seq.addAlignmentAnnotation(annotation);
+    return annotation;
+  }
+
+  @Test
+  public void testGetAlignmentAnnotations_forCalcIdAndLabel()
+  {
+    AlignmentAnnotation ann1 = addAnnotation("label1", "desc1", "calcId1",
+            1f);
+    AlignmentAnnotation ann2 = addAnnotation("label2", "desc2", "calcId2",
+            1f);
+    AlignmentAnnotation ann3 = addAnnotation("label2", "desc3", "calcId3",
+            1f);
+    AlignmentAnnotation ann4 = addAnnotation("label2", "desc3", "calcId2",
+            1f);
+    AlignmentAnnotation ann5 = addAnnotation("label5", "desc3", null,
+            1f);
+    AlignmentAnnotation ann6 = addAnnotation(null, "desc3", "calcId3",
+            1f);
+    List<AlignmentAnnotation> anns = seq.getAlignmentAnnotations("calcId2",
+            "label2");
+    assertEquals(2, anns.size());
+    assertSame(ann2, anns.get(0));
+    assertSame(ann4, anns.get(1));
+    
+    assertTrue(seq.getAlignmentAnnotations("calcId2", "label3").isEmpty());
+    assertTrue(seq.getAlignmentAnnotations("calcId3", "label5").isEmpty());
+    assertTrue(seq.getAlignmentAnnotations("calcId2", null).isEmpty());
+    assertTrue(seq.getAlignmentAnnotations(null, "label3").isEmpty());
+    assertTrue(seq.getAlignmentAnnotations(null, null).isEmpty());
+  }
+
+  /**
+   * Tests for addAlignmentAnnotation. Note this method has the side-effect of
+   * setting the sequenceRef on the annotation.
+   */
+  @Test
+  public void testAddAlignmentAnnotation()
+  {
+    assertNull(seq.annotation);
+    final AlignmentAnnotation annotation = new AlignmentAnnotation("a",
+            "b", 2d);
+    assertNull(annotation.sequenceRef);
+    seq.addAlignmentAnnotation(annotation);
+    assertSame(seq, annotation.sequenceRef);
+    AlignmentAnnotation[] anns = seq.getAnnotation();
+    assertEquals(1, anns.length);
+    assertSame(annotation, anns[0]);
+  }
+}
index d561acb..8070ee1 100644 (file)
  */
 package jalview.ext.jmol;
 
-import static org.junit.Assert.*;
-
-import java.util.Vector;
-
+import static org.junit.Assert.assertTrue;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
@@ -31,6 +28,8 @@ import jalview.gui.AlignFrame;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FileLoader;
 
+import java.util.Vector;
+
 import org.junit.Test;
 
 /**
@@ -80,6 +79,7 @@ public class PDBFileWithJmolTest
     }
   }
 
+
   private void validateSecStrRows(AlignmentI al)
   {
     if (!al.isNucleotide())
index 6635f0d..d2322ef 100644 (file)
@@ -96,7 +96,7 @@ public class TestAnnotate3D
   @Test
   public void testPDBfileVsRNAML() throws Exception
   {
-    PDBfile pdbf = new PDBfile("examples/2GIS.pdb", FormatAdapter.FILE);
+    PDBfile pdbf = new PDBfile(true,true,"examples/2GIS.pdb", FormatAdapter.FILE);
     Assert.assertTrue(pdbf.isValid());
     // Comment - should add new FileParse constructor like new FileParse(Reader
     // ..). for direct reading
diff --git a/test/jalview/gui/AnnotationChooserTest.java b/test/jalview/gui/AnnotationChooserTest.java
new file mode 100644 (file)
index 0000000..944ab9c
--- /dev/null
@@ -0,0 +1,754 @@
+package jalview.gui;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
+import java.awt.Checkbox;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.event.ItemEvent;
+import java.io.IOException;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for AnnotationChooser
+ * 
+ * @author gmcarstairs
+ *
+ */
+public class AnnotationChooserTest
+{
+  // 4 sequences x 13 positions
+  final static String TEST_DATA = ">FER_CAPAA Ferredoxin\n"
+          + "TIETHKEAELVG-\n"
+          + ">FER_CAPAN Ferredoxin, chloroplast precursor\n"
+          + "TIETHKEAELVG-\n"
+          + ">FER1_SOLLC Ferredoxin-1, chloroplast precursor\n"
+          + "TIETHKEEELTA-\n" + ">Q93XJ9_SOLTU Ferredoxin I precursor\n"
+          + "TIETHKEEELTA-\n";
+
+  AnnotationChooser testee;
+
+  AlignmentPanel parentPanel;
+
+  AlignFrame af;
+
+  @Before
+  public void setUp() throws IOException
+  {
+    AlignmentI al = new jalview.io.FormatAdapter().readFile(TEST_DATA,
+            AppletFormatAdapter.PASTE, "FASTA");
+    af = new AlignFrame(al, 700, 500);
+    parentPanel = new AlignmentPanel(af, af.getViewport());
+    addAnnotations();
+  }
+
+  /**
+   * Add 4 annotations, 3 of them sequence-specific.
+   * 
+   * <PRE>
+   * ann1 - for sequence 0 - label 'IUPRED' 
+   * ann2 - not sequence related - label 'Beauty' 
+   * ann3 - for sequence 3 - label 'JMol'
+   * ann4 - for sequence 2 - label 'IUPRED'
+   * ann5 - for sequence 1 - label 'JMol'
+   */
+  private void addAnnotations()
+  {
+    Annotation an = new Annotation(2f);
+    Annotation[] anns = new Annotation[]
+    { an, an, an };
+    AlignmentAnnotation ann0 = new AlignmentAnnotation("IUPRED", "", anns);
+    AlignmentAnnotation ann1 = new AlignmentAnnotation("Beauty", "", anns);
+    AlignmentAnnotation ann2 = new AlignmentAnnotation("JMol", "", anns);
+    AlignmentAnnotation ann3 = new AlignmentAnnotation("IUPRED", "", anns);
+    AlignmentAnnotation ann4 = new AlignmentAnnotation("JMol", "", anns);
+    SequenceI[] seqs = parentPanel.getAlignment().getSequencesArray();
+    ann0.setSequenceRef(seqs[0]);
+    ann2.setSequenceRef(seqs[3]);
+    ann3.setSequenceRef(seqs[2]);
+    ann4.setSequenceRef(seqs[1]);
+    parentPanel.getAlignment().addAnnotation(ann0);
+    parentPanel.getAlignment().addAnnotation(ann1);
+    parentPanel.getAlignment().addAnnotation(ann2);
+    parentPanel.getAlignment().addAnnotation(ann3);
+    parentPanel.getAlignment().addAnnotation(ann4);
+  }
+
+  /**
+   * Test creation of panel with OK and Cancel buttons
+   */
+  @Test
+  public void testBuildActionButtonsPanel()
+  {
+    testee = new AnnotationChooser(parentPanel);
+    JPanel jp = testee.buildActionButtonsPanel();
+    assertTrue("Wrong layout", jp.getLayout() instanceof FlowLayout);
+
+    Component[] comps = jp.getComponents();
+    assertEquals("Not 2 action buttons", 2, comps.length);
+
+    final Component jb1 = comps[0];
+    final Component jb2 = comps[1];
+
+    assertEquals("Not 'OK' button", MessageManager.getString("action.ok"),
+            ((JButton) jb1).getText());
+    assertEquals("Wrong button font", JvSwingUtils.getLabelFont(),
+            jb1.getFont());
+
+    assertEquals("Not 'Cancel' button",
+            MessageManager.getString("action.cancel"),
+            ((JButton) jb2).getText());
+    assertEquals("Wrong button font", JvSwingUtils.getLabelFont(),
+            jb2.getFont());
+  }
+
+  /**
+   * Test 'Apply to' has 3 radio buttons enabled, 'Selected Sequences' selected,
+   * when there is a current selection group.
+   */
+  @Test
+  public void testBuildApplyToOptionsPanel_withSelectionGroup()
+  {
+    selectSequences(0, 2, 3);
+    testee = new AnnotationChooser(parentPanel);
+
+    JPanel jp = testee.buildApplyToOptionsPanel();
+    Component[] comps = jp.getComponents();
+    assertEquals("Not 3 radio buttons", 3, comps.length);
+
+    final Checkbox cb1 = (Checkbox) comps[0];
+    final Checkbox cb2 = (Checkbox) comps[1];
+    final Checkbox cb3 = (Checkbox) comps[2];
+
+    assertTrue("Not enabled", cb1.isEnabled());
+    assertTrue("Not enabled", cb2.isEnabled());
+    assertTrue("Not enabled", cb3.isEnabled());
+    assertEquals("Option not selected", cb2, cb2.getCheckboxGroup()
+            .getSelectedCheckbox());
+
+    // check state variables match checkbox selection
+    assertTrue(testee.isApplyToSelectedSequences());
+    assertFalse(testee.isApplyToUnselectedSequences());
+  }
+
+  /**
+   * Add a sequence group to the alignment with the specified sequences (base 0)
+   * in it
+   * 
+   * @param i
+   * @param more
+   */
+  private void selectSequences(int... selected)
+  {
+    SequenceI[] seqs = parentPanel.getAlignment().getSequencesArray();
+    SequenceGroup sg = new SequenceGroup();
+    for (int i : selected)
+    {
+      sg.addSequence(seqs[i], false);
+    }
+    parentPanel.av.setSelectionGroup(sg);
+  }
+
+  /**
+   * Test 'Apply to' has 1 radio button enabled, 'All Sequences' selected, when
+   * there is no current selection group.
+   */
+  @Test
+  public void testBuildApplyToOptionsPanel_noSelectionGroup()
+  {
+    testee = new AnnotationChooser(parentPanel);
+    JPanel jp = testee.buildApplyToOptionsPanel();
+    verifyApplyToOptionsPanel_noSelectionGroup(jp);
+  }
+
+  protected void verifyApplyToOptionsPanel_noSelectionGroup(JPanel jp)
+  {
+    assertTrue("Wrong layout", jp.getLayout() instanceof FlowLayout);
+    Component[] comps = jp.getComponents();
+    assertEquals("Not 3 radio buttons", 3, comps.length);
+
+    final Checkbox cb1 = (Checkbox) comps[0];
+    final Checkbox cb2 = (Checkbox) comps[1];
+    final Checkbox cb3 = (Checkbox) comps[2];
+
+    assertTrue("Not enabled", cb1.isEnabled());
+    assertFalse("Enabled", cb2.isEnabled());
+    assertFalse("Enabled", cb3.isEnabled());
+    assertEquals("Not selected", cb1, cb1.getCheckboxGroup()
+            .getSelectedCheckbox());
+
+    // check state variables match checkbox selection
+    assertTrue(testee.isApplyToSelectedSequences());
+    assertTrue(testee.isApplyToUnselectedSequences());
+
+    assertEquals("Wrong text",
+            MessageManager.getString("label.all_sequences"), cb1.getLabel());
+    assertEquals("Wrong text",
+            MessageManager.getString("label.selected_sequences"),
+            cb2.getLabel());
+    assertEquals("Wrong text",
+            MessageManager.getString("label.except_selected_sequences"),
+            cb3.getLabel());
+  }
+
+  /**
+   * Test Show and Hide radio buttons created, with Hide initially selected.
+   */
+  @Test
+  public void testBuildShowHidePanel()
+  {
+    testee = new AnnotationChooser(parentPanel);
+    JPanel jp = testee.buildShowHidePanel();
+    verifyShowHidePanel(jp);
+
+  }
+
+  protected void verifyShowHidePanel(JPanel jp)
+  {
+    assertTrue("Wrong layout", jp.getLayout() instanceof FlowLayout);
+    Component[] comps = jp.getComponents();
+    assertEquals("Not 2 radio buttons", 2, comps.length);
+
+    final Checkbox cb1 = (Checkbox) comps[0];
+    final Checkbox cb2 = (Checkbox) comps[1];
+
+    assertTrue("Show not enabled", cb1.isEnabled());
+    assertTrue("Hide not enabled", cb2.isEnabled());
+
+    // Hide (button 2) selected; note this may change to none (null)
+    assertEquals("Not selected", cb2, cb2.getCheckboxGroup()
+            .getSelectedCheckbox());
+
+    assertTrue("Show is flagged", !testee.isShowSelected());
+
+    assertEquals("Wrong text",
+            MessageManager.getString("label.show_selected_annotations"),
+            cb1.getLabel());
+    assertEquals("Wrong text",
+            MessageManager.getString("label.hide_selected_annotations"),
+            cb2.getLabel());
+  }
+
+  /**
+   * Test construction of panel containing two sub-panels
+   */
+  @Test
+  public void testBuildShowHideOptionsPanel()
+  {
+    testee = new AnnotationChooser(parentPanel);
+    JPanel jp = testee.buildShowHideOptionsPanel();
+    assertTrue("Wrong layout", jp.getLayout() instanceof BorderLayout);
+    Component[] comps = jp.getComponents();
+    assertEquals("Not 2 sub-panels", 2, comps.length);
+
+    verifyShowHidePanel((JPanel) comps[0]);
+    verifyApplyToOptionsPanel_noSelectionGroup((JPanel) comps[1]);
+  }
+
+  /**
+   * Test that annotation types are (uniquely) identified.
+   * 
+   */
+  @Test
+  public void testGetAnnotationTypes()
+  {
+    selectSequences(1);
+    testee = new AnnotationChooser(parentPanel);
+    // selection group should make no difference to the result
+    // as all annotation types for the alignment are considered
+
+    List<String> types = AnnotationChooser.getAnnotationTypes(
+            parentPanel.getAlignment(), true);
+    assertEquals("Not two annotation types", 2, types.size());
+    assertTrue("IUPRED missing", types.contains("IUPRED"));
+    assertTrue("JMol missing", types.contains("JMol"));
+
+    types = AnnotationChooser.getAnnotationTypes(
+            parentPanel.getAlignment(), false);
+    assertEquals("Not six annotation types", 6, types.size());
+    assertTrue("IUPRED missing", types.contains("IUPRED"));
+    assertTrue("JMol missing", types.contains("JMol"));
+    assertTrue("Beauty missing", types.contains("Beauty"));
+    // These are added by viewmodel.AlignViewport.initAutoAnnotation():
+    assertTrue("Consensus missing", types.contains("Consensus"));
+    assertTrue("Quality missing", types.contains("Quality"));
+    assertTrue("Conservation missing", types.contains("Conservation"));
+  }
+
+  /**
+   * Test result of selecting an annotation type, with 'Hide for all sequences'.
+   * 
+   * We expect all annotations of that type to be set hidden. Other annotations
+   * should be left visible.
+   */
+  @Test
+  public void testSelectType_hideForAll()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+    final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
+    setSelected(hideCheckbox, true);
+
+    final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee,
+            1, 1, 0);
+    setSelected(allSequencesCheckbox, true);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+
+    assertTrue(anns[5].visible); // JMol for seq3
+    assertTrue(anns[7].visible); // JMol for seq1
+
+    setSelected(getTypeCheckbox("JMol"), true);
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertFalse(anns[5].visible); // JMol for seq3 - not selected but hidden
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertFalse(anns[7].visible); // JMol for seq1 - selected and hidden
+  }
+
+  /**
+   * Test result of selecting an annotation type, with 'Hide for selected
+   * sequences'.
+   * 
+   * We expect the annotations of that type, linked to the sequence group, to be
+   * set hidden. Other annotations should be left visible.
+   */
+  @Test
+  public void testSelectType_hideForSelected()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+    final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
+    setSelected(hideCheckbox, true);
+
+    /*
+     * Don't set the 'selected sequences' radio button since this would trigger
+     * an update, including unselected sequences / annotation types
+     */
+    // setSelected(getSelectedSequencesCheckbox());
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+
+    assertTrue(anns[7].visible); // JMol for seq1
+
+    setSelected(getTypeCheckbox("JMol"), true);
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertTrue(anns[5].visible); // JMol for seq3 not in selection group
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertFalse(anns[7].visible); // JMol for seq1 in selection group
+  }
+
+  /**
+   * Test result of deselecting an annotation type, with 'Hide for all
+   * sequences'.
+   * 
+   * We expect all annotations of that type to be set visible. Other annotations
+   * should be left unchanged.
+   */
+  @Test
+  public void testDeselectType_hideForAll()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+
+    final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
+    setSelected(hideCheckbox, true);
+
+    final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee,
+            1, 1, 0);
+    setSelected(allSequencesCheckbox, true);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+
+    final Checkbox typeCheckbox = getTypeCheckbox("JMol");
+
+    // select JMol - all hidden
+    setSelected(typeCheckbox, true);
+    assertFalse(anns[5].visible); // JMol for seq3
+    assertFalse(anns[7].visible); // JMol for seq1
+
+    // deselect JMol - all unhidden
+    setSelected(typeCheckbox, false);
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertTrue(anns[5].visible); // JMol for seq3
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertTrue(anns[7].visible); // JMol for seq1
+  }
+
+  /**
+   * Test result of deselecting an annotation type, with 'Hide for selected
+   * sequences'.
+   * 
+   * We expect the annotations of that type, linked to the sequence group, to be
+   * set visible. Other annotations should be left unchanged.
+   */
+  @Test
+  public void testDeselectType_hideForSelected()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+    final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
+    setSelected(hideCheckbox, true);
+
+    /*
+     * Don't set the 'selected sequences' radio button since this would trigger
+     * an update, including unselected sequences / annotation types
+     */
+    // setSelected(getSelectedSequencesCheckbox());
+
+    setSelected(getTypeCheckbox("JMol"), true);
+    setSelected(getTypeCheckbox("JMol"), false);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertTrue(anns[5].visible); // JMol for seq3 not in selection group
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertTrue(anns[7].visible); // JMol for seq1 in selection group
+  }
+
+  /**
+   * Test result of selecting an annotation type, with 'Show for all sequences'.
+   * 
+   * We expect all annotations of that type to be set visible. Other annotations
+   * should be left unchanged
+   */
+  @Test
+  public void testSelectType_showForAll()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+    final Checkbox showCheckbox = (Checkbox) getComponent(testee, 1, 0, 0);
+    final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
+
+    final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee,
+            1, 1, 0);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+
+    // hide all JMol annotations
+    setSelected(allSequencesCheckbox, true);
+    setSelected(hideCheckbox, true);
+    setSelected(getTypeCheckbox("JMol"), true);
+    assertFalse(anns[5].visible); // JMol for seq3
+    assertFalse(anns[7].visible); // JMol for seq1
+    // ...now show them...
+    setSelected(showCheckbox, true);
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertTrue(anns[5].visible); // JMol for seq3
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertTrue(anns[7].visible); // JMol for seq1
+  }
+
+  /**
+   * Test result of selecting an annotation type, with 'Show for selected
+   * sequences'.
+   * 
+   * We expect all annotations of that type, linked to the sequence group, to be
+   * set visible. Other annotations should be left unchanged
+   */
+  @Test
+  public void testSelectType_showForSelected()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+    final Checkbox showCheckbox = (Checkbox) getComponent(testee, 1, 0, 0);
+    final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
+
+    final Checkbox selectedSequencesCheckbox = (Checkbox) getComponent(
+            testee, 1, 1, 1);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+
+    // hide all JMol annotations in the selection region (== annotation 7)
+    setSelected(selectedSequencesCheckbox, true);
+    setSelected(hideCheckbox, true);
+    setSelected(getTypeCheckbox("JMol"), true);
+    assertTrue(anns[5].visible); // JMol for seq3
+    assertFalse(anns[7].visible); // JMol for seq1
+    // ...now show them...
+    setSelected(showCheckbox, true);
+
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertTrue(anns[5].visible); // JMol for seq3
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertTrue(anns[7].visible); // JMol for seq1
+  }
+
+  /**
+   * Test result of deselecting an annotation type, with 'Show for all
+   * sequences'.
+   * 
+   * We expect all annotations of that type to be set hidden. Other annotations
+   * should be left unchanged.
+   */
+  @Test
+  public void testDeselectType_showForAll()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+
+    final Checkbox showCheckbox = (Checkbox) getComponent(testee, 1, 0, 0);
+    setSelected(showCheckbox, true);
+
+    final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee,
+            1, 1, 0);
+    setSelected(allSequencesCheckbox, true);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+
+    final Checkbox typeCheckbox = getTypeCheckbox("JMol");
+    // select JMol - all shown
+    setSelected(typeCheckbox, true);
+    assertTrue(anns[5].visible); // JMol for seq3
+    assertTrue(anns[7].visible); // JMol for seq1
+
+    // deselect JMol - all hidden
+    setSelected(typeCheckbox, false);
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertFalse(anns[5].visible); // JMol for seq3
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertFalse(anns[7].visible); // JMol for seq1
+  }
+
+  /**
+   * Test result of deselecting an annotation type, with 'Show for selected
+   * sequences'.
+   * 
+   * We expect the annotations of that type, linked to the sequence group, to be
+   * set hidden. Other annotations should be left unchanged.
+   */
+  @Test
+  public void testDeselectType_showForSelected()
+  {
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+    final Checkbox showCheckbox = (Checkbox) getComponent(testee, 1, 0, 0);
+    setSelected(showCheckbox, true);
+
+    /*
+     * Don't set the 'selected sequences' radio button since this would trigger
+     * an update, including unselected sequences / annotation types
+     */
+    // setSelected(getSelectedSequencesCheckbox());
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+
+    // select JMol - should remain visible
+    setSelected(getTypeCheckbox("JMol"), true);
+    assertTrue(anns[5].visible); // JMol for seq3
+    assertTrue(anns[7].visible); // JMol for seq1
+
+    // deselect JMol - should be hidden for selected sequences only
+    setSelected(getTypeCheckbox("JMol"), false);
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertTrue(anns[3].visible); // IUPred for seq0
+    assertTrue(anns[4].visible); // Beauty
+    assertTrue(anns[5].visible); // JMol for seq3 not in selection group
+    assertTrue(anns[6].visible); // IUPRED for seq2
+    assertFalse(anns[7].visible); // JMol for seq1 in selection group
+  }
+
+  /**
+   * Helper method to drill down to a sub-component in a Container hierarchy.
+   * 
+   * @param cont
+   * @param i
+   * @param j
+   * @param k
+   * @return
+   */
+  public static Component getComponent(Container cont, int... positions)
+  {
+    Component comp = cont;
+    for (int i : positions)
+    {
+      comp = ((Container) comp).getComponent(i);
+    }
+    return comp;
+  }
+
+  /**
+   * Helper method to set or unset a checkbox and fire its action listener.
+   * 
+   * @param cb
+   * @param select
+   */
+  protected void setSelected(Checkbox cb, boolean select)
+  {
+    // TODO refactor to a test utility class
+    cb.setState(select);
+    // have to manually fire the action listener
+    cb.getItemListeners()[0].itemStateChanged(new ItemEvent(cb,
+            ItemEvent.ITEM_STATE_CHANGED, cb, select ? ItemEvent.SELECTED
+                    : ItemEvent.DESELECTED));
+  }
+
+  /**
+   * Helper method to drill down to the 'Annotation type' checkbox with given
+   * label.
+   * 
+   * @return
+   */
+  private Checkbox getTypeCheckbox(String forLabel)
+  {
+    Component[] cbs = ((JPanel) testee.getComponent(0)).getComponents();
+    for (Component comp : cbs)
+    {
+      final Checkbox cb = (Checkbox) comp;
+      if (cb.getLabel().equals(forLabel))
+      {
+        return cb;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Test isInActionScope for the case where the scope is selected sequences.
+   * Test cases include sequences in the selection group, and others not in the
+   * group.
+   */
+  @Test
+  public void testIsInActionScope_selectedScope()
+  {
+    // sequences 1 and 2 have annotations 4 and 3 respectively
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+
+    final Checkbox selectedSequencesCheckbox = (Checkbox) getComponent(
+            testee, 1, 1, 1);
+    setSelected(selectedSequencesCheckbox, true);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+    // remember 3 annotations to skip (Conservation/Quality/Consensus)
+    assertFalse(testee.isInActionScope(anns[3]));
+    assertFalse(testee.isInActionScope(anns[4]));
+    assertFalse(testee.isInActionScope(anns[5]));
+    assertTrue(testee.isInActionScope(anns[6]));
+    assertTrue(testee.isInActionScope(anns[7]));
+  }
+
+  /**
+   * Test isInActionScope for the case where the scope is unselected sequences.
+   * Test cases include sequences in the selection group, and others not in the
+   * group.
+   */
+  @Test
+  public void testIsInActionScope_unselectedScope()
+  {
+    // sequences 1 and 2 have annotations 4 and 3 respectively
+    selectSequences(1, 2);
+    testee = new AnnotationChooser(parentPanel);
+
+    final Checkbox unselectedSequencesCheckbox = (Checkbox) getComponent(
+            testee, 1, 1, 2);
+    setSelected(unselectedSequencesCheckbox, true);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+    // remember 3 annotations to skip (Conservation/Quality/Consensus)
+    assertTrue(testee.isInActionScope(anns[3]));
+    assertTrue(testee.isInActionScope(anns[4]));
+    assertTrue(testee.isInActionScope(anns[5]));
+    assertFalse(testee.isInActionScope(anns[6]));
+    assertFalse(testee.isInActionScope(anns[7]));
+  }
+
+  /**
+   * Test that the reset method restores previous visibility flags.
+   */
+  @Test
+  public void testResetOriginalState()
+  {
+    testee = new AnnotationChooser(parentPanel);
+
+    AlignmentAnnotation[] anns = parentPanel.getAlignment()
+            .getAlignmentAnnotation();
+    // all start visible
+    for (int i = 0; i < anns.length; i++)
+    {
+      assertTrue(i + "'th sequence not visible", anns[i].visible);
+    }
+
+    final Checkbox hideCheckbox = (Checkbox) getComponent(testee, 1, 0, 1);
+    setSelected(hideCheckbox, true);
+
+    final Checkbox allSequencesCheckbox = (Checkbox) getComponent(testee,
+            1, 1, 0);
+    setSelected(allSequencesCheckbox, true);
+
+    setSelected(getTypeCheckbox("JMol"), true);
+    setSelected(getTypeCheckbox("IUPRED"), true);
+
+    assertTrue(anns[0].visible); // Conservation
+    assertTrue(anns[1].visible); // Quality
+    assertTrue(anns[2].visible); // Consensus
+    assertFalse(anns[3].visible); // IUPRED
+    assertTrue(anns[4].visible); // Beauty (not seq-related)
+    assertFalse(anns[5].visible); // JMol
+    assertFalse(anns[6].visible); // IUPRED
+    assertFalse(anns[7].visible); // JMol
+
+    // reset - should all be visible
+    testee.resetOriginalState();
+    for (int i = 0; i < anns.length; i++)
+    {
+      assertTrue(i + "'th sequence not visible", anns[i].visible);
+    }
+  }
+}
index 438a208..7acd843 100644 (file)
  */
 package jalview.gui;
 
-import static org.junit.Assert.*;
 import jalview.bin.Cache;
 
-import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -35,11 +33,11 @@ import javax.swing.JFrame;
 import javax.swing.JInternalFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
-import javax.swing.JPanel;
 import javax.swing.JTextArea;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class JAL1353bugdemo
@@ -58,6 +56,8 @@ public class JAL1353bugdemo
   volatile boolean finish = false;
 
   @Test
+  @Ignore
+  // comment out @Ignore to enable this test
   public void test()
   {
     Cache.initLogger();
diff --git a/test/jalview/gui/PopupMenuTest.java b/test/jalview/gui/PopupMenuTest.java
new file mode 100644 (file)
index 0000000..ea1dfb0
--- /dev/null
@@ -0,0 +1,150 @@
+package jalview.gui;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.io.AppletFormatAdapter;
+import jalview.util.MessageManager;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JMenuItem;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class PopupMenuTest
+{
+  // 4 sequences x 13 positions
+  final static String TEST_DATA = ">FER_CAPAA Ferredoxin\n"
+          + "TIETHKEAELVG-\n"
+          + ">FER_CAPAN Ferredoxin, chloroplast precursor\n"
+          + "TIETHKEAELVG-\n"
+          + ">FER1_SOLLC Ferredoxin-1, chloroplast precursor\n"
+          + "TIETHKEEELTA-\n" + ">Q93XJ9_SOLTU Ferredoxin I precursor\n"
+          + "TIETHKEEELTA-\n";
+
+  AlignmentI alignment;
+
+  AlignmentPanel parentPanel;
+
+  PopupMenu testee = null;
+
+  @Before
+  public void setUp() throws IOException
+  {
+    alignment = new jalview.io.FormatAdapter().readFile(TEST_DATA,
+            AppletFormatAdapter.PASTE, "FASTA");
+    AlignFrame af = new AlignFrame(alignment, 700, 500);
+    parentPanel = new AlignmentPanel(af, af.getViewport());
+    testee = new PopupMenu(parentPanel, null, null);
+    int i = 0;
+    for (SequenceI seq : alignment.getSequences())
+    {
+      final AlignmentAnnotation annotation = new AlignmentAnnotation("label" + i,
+              "desc" + i, i);
+      annotation.setCalcId("calcId" + i);
+      seq.addAlignmentAnnotation(annotation);
+      annotation.setSequenceRef(seq);
+    }
+  }
+
+  @Test
+  public void testConfigureReferenceAnnotationsMenu_noSequenceSelected()
+  {
+    JMenuItem menu = new JMenuItem();
+    List<SequenceI> seqs = new ArrayList<SequenceI>();
+    testee.configureReferenceAnnotationsMenu(menu, seqs);
+    assertFalse(menu.isEnabled());
+    assertEquals(
+            MessageManager.getString("label.add_reference_annotations"),
+            menu.getText());
+    // now try null list
+    menu.setEnabled(true);
+    testee.configureReferenceAnnotationsMenu(menu, seqs);
+    assertFalse(menu.isEnabled());
+  }
+
+  /**
+   * Test building the 'add reference annotations' menu for the case where there
+   * are no reference annotations to add to the alignment. The menu item should
+   * be disabled.
+   */
+  @Test
+  public void testConfigureReferenceAnnotationsMenu_noReferenceAnnotations()
+  {
+    JMenuItem menu = new JMenuItem();
+    List<SequenceI> seqs = new ArrayList<SequenceI>();
+
+    /*
+     * Initial state is that sequences have annotations, and have dataset
+     * sequences, but the dataset sequences have no annotations. Hence nothing
+     * to add.
+     */
+    seqs = parentPanel.getAlignment().getSequences();
+
+    testee.configureReferenceAnnotationsMenu(menu, seqs);
+    assertFalse(menu.isEnabled());
+  }
+
+  /**
+   * Test building the 'add reference annotations' menu for the case where all
+   * reference annotations are already on the alignment. The menu item should be
+   * disabled.
+   */
+  @Test
+  public void testConfigureReferenceAnnotationsMenu_alreadyAdded()
+  {
+    JMenuItem menu = new JMenuItem();
+    List<SequenceI> seqs = new ArrayList<SequenceI>();
+
+    seqs = parentPanel.getAlignment().getSequences();
+    // copy annotation from sequence to dataset
+    seqs.get(1).getDatasetSequence()
+            .addAlignmentAnnotation(seqs.get(1).getAnnotation()[0]);
+    testee.configureReferenceAnnotationsMenu(menu, seqs);
+    assertFalse(menu.isEnabled());
+  }
+
+  /**
+   * Test building the 'add reference annotations' menu for the case where
+   * several reference annotations are on the dataset but not on the sequences.
+   * The menu item should be enabled, and acquire a tooltip which lists the
+   * annotation sources (calcIds) and type (labels).
+   */
+  @Test
+  public void testConfigureReferenceAnnotationsMenu()
+  {
+    JMenuItem menu = new JMenuItem();
+    List<SequenceI> seqs = new ArrayList<SequenceI>();
+
+    seqs = parentPanel.getAlignment().getSequences();
+    // make up new annotations and add to dataset sequences
+
+    // PDB.secondary structure on Sequence0
+    AlignmentAnnotation annotation = new AlignmentAnnotation(
+            "secondary structure", "", 0);
+    annotation.setCalcId("PBD");
+    seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation);
+
+    // PDB.Temp on Sequence1
+    annotation = new AlignmentAnnotation("Temp", "", 0);
+    annotation.setCalcId("PBD");
+    seqs.get(1).getDatasetSequence().addAlignmentAnnotation(annotation);
+
+    // JMOL.secondary structure on Sequence0
+    annotation = new AlignmentAnnotation("secondary structure", "", 0);
+    annotation.setCalcId("JMOL");
+    seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation);
+
+    testee.configureReferenceAnnotationsMenu(menu, seqs);
+    assertTrue(menu.isEnabled());
+    String expected = "<html><table width=350 border=0><tr><td>Add annotations for<br/>JMOL/secondary structure<br/>PBD/Temp</td></tr></table></html>";
+    assertEquals(expected, menu.getToolTipText());
+  }
+}
diff --git a/test/jalview/io/AnnotatedPDBFileInputTest.java b/test/jalview/io/AnnotatedPDBFileInputTest.java
new file mode 100644 (file)
index 0000000..7e99409
--- /dev/null
@@ -0,0 +1,178 @@
+package jalview.io;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+
+import java.io.File;
+import java.util.Vector;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class AnnotatedPDBFileInputTest
+{
+
+  AlignmentI al;
+
+  String pdbStr = "examples/2GIS.pdb";
+
+  String pdbId;
+
+  @Before
+  public void setup() throws Exception
+  {
+    FileLoader loader = new FileLoader(false);
+    AlignFrame af = loader.LoadFileWaitTillLoaded(pdbStr,
+            FormatAdapter.FILE);
+    al = af.getViewport().getAlignment();
+    pdbId = ((PDBEntry) al.getSequenceAt(0).getDatasetSequence().getPDBId()
+            .get(0)).getId();
+  }
+
+  @Test
+  public void checkNoDuplicates()
+  {
+    // not strictly a requirement, but strange things may happen if multiple
+    // instances of the same annotation are placed in the alignment annotation
+    // vector
+    assertNotNull(al.getAlignmentAnnotation());
+    // verify that all sequence annotation is doubly referenced
+    AlignmentAnnotation[] avec = al.getAlignmentAnnotation();
+    for (int p = 0; p < avec.length; p++)
+    {
+      for (int q = p + 1; q < avec.length; q++)
+      {
+        assertNotEquals(
+                "Found a duplicate annotation row " + avec[p].label,
+                avec[p], avec[q]);
+      }
+    }
+  }
+
+  @Test
+  public void checkPDBannotationSource()
+  {
+
+    for (SequenceI asq : al.getSequences())
+    {
+      for (AlignmentAnnotation aa : asq.getAnnotation())
+      {
+
+        System.out.println("CalcId: " + aa.getCalcId());
+        assertTrue(MCview.PDBfile.isCalcIdForFile(aa.getCalcId(), pdbId));
+      }
+    }
+  }
+
+  @Test
+  public void checkAnnotationWiring()
+  {
+    assertTrue(al.getAlignmentAnnotation() != null);
+    // verify that all sequence annotation is doubly referenced
+    for (AlignmentAnnotation aa : al.getAlignmentAnnotation())
+    {
+      if (aa.sequenceRef != null)
+      {
+        assertTrue(al.getSequences().contains(aa.sequenceRef));
+        assertNotNull(aa.sequenceRef.getAnnotation());
+        boolean found = false;
+        for (AlignmentAnnotation sqan : aa.sequenceRef.getAnnotation())
+        {
+          if (sqan == aa)
+          {
+            found = true;
+            break;
+          }
+        }
+        assertTrue(
+                "Couldn't find sequence associated annotation "
+                        + aa.label
+                        + " on the sequence it is associated with.\nSequence associated editing will fail.",
+                found);
+      }
+    }
+  }
+
+  /**
+   * @throws java.lang.Exception
+   */
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception
+  {
+    jalview.bin.Jalview.main(new String[]
+    { "-props", "test/src/jalview/io/testProps.jvprops" });
+  }
+
+  /**
+   * @throws java.lang.Exception
+   */
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception
+  {
+    jalview.gui.Desktop.instance.closeAll_actionPerformed(null);
+
+  }
+
+  @Test
+  public void testJalviewProjectRelocationAnnotation() throws Exception
+  {
+
+    String inFile = "examples/2GIS.pdb";
+    String tfile = File.createTempFile("JalviewTest", ".jvp")
+            .getAbsolutePath();
+    AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(
+            inFile, FormatAdapter.FILE);
+    assertTrue("Didn't read input file " + inFile, af != null);
+    assertTrue("Failed to store as a project.",
+            af.saveAlignment(tfile, "Jalview"));
+    af.closeMenuItem_actionPerformed(true);
+    af = null;
+    af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(tfile,
+            FormatAdapter.FILE);
+    assertTrue("Failed to import new project", af != null);
+    for (SequenceI asq : af.getViewport().getAlignment().getSequences())
+    {
+      SequenceI sq = asq;
+      while (sq.getDatasetSequence() != null)
+      {
+        sq = sq.getDatasetSequence();
+      }
+      assertNotNull(sq.getPDBId());
+      assertEquals("Expected only one PDB ID", sq.getPDBId().size(), 1);
+      for (PDBEntry pdbentry : (Vector<PDBEntry>) sq.getPDBId())
+      {
+        System.err.println("PDB Entry " + pdbentry.getId() + " "
+                + pdbentry.getFile());
+        boolean exists = false, found = false;
+        for (AlignmentAnnotation ana : sq.getAnnotation())
+        {
+          System.err.println("CalcId " + ana.getCalcId());
+          if (ana.getCalcId() != null
+                  && MCview.PDBfile.isCalcIdHandled(ana.getCalcId()))
+          {
+            exists = true;
+            if (MCview.PDBfile.isCalcIdForFile(ana.getCalcId(),
+                    pdbentry.getId()))
+            {
+              found = true;
+            }
+          }
+        }
+        if (exists)
+        {
+          assertTrue("Couldn't find any annotation for " + pdbentry.getId()
+                  + " (file handle " + pdbentry.getFile() + ")", found);
+        }
+      }
+    }
+  }
+}
index 6f0bf26..775adf7 100644 (file)
@@ -1,60 +1,60 @@
-/*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)\r
- * Copyright (C) 2014 The Jalview Authors\r
- * \r
- * This file is part of Jalview.\r
- * \r
- * Jalview is free software: you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License \r
- * as published by the Free Software Foundation, either version 3\r
- * of the License, or (at your option) any later version.\r
- *  \r
- * Jalview is distributed in the hope that it will be useful, but \r
- * WITHOUT ANY WARRANTY; without even the implied warranty \r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
- * PURPOSE.  See the GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
- * The Jalview Authors are detailed in the 'AUTHORS' file.\r
- */\r
-package jalview.ws;\r
-\r
-import static org.junit.Assert.*;\r
-import jalview.datamodel.AlignmentI;\r
-import jalview.datamodel.SequenceI;\r
-import jalview.ws.seqfetcher.DbSourceProxy;\r
-\r
-import java.util.List;\r
-\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-\r
-public class PDBSequenceFetcherTest\r
-{\r
-\r
-  SequenceFetcher sf;\r
-\r
-  @Before\r
-  public void setUp() throws Exception\r
-  {\r
-    sf = new SequenceFetcher(false);\r
-  }\r
-\r
-  @Test\r
-  public void testRnaSeqRetrieve() throws Exception\r
-  {\r
-    List<DbSourceProxy> sps = sf.getSourceProxy("PDB");\r
-    AlignmentI response = sps.get(0).getSequenceRecords("2GIS");\r
-    assertTrue(response != null);\r
-    assertTrue(response.getHeight() == 1);\r
-    for (SequenceI sq : response.getSequences())\r
-    {\r
-      assertTrue("No annotation transfered to sequence.",\r
-              sq.getAnnotation().length > 0);\r
-      assertTrue("No PDBEntry on sequence.", sq.getPDBId().size() > 0);\r
-      assertTrue("No RNA annotation on sequence.", sq.getRNA() != null);\r
-    }\r
-  }\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.ws;
+
+import static org.junit.Assert.*;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceI;
+import jalview.ws.seqfetcher.DbSourceProxy;
+
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class PDBSequenceFetcherTest
+{
+
+  SequenceFetcher sf;
+
+  @Before
+  public void setUp() throws Exception
+  {
+    sf = new SequenceFetcher(false);
+  }
+
+  @Test
+  public void testRnaSeqRetrieve() throws Exception
+  {
+    List<DbSourceProxy> sps = sf.getSourceProxy("PDB");
+    AlignmentI response = sps.get(0).getSequenceRecords("2GIS");
+    assertTrue(response != null);
+    assertTrue(response.getHeight() == 1);
+    for (SequenceI sq : response.getSequences())
+    {
+      assertTrue("No annotation transfered to sequence.",
+              sq.getAnnotation().length > 0);
+      assertTrue("No PDBEntry on sequence.", sq.getPDBId().size() > 0);
+      assertTrue("No RNA annotation on sequence.", sq.getRNA() != null);
+    }
+  }
+
+}
index a938dd6..0c25cdb 100644 (file)
@@ -5,7 +5,6 @@ import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.function.Consumer;
 
 import org.junit.Test;
 
@@ -51,32 +50,40 @@ public class MinJabawsClientTests {
                        }
 
                        String jobid = msaservice.align(iseqs);
-                       if (jobid != null) {
-                               JobStatus js = null;
-                               do {
-                                       try {
-                                               Thread.sleep(500);
-                                       } catch (InterruptedException q) {
-                                       }
-                                       ;
-                                       js = msaservice.getJobStatus(jobid);
-                               } while (!js.equals(JobStatus.FAILED)
-                                               && !js.equals(JobStatus.CANCELLED)
-                                               && !js.equals(JobStatus.FINISHED));
-                               assertEquals("Trial alignment failed. State was " + js.name(),
-                                               js, JobStatus.FINISHED);
-                               assertEquals(
-                                               "Mismatch in number of input and result sequences - assume alignment service wasn't interacted with correctly",
-                                               msaservice.getResult(jobid).getSequences().size(),
-                                               iseqs.size());
-                               msaservice.getResult(jobid).getSequences()
-                                               .forEach(new Consumer<FastaSequence>() {
-                                                       @Override
-                                                       public void accept(FastaSequence t) {
-                                                               System.out.println(">"+t.getId());
-                                                               System.out.println(t.getFormattedFasta());
-                                                       }
-                                               });
+      if (jobid != null)
+      {
+        JobStatus js = null;
+        do
+        {
+          try
+          {
+            Thread.sleep(500);
+          } catch (InterruptedException q)
+          {
+          }
+          ;
+          js = msaservice.getJobStatus(jobid);
+        } while (!js.equals(JobStatus.FAILED)
+                && !js.equals(JobStatus.CANCELLED)
+                && !js.equals(JobStatus.FINISHED));
+        assertEquals("Trial alignment failed. State was " + js.name(), js,
+                JobStatus.FINISHED);
+        assertEquals(
+                "Mismatch in number of input and result sequences - assume alignment service wasn't interacted with correctly",
+                msaservice.getResult(jobid).getSequences().size(),
+                iseqs.size());
+        for (FastaSequence t : msaservice.getResult(jobid).getSequences())
+        {
+          System.out.println(">" + t.getId());
+          System.out.println(t.getFormattedFasta());
+        }
+        // .forEach(new Consumer<FastaSequence>() {
+        // @Override
+        // public void accept(FastaSequence t) {
+        // System.out.println(">"+t.getId());
+        // System.out.println(t.getFormattedFasta());
+        // }
+        // });
                        }
 
                }
index d9858e3..823caeb 100644 (file)
@@ -1,2 +1,2 @@
-help2Website.class\r
-getJavaVersion.class\r
+help2Website.class
+getJavaVersion.class
index bca0b25..626351b 100755 (executable)
@@ -1008,7 +1008,7 @@ and any path to a file to save to the file]]></string>
                                                                <string><![CDATA[664]]></string>
                                                        </property>
                                                        <property name="sourceName">
-                                                               <string><![CDATA[slf-api-1.7.7.jar]]></string>
+                                                               <string><![CDATA[slf4j-api-1.7.7.jar]]></string>
                                                        </property>
                                                        <property name="overrideUnixPermissions">
                                                                <boolean>false</boolean>
@@ -1026,7 +1026,7 @@ and any path to a file to save to the file]]></string>
                                                                <boolean>true</boolean>
                                                        </property>
                                                        <property name="destinationName">
-                                                               <string><![CDATA[slf-api-1.7.7.jar]]></string>
+                                                               <string><![CDATA[slf4j-api-1.7.7.jar]]></string>
                                                        </property>
                                                        <property name="fileSize">
                                                                <long>348699</long>
@@ -1788,7 +1788,7 @@ and any path to a file to save to the file]]></string>
                                                                <string><![CDATA[664]]></string>
                                                        </property>
                                                        <property name="sourceName">
-                                                               <string><![CDATA[VARNAv3-9.jar]]></string>
+                                                               <string><![CDATA[VARNAv3-91.jar]]></string>
                                                        </property>
                                                        <property name="overrideUnixPermissions">
                                                                <boolean>false</boolean>
@@ -1806,7 +1806,7 @@ and any path to a file to save to the file]]></string>
                                                                <boolean>true</boolean>
                                                        </property>
                                                        <property name="destinationName">
-                                                               <string><![CDATA[VARNAv3-9.jar]]></string>
+                                                               <string><![CDATA[VARNAv3-91.jar]]></string>
                                                        </property>
                                                        <property name="fileSize">
                                                                <long>663408</long>
index 65e6644..76ff05b 100644 (file)
 # 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.
 ##
\r
-# Splits a concatenated set of Stockholm Files into several individual files.\r
-\r
-use strict;\r
-use FileHandle;\r
-my $ac;\r
-my $lns="";\r
-my $fh;\r
-while (<>) {\r
-    if ($_=~m!^//!) {\r
-       $fh->print("//\n");\r
-       $fh->close();\r
-       $ac = undef;\r
-       $lns = "";\r
-    } else {\r
-       if ($_=~/GF\s+AC\s+([0-9.RPF]+)/) { \r
-           $ac=$1; \r
-           ($fh=new FileHandle)->open(">$ac.stk") or die("Couldn't open file '$ac.stk'"); \r
-           $lns=~/^. STOCKHOLM 1.0/ or $fh->print("# STOCKHOLM 1.0\n");\r
-       };\r
-       if (defined($fh)) {\r
-           if (defined $lns) { \r
-               $fh->print($lns); $lns=undef; }\r
-           \r
-           $fh->print($_);\r
-       } else {\r
-           $lns .= $_;\r
-       }\r
-    }\r
-}\r
+# Splits a concatenated set of Stockholm Files into several individual files.
+
+use strict;
+use FileHandle;
+my $ac;
+my $lns="";
+my $fh;
+while (<>) {
+    if ($_=~m!^//!) {
+       $fh->print("//\n");
+       $fh->close();
+       $ac = undef;
+       $lns = "";
+    } else {
+       if ($_=~/GF\s+AC\s+([0-9.RPF]+)/) { 
+           $ac=$1; 
+           ($fh=new FileHandle)->open(">$ac.stk") or die("Couldn't open file '$ac.stk'"); 
+           $lns=~/^. STOCKHOLM 1.0/ or $fh->print("# STOCKHOLM 1.0\n");
+       };
+       if (defined($fh)) {
+           if (defined $lns) { 
+               $fh->print($lns); $lns=undef; }
+           
+           $fh->print($_);
+       } else {
+           $lns .= $_;
+       }
+    }
+}