X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FPfamFile.java;h=6b9dc3f6a53836eb4573858bd51115744436b138;hb=08c7bee16c16563cc7cec7ea4d336b3e0c4c937a;hp=223e7a468d0a924bc6d16b11e64825bf09df720f;hpb=506d60f0e188723ddc91c26824b41ac7034df3fe;p=jalview.git diff --git a/src/jalview/io/PfamFile.java b/src/jalview/io/PfamFile.java index 223e7a4..6b9dc3f 100755 --- a/src/jalview/io/PfamFile.java +++ b/src/jalview/io/PfamFile.java @@ -1,28 +1,33 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * - * 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 file is part of Jalview. * - * 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. + * Jalview 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 3 + * of the License, or (at your option) any later version. + * + * Jalview 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 + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.io; -import java.io.*; -import java.util.*; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.util.Format; +import jalview.util.MessageManager; -import jalview.datamodel.*; -import jalview.util.*; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; public class PfamFile extends AlignFile { @@ -31,9 +36,10 @@ public class PfamFile extends AlignFile { } - public PfamFile(String inFile, String type) throws IOException + public PfamFile(String inFile, DataSourceType sourceType) + throws IOException { - super(inFile, type); + super(inFile, sourceType); } public PfamFile(FileParse source) throws IOException @@ -41,86 +47,104 @@ public class PfamFile extends AlignFile super(source); } + @Override public void initData() { super.initData(); } + @Override public void parse() throws IOException { int i = 0; String line; - Hashtable seqhash = new Hashtable(); - Vector headers = new Vector(); - + HashMap seqhash = new HashMap(); + ArrayList headers = new ArrayList(); + boolean useTabs = false; + int spces; while ((line = nextLine()) != null) { - if (line.indexOf(" ") != 0) + if (line.indexOf("#") == 0) { - if (line.indexOf("#") != 0) + // skip comment lines + continue; + } + // locate first space or (if already checked), tab + if (useTabs) + { + spces = line.indexOf("\t"); + } + else + { + spces = line.indexOf(" "); + // check to see if we ought to split on tabs instead. + if (!useTabs && spces == -1) { - StringTokenizer str = new StringTokenizer(line, " "); - String id = ""; - - if (str.hasMoreTokens()) - { - id = str.nextToken(); - - 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); - } - - tempseq.append(str.nextToken()); - } + useTabs = true; + spces = line.indexOf("\t"); } } + if (spces <= 0) + { + // no sequence data to split on + continue; + } + String id = line.substring(0, spces); + StringBuffer tempseq; + + if (seqhash.containsKey(id)) + { + tempseq = seqhash.get(id); + } + else + { + tempseq = new StringBuffer(); + seqhash.put(id, tempseq); + } + + if (!(headers.contains(id))) + { + headers.add(id); + } + if (spces + 1 < line.length()) + { + tempseq.append(line.substring(spces + 1).trim()); + } } this.noSeqs = headers.size(); if (noSeqs < 1) { - throw new IOException("No sequences found (PFAM input)"); + throw new IOException(MessageManager + .getString("exception.pfam_no_sequences_found")); } for (i = 0; i < headers.size(); i++) { - if (seqhash.get(headers.elementAt(i)) != null) + if (seqhash.get(headers.get(i)) != null) { - if (maxLength < seqhash.get(headers.elementAt(i)).toString() - .length()) + if (maxLength < seqhash.get(headers.get(i)).toString().length()) { - maxLength = seqhash.get(headers.elementAt(i)).toString().length(); + maxLength = seqhash.get(headers.get(i)).toString().length(); } - Sequence newSeq = parseId(headers.elementAt(i).toString()); - newSeq.setSequence(seqhash.get(headers.elementAt(i).toString()) - .toString()); + Sequence newSeq = parseId(headers.get(i).toString()); + newSeq.setSequence( + seqhash.get(headers.get(i).toString()).toString()); seqs.addElement(newSeq); } else { System.err.println("PFAM File reader: Can't find sequence for " - + headers.elementAt(i)); + + headers.get(i)); } } } - public String print(SequenceI[] s) + @Override + public String print(SequenceI[] s, boolean jvsuffix) { StringBuffer out = new StringBuffer(""); @@ -131,12 +155,9 @@ public class PfamFile extends AlignFile while ((i < s.length) && (s[i] != null)) { - String tmp = printId(s[i]); + String tmp = printId(s[i], jvsuffix); - if (s[i].getSequence().length > max) - { - max = s[i].getSequence().length; - } + max = Math.max(max, s[i].getLength()); if (tmp.length() > maxid) { @@ -155,19 +176,16 @@ public class PfamFile extends AlignFile while ((j < s.length) && (s[j] != null)) { - out.append(new Format("%-" + maxid + "s").form(printId(s[j]) + " ")); + out.append(new Format("%-" + maxid + "s") + .form(printId(s[j], jvsuffix) + " ")); - out.append(s[j].getSequenceAsString() + "\n"); + out.append(s[j].getSequenceAsString()); + out.append(newline); j++; } - out.append("\n"); + out.append(newline); return out.toString(); } - - public String print() - { - return print(getSeqsAsArray()); - } }