* along with this program; if not, write to the Free Software\r
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
*/\r
-\r
package jalview.io;\r
\r
import jalview.datamodel.*;\r
+\r
import jalview.util.*;\r
\r
import java.io.*;\r
-import java.util.*;\r
-\r
-public class PfamFile extends AlignFile {\r
-\r
- Vector ids;\r
\r
- public PfamFile()\r
- {}\r
+import java.util.*;\r
\r
- public PfamFile(String inStr) {\r
- super(inStr);\r
- }\r
\r
- public void initData() {\r
- super.initData();\r
- ids = new Vector();\r
- }\r
+public class PfamFile extends AlignFile {\r
+ Vector ids;\r
\r
- public PfamFile(String inFile, String type) throws IOException {\r
- super(inFile,type);\r
- }\r
+ public PfamFile() {\r
+ }\r
\r
- public void parse() throws IOException{\r
- int i = 0;\r
- String line;\r
+ public PfamFile(String inStr) {\r
+ super(inStr);\r
+ }\r
\r
+ public PfamFile(String inFile, String type) throws IOException {\r
+ super(inFile, type);\r
+ }\r
\r
- Hashtable seqhash = new Hashtable();\r
- Vector headers = new Vector();\r
+ public void initData() {\r
+ super.initData();\r
+ ids = new Vector();\r
+ }\r
\r
+ public void parse() throws IOException {\r
+ int i = 0;\r
+ String line;\r
\r
- while ((line = nextLine()) != null)\r
- {\r
+ Hashtable seqhash = new Hashtable();\r
+ Vector headers = new Vector();\r
\r
- if (line.indexOf(" ") != 0)\r
- {\r
- if (line.indexOf("#") != 0)\r
- {\r
+ while ((line = nextLine()) != null) {\r
+ if (line.indexOf(" ") != 0) {\r
+ if (line.indexOf("#") != 0) {\r
+ StringTokenizer str = new StringTokenizer(line, " ");\r
+ String id = "";\r
\r
- StringTokenizer str = new StringTokenizer(line," ");\r
- String id = "";\r
+ if (str.hasMoreTokens()) {\r
+ id = str.nextToken();\r
\r
- if (str.hasMoreTokens())\r
- {\r
- id = str.nextToken();\r
+ StringBuffer tempseq;\r
\r
- StringBuffer tempseq;\r
+ if (seqhash.containsKey(id)) {\r
+ tempseq = (StringBuffer) seqhash.get(id);\r
+ } else {\r
+ tempseq = new StringBuffer();\r
+ seqhash.put(id, tempseq);\r
+ }\r
\r
- if (seqhash.containsKey(id))\r
- tempseq = (StringBuffer)seqhash.get(id);\r
- else\r
- {\r
- tempseq = new StringBuffer();\r
- seqhash.put(id,tempseq);\r
- }\r
+ if (!(headers.contains(id))) {\r
+ headers.addElement(id);\r
+ }\r
\r
- if (!(headers.contains(id)))\r
- headers.addElement(id);\r
+ tempseq.append(str.nextToken());\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
+ this.noSeqs = headers.size();\r
\r
- tempseq.append(str.nextToken());\r
- }\r
+ if (noSeqs < 1) {\r
+ throw new IOException("No sequences found (PFAM input)");\r
}\r
- }\r
- }\r
\r
- this.noSeqs = headers.size();\r
- if(noSeqs<1)\r
- throw new IOException("No sequences found (PFAM input)");\r
-\r
- for (i = 0; i < headers.size(); i++ ) {\r
-\r
- if ( seqhash.get(headers.elementAt(i)) != null) {\r
- if (maxLength < seqhash.get(headers.elementAt(i)).toString().length() )\r
- maxLength = seqhash.get(headers.elementAt(i)).toString().length();\r
-\r
- String head = headers.elementAt(i).toString();\r
- int start = 1;\r
- int end = seqhash.get(headers.elementAt(i)).toString().length();\r
-\r
- if (head.indexOf("/") > 0 ) {\r
- StringTokenizer st = new StringTokenizer(head,"/");\r
- if (st.countTokens() == 2) {\r
- ids.addElement(st.nextToken());\r
- String tmp = st.nextToken();\r
- st = new StringTokenizer(tmp,"-");\r
- if (st.countTokens() == 2) {\r
- start = Integer.valueOf(st.nextToken()).intValue();\r
- end = Integer.valueOf(st.nextToken()).intValue();\r
- } else\r
- {\r
- start = -1;\r
- end = -1;\r
+ for (i = 0; i < headers.size(); i++) {\r
+ if (seqhash.get(headers.elementAt(i)) != null) {\r
+ if (maxLength < seqhash.get(headers.elementAt(i)).toString()\r
+ .length()) {\r
+ maxLength = seqhash.get(headers.elementAt(i)).toString()\r
+ .length();\r
+ }\r
+\r
+ String head = headers.elementAt(i).toString();\r
+ int start = 1;\r
+ int end = seqhash.get(headers.elementAt(i)).toString().length();\r
+\r
+ if (head.indexOf("/") > 0) {\r
+ StringTokenizer st = new StringTokenizer(head, "/");\r
+\r
+ if (st.countTokens() == 2) {\r
+ ids.addElement(st.nextToken());\r
+\r
+ String tmp = st.nextToken();\r
+ st = new StringTokenizer(tmp, "-");\r
+\r
+ if (st.countTokens() == 2) {\r
+ start = Integer.valueOf(st.nextToken()).intValue();\r
+ end = Integer.valueOf(st.nextToken()).intValue();\r
+ } else {\r
+ start = -1;\r
+ end = -1;\r
+ }\r
+ } else {\r
+ ids.addElement(headers.elementAt(i));\r
+ }\r
+ } else {\r
+ ids.addElement(headers.elementAt(i));\r
+ }\r
+\r
+ Sequence newSeq = null;\r
+\r
+ if ((start != -1) && (end != -1)) {\r
+ newSeq = new Sequence(ids.elementAt(i).toString(),\r
+ seqhash.get(headers.elementAt(i).toString())\r
+ .toString(), start, end);\r
+ seqs.addElement(newSeq);\r
+ } else {\r
+ newSeq = new Sequence(ids.elementAt(i).toString(),\r
+ seqhash.get(headers.elementAt(i).toString())\r
+ .toString(), 1,\r
+ seqhash.get(headers.elementAt(i).toString())\r
+ .toString().length());\r
+ seqs.addElement(newSeq);\r
+ }\r
+\r
+ if (!isValidProteinSequence(newSeq.getSequence())) {\r
+ throw new IOException(\r
+ "Not a valid protein sequence - (PFAM input)");\r
+ }\r
+ } else {\r
+ System.err.println("PFAM File reader: Can't find sequence for " +\r
+ headers.elementAt(i));\r
}\r
- } else\r
- ids.addElement(headers.elementAt(i));\r
-\r
}\r
- else\r
- ids.addElement(headers.elementAt(i));\r
+ }\r
\r
+ public static String print(SequenceI[] s) {\r
+ StringBuffer out = new StringBuffer("");\r
\r
- Sequence newSeq = null;\r
- if (start != -1 && end != -1)\r
- {\r
- newSeq = new Sequence(ids.elementAt(i).toString(),\r
- seqhash.get(headers.elementAt(i).toString()).toString(),start,end);\r
- seqs.addElement(newSeq);\r
- }\r
- else\r
- {\r
- newSeq = new Sequence(ids.elementAt(i).toString(),\r
- seqhash.get(headers.elementAt(i).toString()).toString(),1,\r
- seqhash.get(headers.elementAt(i).toString()).toString().length());\r
- seqs.addElement(newSeq);\r
- }\r
+ int max = 0;\r
+ int maxid = 0;\r
\r
- if(!isValidProteinSequence(newSeq.getSequence()))\r
- throw new IOException("Not a valid protein sequence - (PFAM input)");\r
- }\r
- else\r
- System.err.println("PFAM File reader: Can't find sequence for " + headers.elementAt(i));\r
+ int i = 0;\r
\r
- }\r
+ while ((i < s.length) && (s[i] != null)) {\r
+ String tmp = s[i].getName() + "/" + s[i].getStart() + "-" +\r
+ s[i].getEnd();\r
\r
- }\r
+ if (s[i].getSequence().length() > max) {\r
+ max = s[i].getSequence().length();\r
+ }\r
\r
- public static String print(SequenceI[] s) {\r
- StringBuffer out = new StringBuffer("");\r
+ if (tmp.length() > maxid) {\r
+ maxid = tmp.length();\r
+ }\r
\r
- int max = 0;\r
- int maxid = 0;\r
+ i++;\r
+ }\r
\r
- int i = 0;\r
+ if (maxid < 15) {\r
+ maxid = 15;\r
+ }\r
\r
- while (i < s.length && s[i] != null) {\r
- String tmp = s[i].getName() + "/" + s[i].getStart()+ "-" + s[i].getEnd();\r
+ int j = 0;\r
\r
- if (s[i].getSequence().length() > max) {\r
- max = s[i].getSequence().length();\r
- }\r
- if (tmp.length() > maxid) {\r
- maxid = tmp.length();\r
- }\r
- i++;\r
- }\r
+ while ((j < s.length) && (s[j] != null)) {\r
+ out.append(new Format("%-" + maxid + "s").form(s[j].getName() +\r
+ "/" + s[j].getStart() + "-" + s[j].getEnd()) + " ");\r
\r
- if (maxid < 15) {\r
- maxid = 15;\r
- }\r
+ out.append(s[j].getSequence() + "\n");\r
+ j++;\r
+ }\r
\r
- int j = 0;\r
- while ( j < s.length && s[j] != null) {\r
- out.append( new Format("%-" + maxid + "s").form(s[j].getName() + "/" + s[j].getStart() + "-" + s[j].getEnd() ) + " ");\r
+ out.append("\n");\r
\r
- out.append(s[j].getSequence() + "\n");\r
- j++;\r
+ return out.toString();\r
}\r
- out.append("\n");\r
-\r
- return out.toString();\r
- }\r
\r
- public String print() {\r
- return print(getSeqsAsArray());\r
- }\r
+ public String print() {\r
+ return print(getSeqsAsArray());\r
+ }\r
}\r