X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FClustalFile.java;h=2ea1d2f3017c8588b0fe60745fd4cf153ba70520;hb=424a0faf266f649090f17dc65246cdfb4111217e;hp=9b565266332efe7307cc58b653db083c35279b15;hpb=99c58ee0ae2a848f982552e53feaf6d5cb9925e5;p=jalview.git diff --git a/src/jalview/io/ClustalFile.java b/src/jalview/io/ClustalFile.java index 9b56526..2ea1d2f 100755 --- a/src/jalview/io/ClustalFile.java +++ b/src/jalview/io/ClustalFile.java @@ -1,149 +1,163 @@ /* -* Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -*/ - + * Jalview - A Sequence Alignment Editor and Viewer + * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.io; -import jalview.datamodel.*; -import jalview.util.*; - import java.io.*; import java.util.*; -public class ClustalFile extends AlignFile { +import jalview.datamodel.*; +import jalview.util.*; - Vector ids; +public class ClustalFile + extends AlignFile +{ public ClustalFile() - {} + { + } - public ClustalFile(String inStr) { + public ClustalFile(String inStr) + { super(inStr); } - - public void initData() { - super.initData(); - ids = new Vector(); + public ClustalFile(String inFile, String type) + throws IOException + { + super(inFile, type); } - public ClustalFile(String inFile, String type) throws IOException { - super(inFile,type); + public void initData() + { + super.initData(); } - public void parse() { - int i = 0; + public void parse() throws IOException + { + int i = 0; boolean flag = false; - Vector headers = new Vector(); + Vector headers = new Vector(); Hashtable seqhash = new Hashtable(); + StringBuffer tempseq; + String line, id; + StringTokenizer str; + + try + { + while ( (line = nextLine()) != null) + { + if (line.indexOf(" ") != 0) + { + str = new StringTokenizer(line, " "); - String line; - - try { - while ((line = nextLine()) != null) { - if (line.indexOf(" ") != 0) { - StringTokenizer str = new StringTokenizer(line," "); - String id = ""; - - if (str.hasMoreTokens()) { - id = str.nextToken(); - if (id.equals("CLUSTAL")) { - flag = true; - } else { - if (flag) { - StringBuffer tempseq; - if (seqhash.containsKey(id)) { - tempseq = (StringBuffer)seqhash.get(id); - } else { - tempseq = new StringBuffer(); - seqhash.put(id,tempseq); - } - - if (!(headers.contains(id))) { - headers.addElement(id); - } - - if(str.hasMoreTokens()) + if (str.hasMoreTokens()) + { + id = str.nextToken(); + + if (id.equalsIgnoreCase("CLUSTAL")) + { + flag = true; + } + else + { + if (flag) + { + if (seqhash.containsKey(id)) + { + tempseq = (StringBuffer) seqhash.get(id); + } + else + { + tempseq = new StringBuffer(); + seqhash.put(id, tempseq); + } + + if (! (headers.contains(id))) + { + headers.addElement(id); + } + + if (str.hasMoreTokens()) + { tempseq.append(str.nextToken()); - } - } - } - } + } + } + } + } + else + flag = true; + } } - } catch (IOException e) { + } + catch (IOException e) + { System.err.println("Exception parsing clustal file " + e); e.printStackTrace(); } - if (flag) { + if (flag) + { this.noSeqs = headers.size(); //Add sequences to the hash - for (i = 0; i < headers.size(); i++ ) { - int start = -1; - int end = -1; - - if ( seqhash.get(headers.elementAt(i)) != null) { - if (maxLength < seqhash.get(headers.elementAt(i)).toString().length() ) { - maxLength = seqhash.get(headers.elementAt(i)).toString().length(); + for (i = 0; i < headers.size(); i++) + { + if (seqhash.get(headers.elementAt(i)) != null) + { + if (maxLength < seqhash.get(headers.elementAt(i)).toString() + .length()) + { + maxLength = seqhash.get(headers.elementAt(i)).toString() + .length(); } - String head = headers.elementAt(i).toString(); - start = 1; - end = seqhash.get(headers.elementAt(i)).toString().length(); - if (head.indexOf("/") > 0 ) { - StringTokenizer st = new StringTokenizer(head,"/"); - if (st.countTokens() == 2) { - - ids.addElement(st.nextToken()); - - String tmp = st.nextToken(); - st = new StringTokenizer(tmp,"-"); - if (st.countTokens() == 2) { - start = Integer.valueOf(st.nextToken()).intValue(); - end = Integer.valueOf(st.nextToken()).intValue(); - } - } else { - ids.addElement(headers.elementAt(i)); - } - } else { - ids.addElement(headers.elementAt(i)); + Sequence newSeq = parseId(headers.elementAt(i).toString()); + newSeq.setSequence( seqhash.get(headers.elementAt(i).toString()).toString() ); + if (!isValidProteinSequence(newSeq.getSequence())) + { + throw new IOException(AppletFormatAdapter.INVALID_CHARACTERS + + " : " + newSeq.getName() + + " : " + invalidCharacter); } - Sequence newSeq = new Sequence(ids.elementAt(i).toString(), - seqhash.get(headers.elementAt(i).toString()).toString(),start,end); - seqs.addElement(newSeq); - } else { - System.err.println("Clustal File Reader: Can't find sequence for " + headers.elementAt(i)); + seqs.addElement(newSeq); + } + else + { + System.err.println( + "Clustal File Reader: Can't find sequence for " + + headers.elementAt(i)); } } } - } - public String print() { + public String print() + { return print(getSeqsAsArray()); } - public static String print(SequenceI[] s) { + public String print(SequenceI[] s) + { StringBuffer out = new StringBuffer("CLUSTAL\n\n"); int max = 0; @@ -151,48 +165,64 @@ public class ClustalFile extends AlignFile { int i = 0; - while (i < s.length && s[i] != null) { - String tmp = s[i].getName() + "/" + s[i].getStart() + "-" + s[i].getEnd(); + while ( (i < s.length) && (s[i] != null)) + { + String tmp = printId(s[i]); - if (s[i].getSequence().length() > max) { + if (s[i].getSequence().length() > max) + { max = s[i].getSequence().length(); } - if (tmp.length() > maxid) { + + if (tmp.length() > maxid) + { maxid = tmp.length(); } + i++; } - if (maxid < 15) { + if (maxid < 15) + { maxid = 15; } + maxid++; + int len = 60; - int nochunks = max / len + 1; + int nochunks = (max / len) + 1; - for (i = 0; i < nochunks; i++) { + for (i = 0; i < nochunks; i++) + { int j = 0; - while ( j < s.length && s[j] != null) { - out.append( new Format("%-" + maxid + "s").form(s[j].getName() + "/" + s[j].getStart() + "-" + s[j].getEnd()) + " "); - int start = i*len; + + while ( (j < s.length) && (s[j] != null)) + { + out.append(new Format("%-" + maxid + "s").form( printId(s[j]) + " ")); + + int start = i * len; int end = start + len; - if (end < s[j].getSequence().length() && start < s[j].getSequence().length() ) - out.append(s[j].getSequence().substring(start,end)); + if ( (end < s[j].getSequence().length()) && + (start < s[j].getSequence().length())) + { + out.append(s[j].getSequence().substring(start, end)); + } else { if (start < s[j].getSequence().length()) + { out.append(s[j].getSequence().substring(start)); + } } + out.append("\n"); j++; } - out.append("\n"); + out.append("\n"); } return out.toString(); } - - }