X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSeqCigar.java;h=98b0de5f39a8aac0fe1083e2e902e156b36ad0d0;hb=ccc31f21ed36c2e43b5a1b450846284151c680bb;hp=09b2e89eceb926fd363218b55e732e0ef380e9aa;hpb=960206d9ae05d85b42552025c3dec4b5f7b14c15;p=jalview.git diff --git a/src/jalview/datamodel/SeqCigar.java b/src/jalview/datamodel/SeqCigar.java index 09b2e89..98b0de5 100644 --- a/src/jalview/datamodel/SeqCigar.java +++ b/src/jalview/datamodel/SeqCigar.java @@ -20,14 +20,14 @@ */ package jalview.datamodel; -import java.util.Enumeration; -import java.util.Hashtable; - import jalview.analysis.AlignSeq; import jalview.analysis.SeqsetUtils; import jalview.util.MessageManager; import jalview.util.ShiftList; +import java.util.Enumeration; +import java.util.Hashtable; + public class SeqCigar extends CigarSimple { /** @@ -68,10 +68,49 @@ public class SeqCigar extends CigarSimple } /** + * + * @param column + * @return position in sequence for column (or -1 if no match state exists) + */ + public int findPosition(int column) + { + int w = 0, ew, p = refseq.findPosition(start); + if (column < 0) + { + return -1; + } + if (range != null) + { + for (int i = 0; i < length; i++) + { + if (operation[i] == M || operation[i] == D) + { + p += range[i]; + } + if (operation[i] == M || operation[i] == I) + { + ew = w + range[i]; + if (column < ew) + { + if (operation[i] == I) + { + return -1; + } + return p - (ew - column); + } + w = ew; + } + } + } + return -1; + } + + /** * Returns sequence as a string with cigar operations applied to it * * @return String */ + @Override public String getSequenceString(char GapChar) { return (length == 0) ? "" : (String) getSequenceAndDeletions( @@ -95,7 +134,9 @@ public class SeqCigar extends CigarSimple refseq.getSequenceAsString(start, end), GapChar); if (edit_result == null) { - throw new Error(MessageManager.getString("error.implementation_error_unexpected_null_from_get_sequence_and_deletions")); + throw new Error( + MessageManager + .getString("error.implementation_error_unexpected_null_from_get_sequence_and_deletions")); } int bounds[] = (int[]) edit_result[1]; seq = new Sequence(refseq.getName(), (String) edit_result[0], @@ -143,11 +184,15 @@ public class SeqCigar extends CigarSimple boolean hasgaps = false; if (seq == null) { - throw new Error(MessageManager.getString("error.implementation_error_set_seq_null")); + throw new Error( + MessageManager + .getString("error.implementation_error_set_seq_null")); } if (_s < 0) { - throw new Error(MessageManager.formatMessage("error.implementation_error_s", new String[]{Integer.valueOf(_s).toString()})); + throw new Error(MessageManager.formatMessage( + "error.implementation_error_s", new String[] { Integer + .valueOf(_s).toString() })); } String seq_string = seq.getSequenceAsString(); if (_e == 0 || _e < _s || _e > seq_string.length()) @@ -213,7 +258,9 @@ public class SeqCigar extends CigarSimple // Check offsets if (end > ds.getLength()) { - throw new Error(MessageManager.getString("error.implementation_error_seqcigar_possible")); + throw new Error( + MessageManager + .getString("error.implementation_error_seqcigar_possible")); // end = ds.getLength(); } @@ -237,11 +284,14 @@ public class SeqCigar extends CigarSimple super(); if (seq == null) { - throw new Error(MessageManager.getString("error.implmentation_bug_seq_null")); + throw new Error( + MessageManager.getString("error.implmentation_bug_seq_null")); } if (operation.length != range.length) { - throw new Error(MessageManager.getString("error.implementation_bug_cigar_operation_list_range_list")); + throw new Error( + MessageManager + .getString("error.implementation_bug_cigar_operation_list_range_list")); } if (operation != null) @@ -251,14 +301,22 @@ public class SeqCigar extends CigarSimple if (_setSeq(seq, false, 0, 0)) { - throw new Error(MessageManager.getString("error.not_yet_implemented_cigar_object_from_cigar_string")); + throw new Error( + MessageManager + .getString("error.not_yet_implemented_cigar_object_from_cigar_string")); } for (int i = this.length, j = 0; j < operation.length; i++, j++) { char op = operation[j]; if (op != M && op != I && op != D) { - throw new Error(MessageManager.formatMessage("error.implementation_bug_cigar_operation", new String[]{Integer.valueOf(j).toString(),Integer.valueOf(op).toString(),Integer.valueOf(M).toString(),Integer.valueOf(I).toString(),Integer.valueOf(D).toString()})); + throw new Error(MessageManager.formatMessage( + "error.implementation_bug_cigar_operation", new String[] { + Integer.valueOf(j).toString(), + Integer.valueOf(op).toString(), + Integer.valueOf(M).toString(), + Integer.valueOf(I).toString(), + Integer.valueOf(D).toString() })); } this.operation[i] = op; this.range[i] = range[j]; @@ -272,7 +330,9 @@ public class SeqCigar extends CigarSimple this.length = 0; if (_setSeq(seq, false, 0, 0)) { - throw new Error(MessageManager.getString("error.not_yet_implemented_cigar_object_from_cigar_string")); + throw new Error( + MessageManager + .getString("error.not_yet_implemented_cigar_object_from_cigar_string")); } } } @@ -379,7 +439,9 @@ public class SeqCigar extends CigarSimple super(); if (seq == null) { - throw new Error(MessageManager.getString("error.implementation_error_for_new_cigar")); + throw new Error( + MessageManager + .getString("error.implementation_error_for_new_cigar")); } _setSeq(seq, false, 0, 0); // there is still work to do @@ -401,7 +463,9 @@ public class SeqCigar extends CigarSimple super(); if (seq == null) { - throw new Error(MessageManager.getString("error.implementation_error_for_new_cigar")); + throw new Error( + MessageManager + .getString("error.implementation_error_for_new_cigar")); } _setSeq(seq, false, start, end + 1); // there is still work to do @@ -456,7 +520,9 @@ public class SeqCigar extends CigarSimple // endcol}, hidden regions {{start, end, col}}) if (gs_regions[i] == null) { - throw new Error(MessageManager.formatMessage("error.implementation_error_cigar_seq_no_operations", new String[]{Integer.valueOf(i).toString()})); + throw new Error(MessageManager.formatMessage( + "error.implementation_error_cigar_seq_no_operations", + new String[] { Integer.valueOf(i).toString() })); } g_seqs[i] = new StringBuffer((String) ((Object[]) gs_regions[i])[0]); // the // visible