isGap method added to utils
[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   public static float compare(SequenceI ii, SequenceI jj, int start, int end) {\r
12 \r
13      String si   = ii.getSequence();\r
14      String sj   = jj.getSequence();\r
15 \r
16      int ilen = end-start+1;\r
17      int jlen = end-start+1;\r
18 \r
19      if ( jalview.util.Comparison.isGap( si.charAt(start+ilen)) )\r
20       {\r
21        ilen--;\r
22 \r
23        while (jalview.util.Comparison.isGap( si.charAt(start+ilen)))\r
24        {\r
25          ilen--;\r
26        }\r
27      }\r
28 \r
29      if ( jalview.util.Comparison.isGap( sj.charAt(start+jlen)) )\r
30      {\r
31        jlen--;\r
32 \r
33        while (jalview.util.Comparison.isGap( sj.charAt(start+jlen)))\r
34        {\r
35          jlen--;\r
36        }\r
37      }\r
38 \r
39      int   count = 0;\r
40      int   match = 0;\r
41      float pid   = -1;\r
42 \r
43      if (ilen > jlen) {\r
44 \r
45        for (int j = 0; j < jlen; j++) {\r
46          if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) {\r
47            match++;\r
48          }\r
49          count++;\r
50        }\r
51        pid = (float)match/(float)ilen * 100;\r
52      } else {\r
53        for (int j = 0; j < jlen; j++) {\r
54          if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) {\r
55            match++;\r
56          }\r
57          count++;\r
58        }\r
59        pid = (float)match/(float)jlen * 100;\r
60      }\r
61 \r
62     return pid;\r
63   }\r
64 \r
65   /**    */\r
66   public static float PID(Sequence s1 , Sequence s2)\r
67   {\r
68     int len;\r
69 \r
70     if (s1.getSequence().length() > s2.getSequence().length())\r
71       len = s1.getSequence().length();\r
72     else\r
73       len = s2.getSequence().length();\r
74 \r
75 \r
76     int bad = 0;\r
77 \r
78     for (int i = 0; i < len; i++)\r
79     {\r
80       char chr1;\r
81       char chr2;\r
82 \r
83       if (i < s1.getSequence().length())\r
84         chr1 = s1.getSequence().charAt(i);\r
85       else\r
86         chr1 = '.';\r
87 \r
88 \r
89       if (i < s2.getSequence().length())\r
90         chr2 = s2.getSequence().charAt(i);\r
91       else\r
92         chr2 = '.';\r
93 \r
94 \r
95       if (!(jalview.util.Comparison.isGap( chr1 ))  &&  !(jalview.util.Comparison.isGap( chr2 )))\r
96       {\r
97         if (chr1!=chr2)\r
98           bad++;\r
99       }\r
100     }\r
101 \r
102     return (float)100*(len-bad)/len;\r
103   }\r
104 \r
105   public static boolean isGap(char c)\r
106   {\r
107     return  (c != '.' && c != '-' && c != ' ') ? false : true;\r
108   }\r
109 }\r