Jalview Imported Sources
[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 ( si.substring(start + ilen).equals("-") ||\r
20           si.substring(start + ilen).equals(".") ||\r
21           si.substring(start + ilen).equals(" ")) {\r
22 \r
23        ilen--;\r
24 \r
25        while (si.substring(start + ilen,start + ilen+1).equals("-")  ||\r
26               si.substring(start + ilen,start + ilen+1).equals(".")  ||\r
27               si.substring(start + ilen,start + ilen+1).equals(" ")) {\r
28          ilen--;\r
29        }\r
30      }\r
31 \r
32      if ( sj.substring(start + jlen).equals("-")  ||\r
33           sj.substring(start + jlen).equals(".")  ||\r
34           sj.substring(start + jlen).equals(" ")) {\r
35        jlen--;\r
36 \r
37        while (sj.substring(start + jlen,start + jlen+1).equals("-")  ||\r
38               sj.substring(start + jlen,start + jlen+1).equals(".")  ||\r
39               sj.substring(start + jlen,start + jlen+1).equals(" ")) {\r
40          jlen--;\r
41        }\r
42      }\r
43 \r
44      int   count = 0;\r
45      int   match = 0;\r
46      float pid   = -1;\r
47 \r
48      if (ilen > jlen) {\r
49 \r
50        for (int j = 0; j < jlen; j++) {\r
51          if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) {\r
52            match++;\r
53          }\r
54          count++;\r
55        }\r
56        pid = (float)match/(float)ilen * 100;\r
57      } else {\r
58        for (int j = 0; j < jlen; j++) {\r
59          if (si.substring(start + j,start + j+1).equals(sj.substring(start + j,start + j+1))) {\r
60            match++;\r
61          }\r
62          count++;\r
63        }\r
64        pid = (float)match/(float)jlen * 100;\r
65      }\r
66 \r
67     return pid;\r
68   }\r
69 \r
70   /**    */\r
71   public static float PID(Sequence s1 , Sequence s2) {\r
72     int res = 0;\r
73     int len;\r
74 \r
75     if (s1.getSequence().length() > s2.getSequence().length()) {\r
76       len = s1.getSequence().length();\r
77     } else {\r
78       len = s2.getSequence().length();\r
79     }\r
80 \r
81     int bad = 0;\r
82 \r
83     for (int i = 0; i < len; i++) {\r
84       String str1 = "";\r
85       String str2 = "";\r
86 \r
87       if (i < s1.getSequence().length()) {\r
88         str1 = s1.getSequence().substring(i,i+1);\r
89       } else {\r
90         str1 = ".";\r
91       }\r
92 \r
93       if (i < s2.getSequence().length()) {\r
94         str2 = s2.getSequence().substring(i,i+1);\r
95       } else {\r
96         str2 = ".";\r
97       }\r
98 \r
99       if (!(str1.equals(".") ||\r
100             str1.equals("-") ||\r
101             str1.equals(" "))   &&\r
102           !(str2.equals(".") ||\r
103             str2.equals("-") ||\r
104             str2.equals(" "))) {\r
105 \r
106         if (!str1.equals(str2)) {\r
107           bad++;\r
108         }\r
109       }\r
110     }\r
111 \r
112     return (float)100*(len-bad)/len;\r
113   }\r
114 }\r