comments
[jalview.git] / src / jalview / util / Comparison.java
1 package jalview.util;\r
2 \r
3 import jalview.datamodel.*;\r
4 \r
5 public class Comparison {\r
6 \r
7   public static float compare(SequenceI ii, SequenceI jj)\r
8   {\r
9     return Comparison.compare(ii,jj,0,ii.getLength()-1);\r
10   }\r
11   /**\r
12    * this was supposed to be an ungapped pid calculation\r
13    * @param ii SequenceI\r
14    * @param jj SequenceI\r
15    * @param start int\r
16    * @param end int\r
17    * @return float\r
18    */\r
19   public static float compare(SequenceI ii, SequenceI jj, int start, int end) {\r
20 \r
21      String si   = ii.getSequence();\r
22      String sj   = jj.getSequence();\r
23 \r
24      int ilen = si.length()-1;\r
25      int jlen = sj.length()-1;\r
26 \r
27      while (jalview.util.Comparison.isGap(si.charAt(start + ilen)))\r
28      {\r
29        ilen--;\r
30      }\r
31 \r
32      while (jalview.util.Comparison.isGap(sj.charAt(start + jlen)))\r
33      {\r
34        jlen--;\r
35      }\r
36 \r
37      int   count = 0;\r
38      int   match = 0;\r
39      float pid   = -1;\r
40 \r
41      if (ilen > jlen) {\r
42 \r
43        for (int j = 0; j < jlen; j++) {\r
44          if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) {\r
45            match++;\r
46          }\r
47          count++;\r
48        }\r
49        pid = (float)match/(float)ilen * 100;\r
50      } else {\r
51        for (int j = 0; j < jlen; j++) {\r
52          if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) {\r
53            match++;\r
54          }\r
55          count++;\r
56        }\r
57        pid = (float)match/(float)jlen * 100;\r
58      }\r
59 \r
60     return pid;\r
61   }\r
62 \r
63   /**\r
64    * this is a gapped PID calculation\r
65    *\r
66    * @param s1 SequenceI\r
67    * @param s2 SequenceI\r
68    * @return float\r
69    */\r
70   public static float PID(SequenceI s1 , SequenceI s2)\r
71   {\r
72     int len;\r
73 \r
74     if (s1.getSequence().length() > s2.getSequence().length())\r
75       len = s1.getSequence().length();\r
76     else\r
77       len = s2.getSequence().length();\r
78 \r
79 \r
80     int bad = 0;\r
81 \r
82     for (int i = 0; i < len; i++)\r
83     {\r
84       char chr1;\r
85       char chr2;\r
86 \r
87       if (i < s1.getSequence().length())\r
88         chr1 = s1.getSequence().charAt(i);\r
89       else\r
90         chr1 = '.';\r
91 \r
92 \r
93       if (i < s2.getSequence().length())\r
94         chr2 = s2.getSequence().charAt(i);\r
95       else\r
96         chr2 = '.';\r
97 \r
98 \r
99       if (!(jalview.util.Comparison.isGap( chr1 ))  &&  !(jalview.util.Comparison.isGap( chr2 )))\r
100       {\r
101         if (chr1!=chr2)\r
102           bad++;\r
103       }\r
104     }\r
105 \r
106     return (float)100*(len-bad)/len;\r
107   }\r
108   public static String GapChars = " .-";\r
109   public static boolean isGap(char c)\r
110   {\r
111     return  (c != '.' && c != '-' && c != ' ') ? false : true;\r
112   }\r
113 }\r