2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
* Created on Jan 22, 2004 |
2 |
26 Feb 07 |
jari |
3 |
*/ |
2 |
26 Feb 07 |
jari |
4 |
package org.tigr.microarray.mev.file.agilent; |
2 |
26 Feb 07 |
jari |
5 |
|
2 |
26 Feb 07 |
jari |
6 |
import java.util.StringTokenizer; |
2 |
26 Feb 07 |
jari |
7 |
|
2 |
26 Feb 07 |
jari |
8 |
/** |
2 |
26 Feb 07 |
jari |
* Subclass of AgilentFeature. Represents a NINE_COLUMN Agilent Feature (has a TopHit column). |
2 |
26 Feb 07 |
jari |
* Beyond the base capabilities of AgilentFeature, this class deals with the TopHit column. |
2 |
26 Feb 07 |
jari |
* The TopHit can have none, any, or all of the following ids: GenbankPrimate, GenPept, SwissProt. |
2 |
26 Feb 07 |
jari |
* We want to use GenbankPrimate when it is available. Else, just use the geneName. |
2 |
26 Feb 07 |
jari |
13 |
* |
2 |
26 Feb 07 |
jari |
* @author vu |
2 |
26 Feb 07 |
jari |
15 |
*/ |
2 |
26 Feb 07 |
jari |
16 |
public class TopFeature extends AgilentFeature { |
2 |
26 Feb 07 |
jari |
17 |
static final String sGB = "GB"; |
2 |
26 Feb 07 |
jari |
18 |
static final String sGBPRI = "GBPri"; |
2 |
26 Feb 07 |
jari |
19 |
static final String sGP = "GP"; |
2 |
26 Feb 07 |
jari |
20 |
static final String sSP = "SP"; |
2 |
26 Feb 07 |
jari |
21 |
|
2 |
26 Feb 07 |
jari |
22 |
private String topHit; |
2 |
26 Feb 07 |
jari |
23 |
private String accession; |
2 |
26 Feb 07 |
jari |
24 |
|
2 |
26 Feb 07 |
jari |
25 |
|
2 |
26 Feb 07 |
jari |
26 |
/** |
2 |
26 Feb 07 |
jari |
* Constructor. Parses a line representing a single feature and stores as local variables. |
2 |
26 Feb 07 |
jari |
* @param line One line from an Agilent Pattern File NOT containing a TopHit column |
2 |
26 Feb 07 |
jari |
29 |
*/ |
2 |
26 Feb 07 |
jari |
30 |
public TopFeature(String line) { |
2 |
26 Feb 07 |
jari |
31 |
StringTokenizer st = new StringTokenizer(line,"\t"); |
2 |
26 Feb 07 |
jari |
32 |
int kount = st.countTokens(); |
2 |
26 Feb 07 |
jari |
33 |
if( kount != 9 ) { |
2 |
26 Feb 07 |
jari |
//big problems here |
2 |
26 Feb 07 |
jari |
35 |
System.out.println("kount(" + kount + ") != 9:" + line); |
2 |
26 Feb 07 |
jari |
36 |
} else { |
2 |
26 Feb 07 |
jari |
//we're ok |
2 |
26 Feb 07 |
jari |
38 |
String one = st.nextToken(); |
2 |
26 Feb 07 |
jari |
39 |
String two = st.nextToken(); |
2 |
26 Feb 07 |
jari |
40 |
String three = st.nextToken(); |
2 |
26 Feb 07 |
jari |
41 |
String four = st.nextToken(); |
2 |
26 Feb 07 |
jari |
42 |
String five = st.nextToken(); |
2 |
26 Feb 07 |
jari |
43 |
String six = st.nextToken(); |
2 |
26 Feb 07 |
jari |
44 |
String seven = st.nextToken(); |
2 |
26 Feb 07 |
jari |
45 |
String eight = st.nextToken(); |
2 |
26 Feb 07 |
jari |
46 |
String nine = st.nextToken(); |
2 |
26 Feb 07 |
jari |
47 |
|
2 |
26 Feb 07 |
jari |
48 |
this.setCol(this.s2int(one)); |
2 |
26 Feb 07 |
jari |
49 |
this.setRow(this.s2int(two)); |
2 |
26 Feb 07 |
jari |
50 |
this.setName(three); |
2 |
26 Feb 07 |
jari |
51 |
this.setSysName(four); |
2 |
26 Feb 07 |
jari |
52 |
this.setRefNumber(this.s2int(five)); |
2 |
26 Feb 07 |
jari |
53 |
this.setControlType(six); |
2 |
26 Feb 07 |
jari |
54 |
this.setGeneName(seven); |
2 |
26 Feb 07 |
jari |
55 |
this.setTopHit(eight); |
2 |
26 Feb 07 |
jari |
56 |
this.setDesc(nine); |
2 |
26 Feb 07 |
jari |
57 |
|
2 |
26 Feb 07 |
jari |
58 |
this.assignFeatureType(); |
2 |
26 Feb 07 |
jari |
59 |
if(this.hasGbPri(this.getTopHit())) { |
2 |
26 Feb 07 |
jari |
60 |
this.setAccession(TopFeature.parseAccession(this.topHit)); |
2 |
26 Feb 07 |
jari |
//System.out.println(this.getAccession() + "\t" + this.topHit); |
2 |
26 Feb 07 |
jari |
62 |
} else { |
2 |
26 Feb 07 |
jari |
63 |
this.setAccession(this.getGeneName()); |
2 |
26 Feb 07 |
jari |
64 |
} |
2 |
26 Feb 07 |
jari |
65 |
} |
2 |
26 Feb 07 |
jari |
66 |
}//end constructor |
2 |
26 Feb 07 |
jari |
67 |
|
2 |
26 Feb 07 |
jari |
68 |
|
2 |
26 Feb 07 |
jari |
69 |
/** |
2 |
26 Feb 07 |
jari |
* Tests String s to see if it contains a GBPri accession number. |
2 |
26 Feb 07 |
jari |
* @param s A String from the TopHit column in an Agilent Pattern. |
2 |
26 Feb 07 |
jari |
* @return True if there is a GBPri accession number. |
2 |
26 Feb 07 |
jari |
73 |
*/ |
2 |
26 Feb 07 |
jari |
74 |
private boolean hasGbPri(String s) { |
2 |
26 Feb 07 |
jari |
75 |
boolean toReturn = false; |
2 |
26 Feb 07 |
jari |
76 |
if(s.toLowerCase().startsWith(TopFeature.sGBPRI.toLowerCase())) { |
2 |
26 Feb 07 |
jari |
77 |
toReturn = true; |
2 |
26 Feb 07 |
jari |
78 |
} else if(s.toLowerCase().startsWith(TopFeature.sGB.toLowerCase())) { |
2 |
26 Feb 07 |
jari |
79 |
toReturn = true; |
2 |
26 Feb 07 |
jari |
80 |
} else { |
2 |
26 Feb 07 |
jari |
81 |
int iPipe = s.indexOf("|"); |
2 |
26 Feb 07 |
jari |
82 |
while(iPipe != -1) { |
2 |
26 Feb 07 |
jari |
83 |
int lastPipe = iPipe; |
2 |
26 Feb 07 |
jari |
84 |
String sub = s.substring(iPipe + 1); |
2 |
26 Feb 07 |
jari |
85 |
if(sub.toLowerCase().startsWith(TopFeature.sGBPRI.toLowerCase())) { |
2 |
26 Feb 07 |
jari |
86 |
toReturn = true; |
2 |
26 Feb 07 |
jari |
87 |
} |
2 |
26 Feb 07 |
jari |
88 |
iPipe = s.indexOf("|",(lastPipe+1)); |
2 |
26 Feb 07 |
jari |
89 |
} |
2 |
26 Feb 07 |
jari |
90 |
} |
2 |
26 Feb 07 |
jari |
91 |
return toReturn; |
2 |
26 Feb 07 |
jari |
92 |
}//end hasGbPri |
2 |
26 Feb 07 |
jari |
93 |
|
2 |
26 Feb 07 |
jari |
94 |
|
2 |
26 Feb 07 |
jari |
95 |
/** |
2 |
26 Feb 07 |
jari |
* Parses the main accession number. Acc #'s sometimes have a build number |
2 |
26 Feb 07 |
jari |
* appended. |
2 |
26 Feb 07 |
jari |
* @param s The Accession Number |
2 |
26 Feb 07 |
jari |
* @return The parsed Accession Number |
2 |
26 Feb 07 |
jari |
100 |
*/ |
2 |
26 Feb 07 |
jari |
101 |
static String parseAccession(String s) { |
2 |
26 Feb 07 |
jari |
102 |
String toReturn; |
2 |
26 Feb 07 |
jari |
103 |
String temp; |
2 |
26 Feb 07 |
jari |
104 |
int iGb = s.toLowerCase().indexOf(TopFeature.sGB.toLowerCase()); |
2 |
26 Feb 07 |
jari |
105 |
int iPipe = s.indexOf("|",iGb); |
2 |
26 Feb 07 |
jari |
106 |
int iColon = s.indexOf(":",iGb); |
2 |
26 Feb 07 |
jari |
107 |
|
2 |
26 Feb 07 |
jari |
108 |
int iNextPipe = s.indexOf("|",(iPipe + 1)); |
2 |
26 Feb 07 |
jari |
109 |
int iNextColon = s.indexOf(":",(iColon + 1)); |
2 |
26 Feb 07 |
jari |
110 |
|
2 |
26 Feb 07 |
jari |
111 |
if(iPipe != -1) { |
2 |
26 Feb 07 |
jari |
//we know it's using pipes, not colons |
2 |
26 Feb 07 |
jari |
113 |
if(iNextPipe == -1) { |
2 |
26 Feb 07 |
jari |
//there are no other pipes, just use the rest of the string |
2 |
26 Feb 07 |
jari |
115 |
temp = s.substring((iPipe + 1)); |
2 |
26 Feb 07 |
jari |
116 |
} else { |
2 |
26 Feb 07 |
jari |
//backtrack off next pipe |
2 |
26 Feb 07 |
jari |
118 |
temp = s.substring((iPipe + 1),(iNextPipe - 2)); |
2 |
26 Feb 07 |
jari |
119 |
} |
2 |
26 Feb 07 |
jari |
120 |
} else { |
2 |
26 Feb 07 |
jari |
//it's using colons |
2 |
26 Feb 07 |
jari |
122 |
if(iNextColon == -1) { |
2 |
26 Feb 07 |
jari |
//there are no other colons, just use the rest of the string |
2 |
26 Feb 07 |
jari |
124 |
temp = s.substring((iColon + 1)); |
2 |
26 Feb 07 |
jari |
125 |
} else { |
2 |
26 Feb 07 |
jari |
//backtrack off next colon |
2 |
26 Feb 07 |
jari |
127 |
temp = s.substring((iColon + 1), (iNextColon - 2)); |
2 |
26 Feb 07 |
jari |
128 |
} |
2 |
26 Feb 07 |
jari |
129 |
} |
2 |
26 Feb 07 |
jari |
130 |
|
2 |
26 Feb 07 |
jari |
131 |
int iDot = temp.indexOf("."); |
2 |
26 Feb 07 |
jari |
132 |
int iDash = temp.indexOf("-"); |
2 |
26 Feb 07 |
jari |
133 |
if(iDot != -1) { |
2 |
26 Feb 07 |
jari |
//has a dot ending |
2 |
26 Feb 07 |
jari |
135 |
toReturn = temp.substring(0,iDot); |
2 |
26 Feb 07 |
jari |
136 |
} else if(iDash != -1) { |
2 |
26 Feb 07 |
jari |
//has a dash ending |
2 |
26 Feb 07 |
jari |
138 |
toReturn = temp.substring(0,iDash); |
2 |
26 Feb 07 |
jari |
139 |
} else { |
2 |
26 Feb 07 |
jari |
//has no ending |
2 |
26 Feb 07 |
jari |
141 |
toReturn = temp; |
2 |
26 Feb 07 |
jari |
142 |
} |
2 |
26 Feb 07 |
jari |
143 |
|
2 |
26 Feb 07 |
jari |
144 |
return toReturn; |
2 |
26 Feb 07 |
jari |
145 |
}//end parseAccession |
2 |
26 Feb 07 |
jari |
146 |
|
2 |
26 Feb 07 |
jari |
147 |
|
2 |
26 Feb 07 |
jari |
148 |
/** |
2 |
26 Feb 07 |
jari |
* Counts the number of times char c occurs in String s |
2 |
26 Feb 07 |
jari |
* @param s |
2 |
26 Feb 07 |
jari |
* @param c |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
153 |
*/ |
2 |
26 Feb 07 |
jari |
154 |
private int kountChar(String s, char c) { |
2 |
26 Feb 07 |
jari |
155 |
int toReturn = 0; |
2 |
26 Feb 07 |
jari |
156 |
|
2 |
26 Feb 07 |
jari |
157 |
for(int i = 0; i < s.length(); i ++) { |
2 |
26 Feb 07 |
jari |
158 |
char at = s.charAt(i); |
2 |
26 Feb 07 |
jari |
159 |
if(at == c) { |
2 |
26 Feb 07 |
jari |
160 |
toReturn++; |
2 |
26 Feb 07 |
jari |
161 |
} |
2 |
26 Feb 07 |
jari |
162 |
} |
2 |
26 Feb 07 |
jari |
163 |
|
2 |
26 Feb 07 |
jari |
164 |
return toReturn; |
2 |
26 Feb 07 |
jari |
165 |
}//end kountPipes |
2 |
26 Feb 07 |
jari |
166 |
|
2 |
26 Feb 07 |
jari |
167 |
|
2 |
26 Feb 07 |
jari |
168 |
/** |
2 |
26 Feb 07 |
jari |
* Converts a String to an int |
2 |
26 Feb 07 |
jari |
* @param s String value representing an int |
2 |
26 Feb 07 |
jari |
* @return int |
2 |
26 Feb 07 |
jari |
172 |
*/ |
2 |
26 Feb 07 |
jari |
173 |
public int s2int(String s) { |
2 |
26 Feb 07 |
jari |
174 |
Integer I = new Integer(s); |
2 |
26 Feb 07 |
jari |
175 |
return I.intValue(); |
2 |
26 Feb 07 |
jari |
176 |
} |
2 |
26 Feb 07 |
jari |
177 |
|
2 |
26 Feb 07 |
jari |
178 |
private void setTopHit(String sTopHit) { |
2 |
26 Feb 07 |
jari |
179 |
this.topHit = sTopHit; |
2 |
26 Feb 07 |
jari |
180 |
} |
2 |
26 Feb 07 |
jari |
181 |
|
2 |
26 Feb 07 |
jari |
182 |
public String getTopHit() { |
2 |
26 Feb 07 |
jari |
183 |
return topHit; |
2 |
26 Feb 07 |
jari |
184 |
} |
2 |
26 Feb 07 |
jari |
185 |
|
2 |
26 Feb 07 |
jari |
186 |
private void setAccession(String accession) { |
2 |
26 Feb 07 |
jari |
187 |
this.accession = accession; |
2 |
26 Feb 07 |
jari |
188 |
} |
2 |
26 Feb 07 |
jari |
189 |
|
2 |
26 Feb 07 |
jari |
190 |
public String getAccession() { |
2 |
26 Feb 07 |
jari |
191 |
return accession; |
2 |
26 Feb 07 |
jari |
192 |
} |
2 |
26 Feb 07 |
jari |
193 |
} |