package jalview.util; import jalview.datamodel.*; public class Comparison { public static float compare(SequenceI ii, SequenceI jj) { return Comparison.compare(ii,jj,0,ii.getLength()-1); } public static float compare(SequenceI ii, SequenceI jj, int start, int end) { String si = ii.getSequence(); String sj = jj.getSequence(); int ilen = end-start+1; int jlen = end-start+1; if ( jalview.util.Comparison.isGap( si.charAt(start+ilen)) ) { ilen--; while (jalview.util.Comparison.isGap( si.charAt(start+ilen))) { ilen--; } } if ( jalview.util.Comparison.isGap( sj.charAt(start+jlen)) ) { jlen--; while (jalview.util.Comparison.isGap( sj.charAt(start+jlen))) { jlen--; } } int count = 0; int match = 0; float pid = -1; if (ilen > jlen) { for (int j = 0; j < jlen; j++) { if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) { match++; } count++; } pid = (float)match/(float)ilen * 100; } else { for (int j = 0; j < jlen; j++) { if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) { match++; } count++; } pid = (float)match/(float)jlen * 100; } return pid; } /** */ public static float PID(Sequence s1 , Sequence s2) { int len; if (s1.getSequence().length() > s2.getSequence().length()) len = s1.getSequence().length(); else len = s2.getSequence().length(); int bad = 0; for (int i = 0; i < len; i++) { char chr1; char chr2; if (i < s1.getSequence().length()) chr1 = s1.getSequence().charAt(i); else chr1 = '.'; if (i < s2.getSequence().length()) chr2 = s2.getSequence().charAt(i); else chr2 = '.'; if (!(jalview.util.Comparison.isGap( chr1 )) && !(jalview.util.Comparison.isGap( chr2 ))) { if (chr1!=chr2) bad++; } } return (float)100*(len-bad)/len; } public static boolean isGap(char c) { return (c != '.' && c != '-' && c != ' ') ? false : true; } }