<p>
<b>Navigation</b>
<ul>
- <li>Cursor keys - Move cursor around the alignment.</li>
+ <li><em>Cursor (Arrow) keys</em> - Move cursor around the alignment.<br/>
+ <em>Shift+Cursor key</em> - move to next gap or aligned residue</li>
</ul>
<ul>
- <li>S - Type a number x then press 'S' to jump to sequence x.</li>
+ <li><em>S</em> - Type a number x then press 'S' to jump to sequence x.</li>
</ul>
<ul>
- <li>C - Type a number x then press 'C' to jump to column x.</li>
+ <li><em>C</em> - Type a number x then press 'C' to jump to column x.</li>
</ul>
<ul>
- <li>P - Type a number x then press 'P' to jump to position x in
+ <li><em>P</em> - Type a number x then press 'P' to jump to position x in
current sequence.</li>
</ul>
<ul>
<p>
<b>Defining Regions</b>
<ul>
- <li>Q - Define the top left corner of the selection area</li>
+ <li><em>Q</em> - Define the top left corner of the selection area</li>
</ul>
<ul>
- <li>M - Define the bottom right corner of the selection area<br>
+ <li><em>M</em> - Define the bottom right corner of the selection area<br>
</li>
</ul>
<p>
<b>Editing The Alignment</b>
<ul>
- <li>Space - Insert a gap at the cursor position. <br> To
+ <li><em>Space</em> - Insert a gap at the cursor position. <br> To
insert 12 spaces at the current cursor, type 12 before pressing
Space.<br> To group insert, hold control or shift together
with space.
</li>
</ul>
<ul>
- <li>Delete (or backspace) - Delete a gap at the cursor
+ <li><em>Delete (or backspace)</em> - Delete a gap at the cursor
position.<br> To delete 12 spaces at the current cursor, type
12 before pressing Delete (or backspace).<br> To group
delete, hold down control or shift together with Delete (or
backspace).
</li>
</ul>
+ <p>
+ Some keyboard operations are not available in keyboard mode. See <a
+ href="../keys.html">the full list of keystrokes</a>.
</p>
</body>
</html>
*/
package jalview.datamodel;
-import java.util.Locale;
-
-import jalview.analysis.Rna;
-import jalview.analysis.SecStrConsensus.SimpleBP;
-import jalview.analysis.WUSSParseException;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
+import jalview.analysis.Rna;
+import jalview.analysis.SecStrConsensus.SimpleBP;
+import jalview.analysis.WUSSParseException;
+
/**
* DOCUMENT ME!
*
// annotations[i].secondaryStructure + "'");
// TODO: 2.8.2 should this ss symbol validation check be a function in
// RNA/ResidueProperties ?
+ // allow for DSSP extended code:
+ // https://www.wikidoc.org/index.php/Secondary_structure#The_DSSP_code
+ // GHITEBS as well as C and X (for missing?)
if (annotations[i].secondaryStructure == '('
|| annotations[i].secondaryStructure == '['
|| annotations[i].secondaryStructure == '<'
|| annotations[i].secondaryStructure == '{'
|| annotations[i].secondaryStructure == 'A'
- || annotations[i].secondaryStructure == 'B'
- || annotations[i].secondaryStructure == 'C'
+ // || annotations[i].secondaryStructure == 'B'
+ // || annotations[i].secondaryStructure == 'C'
|| annotations[i].secondaryStructure == 'D'
// || annotations[i].secondaryStructure == 'E' // ambiguous on
// its own -- already checked above
|| annotations[i].secondaryStructure == 'F'
- || annotations[i].secondaryStructure == 'G'
+ // || annotations[i].secondaryStructure == 'G'
// || annotations[i].secondaryStructure == 'H' // ambiguous on
// its own -- already checked above
- || annotations[i].secondaryStructure == 'I'
+ // || annotations[i].secondaryStructure == 'I'
|| annotations[i].secondaryStructure == 'J'
|| annotations[i].secondaryStructure == 'K'
|| annotations[i].secondaryStructure == 'L'
|| annotations[i].secondaryStructure == 'P'
|| annotations[i].secondaryStructure == 'Q'
|| annotations[i].secondaryStructure == 'R'
- || annotations[i].secondaryStructure == 'S'
- || annotations[i].secondaryStructure == 'T'
+ // || annotations[i].secondaryStructure == 'S'
+ // || annotations[i].secondaryStructure == 'T'
|| annotations[i].secondaryStructure == 'U'
|| annotations[i].secondaryStructure == 'V'
|| annotations[i].secondaryStructure == 'W'
- || annotations[i].secondaryStructure == 'X'
+ // || annotations[i].secondaryStructure == 'X'
|| annotations[i].secondaryStructure == 'Y'
|| annotations[i].secondaryStructure == 'Z')
{
: annotations[index + offset].displayCharacter == null
|| annotations[index
+ offset].displayCharacter
- .length() == 0
- ? annotations[index
- + offset].secondaryStructure
- : annotations[index
- + offset].displayCharacter
- .charAt(0));
+ .length() == 0
+ ? annotations[index
+ + offset].secondaryStructure
+ : annotations[index
+ + offset].displayCharacter
+ .charAt(0));
}
@Override
// check Alignment annotation
AlignmentAnnotation[] aa_new = al_input.getAlignmentAnnotation();
AlignmentAnnotation[] aa_original = al.getAlignmentAnnotation();
+ boolean expectProteinSS = !al.isNucleotide();
+ assertTrue(
+ "Alignments not both "
+ + (al.isNucleotide() ? "nucleotide" : "protein"),
+ al_input.isNucleotide() == al.isNucleotide());
// note - at moment we do not distinguish between alignment without any
// annotation rows and alignment with no annotation row vector
assertEqualSecondaryStructure(
"Different alignment annotation at position " + i,
aa_original[i], aa_new[i], allowNullAnnotation);
+ if (aa_original[i].hasIcons)
+ {
+ assertTrue(
+ "Secondary structure expected to be "
+ + (expectProteinSS ? "protein" : "nucleotide"),
+ expectProteinSS == !aa_original[i].isRNA());
+ }
// compare graphGroup or graph properties - needed to verify JAL-1299
assertEquals("Graph type not identical.", aa_original[i].graph,
aa_new[i].graph);