Addred GapChar string for convenient regex construction
[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 = si.length()-1;\r
17      int jlen = sj.length()-1;\r
18 \r
19      while (jalview.util.Comparison.isGap(si.charAt(start + ilen)))\r
20      {\r
21        ilen--;\r
22      }\r
23 \r
24      while (jalview.util.Comparison.isGap(sj.charAt(start + jlen)))\r
25      {\r
26        jlen--;\r
27      }\r
28 \r
29      int   count = 0;\r
30      int   match = 0;\r
31      float pid   = -1;\r
32 \r
33      if (ilen > jlen) {\r
34 \r
35        for (int j = 0; j < jlen; j++) {\r
36          if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) {\r
37            match++;\r
38          }\r
39          count++;\r
40        }\r
41        pid = (float)match/(float)ilen * 100;\r
42      } else {\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)jlen * 100;\r
50      }\r
51 \r
52     return pid;\r
53   }\r
54 \r
55   /**    */\r
56   public static float PID(SequenceI s1 , SequenceI s2)\r
57   {\r
58     int len;\r
59 \r
60     if (s1.getSequence().length() > s2.getSequence().length())\r
61       len = s1.getSequence().length();\r
62     else\r
63       len = s2.getSequence().length();\r
64 \r
65 \r
66     int bad = 0;\r
67 \r
68     for (int i = 0; i < len; i++)\r
69     {\r
70       char chr1;\r
71       char chr2;\r
72 \r
73       if (i < s1.getSequence().length())\r
74         chr1 = s1.getSequence().charAt(i);\r
75       else\r
76         chr1 = '.';\r
77 \r
78 \r
79       if (i < s2.getSequence().length())\r
80         chr2 = s2.getSequence().charAt(i);\r
81       else\r
82         chr2 = '.';\r
83 \r
84 \r
85       if (!(jalview.util.Comparison.isGap( chr1 ))  &&  !(jalview.util.Comparison.isGap( chr2 )))\r
86       {\r
87         if (chr1!=chr2)\r
88           bad++;\r
89       }\r
90     }\r
91 \r
92     return (float)100*(len-bad)/len;\r
93   }\r
94   public static String GapChars = " .-";\r
95   public static boolean isGap(char c)\r
96   {\r
97     return  (c != '.' && c != '-' && c != ' ') ? false : true;\r
98   }\r
99 }\r