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); } /** * this was supposed to be an ungapped pid calculation * @param ii SequenceI * @param jj SequenceI * @param start int * @param end int * @return float */ public static float compare(SequenceI ii, SequenceI jj, int start, int end) { String si = ii.getSequence(); String sj = jj.getSequence(); int ilen = si.length()-1; int jlen = sj.length()-1; while (jalview.util.Comparison.isGap(si.charAt(start + ilen))) { ilen--; } 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; } /** * this is a gapped PID calculation * * @param s1 SequenceI * @param s2 SequenceI * @return float */ public static float PID(SequenceI s1 , SequenceI 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; } // Another pid with region specification public static float PID(SequenceI s1 , SequenceI s2, int start, int end) { int len; if (s1.getSequence().length() > s2.getSequence().length()) len = s1.getSequence().length(); else len = s2.getSequence().length(); if (end