X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FJPredFile.java;h=5bc615ec0af0d76c4966daee69633db919f79875;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=30cd18190fd881541e735d9a8106d0f34db39b5e;hpb=7bc226b58110fa26d9dbd3f0c78095d06909ffc3;p=jalview.git diff --git a/src/jalview/io/JPredFile.java b/src/jalview/io/JPredFile.java index 30cd181..5bc615e 100755 --- a/src/jalview/io/JPredFile.java +++ b/src/jalview/io/JPredFile.java @@ -1,22 +1,23 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 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 + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 The Jalview Authors + * + * This file is part of Jalview. + * + * 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. - * - * 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 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. */ - /** * PredFile.java * JalviewX / Vamsas Project @@ -24,44 +25,72 @@ */ package jalview.io; -import java.io.*; -import java.util.*; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.util.MessageManager; -import jalview.datamodel.*; +import java.io.IOException; +import java.util.Hashtable; +import java.util.StringTokenizer; +import java.util.Vector; /** - * DOCUMENT ME! - * - * @author $author$ + * Parser for the JPred/JNet concise format. This is a series of CSV lines, each + * line is either a sequence (QUERY), a sequence profile (align;), or jnet + * prediction annotation (anything else). Automagic translation happens for + * annotation called 'JNETPRED' (translated to Secondary Structure Prediction), + * or 'JNETCONF' (translates to 'Prediction Confidence'). Numeric scores are + * differentiated from symbolic by being parseable into a float vector. They are + * put in Scores. Symscores gets the others. JNetAnnotationMaker translates the + * data parsed by this object into annotation on an alignment. It is + * automatically called but can be used to transfer the annotation onto a + * sequence in another alignment (and insert gaps where necessary) + * + * @author jprocter * @version $Revision$ */ -public class JPredFile - extends AlignFile +public class JPredFile extends AlignFile { Vector ids; + Vector conf; + Hashtable Scores; // Hash of names and score vectors - Hashtable Symscores; // indexes of symbol annotation properties in sequenceI vector + + Hashtable Symscores; // indexes of symbol annotation properties in sequenceI + + // vector + private int QuerySeqPosition; /** * Creates a new JPredFile object. - * - * @param inFile DOCUMENT ME! - * @param type DOCUMENT ME! - * - * @throws IOException DOCUMENT ME! + * + * @param inFile + * DOCUMENT ME! + * @param type + * DOCUMENT ME! + * + * @throws IOException + * DOCUMENT ME! */ - public JPredFile(String inFile, String type) - throws IOException + public JPredFile(String inFile, String type) throws IOException { super(inFile, type); } + public JPredFile(FileParse source) throws IOException + { + super(source); + } + /** * DOCUMENT ME! - * - * @param QuerySeqPosition DOCUMENT ME! + * + * @param QuerySeqPosition + * DOCUMENT ME! */ public void setQuerySeqPosition(int QuerySeqPosition) { @@ -70,7 +99,7 @@ public class JPredFile /** * DOCUMENT ME! - * + * * @return DOCUMENT ME! */ public int getQuerySeqPosition() @@ -80,7 +109,7 @@ public class JPredFile /** * DOCUMENT ME! - * + * * @return DOCUMENT ME! */ public Hashtable getScores() @@ -90,7 +119,7 @@ public class JPredFile /** * DOCUMENT ME! - * + * * @return DOCUMENT ME! */ public Hashtable getSymscores() @@ -112,8 +141,7 @@ public class JPredFile /** * parse a JPred concise file into a sequence-alignment like object. */ - public void parse() - throws IOException + public void parse() throws IOException { // JBPNote log.System.out.println("all read in "); String line; @@ -124,7 +152,7 @@ public class JPredFile Vector ids = new Vector(); Hashtable Symscores = new Hashtable(); - while ( (line = nextLine()) != null) + while ((line = nextLine()) != null) { // Concise format allows no comments or non comma-formatted data StringTokenizer str = new StringTokenizer(line, ":"); @@ -177,12 +205,11 @@ public class JPredFile ascore = symbols.nextToken(); Float score = new Float(ascore); - scores.addElement( (Object) score); + scores.addElement((Object) score); } Scores.put(id, scores); - } - catch (Exception e) + } catch (Exception e) { // or just keep them as strings i = scores.size(); @@ -190,15 +217,15 @@ public class JPredFile for (int j = 0; j < i; j++) { scores.setElementAt( - (Object) ( (Float) scores.elementAt(j)).toString(), j); + (Object) ((Float) scores.elementAt(j)).toString(), j); } - scores.addElement( (Object) ascore); + scores.addElement((Object) ascore); while (symbols.hasMoreTokens()) { ascore = symbols.nextToken(); - scores.addElement( (Object) ascore); + scores.addElement((Object) ascore); } Scores.put(id, scores); @@ -237,8 +264,9 @@ public class JPredFile name = id.substring(id.indexOf(";") + 1) + "_" + ++i; } + if (QuerySeqPosition == -1) + QuerySeqPosition = ids.size(); ids.addElement(name); - noSeqs++; } else @@ -250,17 +278,15 @@ public class JPredFile seq_entries.addElement(newseq.toString()); ids.addElement(id); - Symscores.put( (Object) id, - (Object)new Integer(ids.size() - 1)); + Symscores.put((Object) id, (Object) new Integer(ids.size() - 1)); } } } - /* leave it to the parser user to actually check this. - if (noSeqs < 1) - { - throw new IOException( - "JpredFile Parser: No sequence in the prediction!"); - }*/ + /* + * leave it to the parser user to actually check this. if (noSeqs < 1) { + * throw new IOException( "JpredFile Parser: No sequence in the + * prediction!"); } + */ maxLength = seq_entries.elementAt(0).toString().length(); @@ -268,29 +294,60 @@ public class JPredFile { // Add all sequence like objects Sequence newSeq = new Sequence(ids.elementAt(i).toString(), - seq_entries.elementAt(i).toString(), 1, - seq_entries.elementAt(i).toString().length()); + seq_entries.elementAt(i).toString(), 1, seq_entries + .elementAt(i).toString().length()); if (maxLength != seq_entries.elementAt(i).toString().length()) { - throw new IOException("JPredConcise: Entry (" + - ids.elementAt(i).toString() + - ") has an unexpected number of columns"); + throw new IOException( + MessageManager + .formatMessage( + "exception.jpredconcide_entry_has_unexpected_number_of_columns", + new String[] { ids.elementAt(i).toString() })); } - if (newSeq.getName().startsWith("QUERY") && - (QuerySeqPosition == -1)) + if ((newSeq.getName().startsWith("QUERY") || newSeq.getName() + .startsWith("align;")) && (QuerySeqPosition == -1)) { QuerySeqPosition = seqs.size(); } seqs.addElement(newSeq); } + if (seqs.size() > 0 && QuerySeqPosition > -1) + { + // try to make annotation for a prediction only input (default if no + // alignment is given and prediction contains a QUERY or align;sequence_id + // line) + Alignment tal = new Alignment(this.getSeqsAsArray()); + try + { + JnetAnnotationMaker.add_annotation(this, tal, QuerySeqPosition, + true); + } catch (Exception e) + { + tal = null; + IOException ex = new IOException( + MessageManager + .formatMessage( + "exception.couldnt_parse_concise_annotation_for_prediction", + new String[] { e.getMessage() })); + e.printStackTrace(); // java 1.1 does not have : + // ex.setStackTrace(e.getStackTrace()); + throw ex; + } + this.annotations = new Vector(); + AlignmentAnnotation[] aan = tal.getAlignmentAnnotation(); + for (int aai = 0; aan != null && aai < aan.length; aai++) + { + annotations.addElement(aan[aai]); + } + } } /** * print - * + * * @return String */ public String print() @@ -300,8 +357,9 @@ public class JPredFile /** * DOCUMENT ME! - * - * @param args DOCUMENT ME! + * + * @param args + * DOCUMENT ME! */ public static void main(String[] args) { @@ -311,20 +369,20 @@ public class JPredFile for (int i = 0; i < blc.seqs.size(); i++) { - System.out.println( ( (Sequence) blc.seqs.elementAt(i)).getName() + - "\n" + - ( (Sequence) blc.seqs.elementAt(i)).getSequenceAsString() + - "\n"); + System.out.println(((Sequence) blc.seqs.elementAt(i)).getName() + + "\n" + + ((Sequence) blc.seqs.elementAt(i)).getSequenceAsString() + + "\n"); } - } - catch (java.io.IOException e) + } catch (java.io.IOException e) { System.err.println("Exception " + e); - e.printStackTrace(); + // e.printStackTrace(); not java 1.1 compatible! } } Vector annotSeqs = null; + /** * removeNonSequences */ @@ -362,46 +420,25 @@ public class JPredFile } /* - StringBuffer out = new StringBuffer(); - - out.append("START PRED\n"); - for (int i = 0; i < s[0].sequence.length(); i++) - { - out.append(s[0].sequence.substring(i, i + 1) + " "); - out.append(s[1].sequence.substring(i, i + 1) + " "); - out.append(s[1].score[0].elementAt(i) + " "); - out.append(s[1].score[1].elementAt(i) + " "); - out.append(s[1].score[2].elementAt(i) + " "); - out.append(s[1].score[3].elementAt(i) + " "); - - out.append("\n"); - } - out.append("END PRED\n"); - return out.toString(); - } - - public static void main(String[] args) - { - try - { - BLCFile blc = new BLCFile(args[0], "File"); - DrawableSequence[] s = new DrawableSequence[blc.seqs.size()]; - for (int i = 0; i < blc.seqs.size(); i++) - { - s[i] = new DrawableSequence( (Sequence) blc.seqs.elementAt(i)); - } - String out = BLCFile.print(s); - - AlignFrame af = new AlignFrame(null, s); - af.resize(700, 500); - af.show(); - System.out.println(out); - } - catch (java.io.IOException e) - { - System.out.println("Exception " + e); - } - } - - } + * StringBuffer out = new StringBuffer(); + * + * out.append("START PRED\n"); for (int i = 0; i < s[0].sequence.length(); i++) + * { out.append(s[0].sequence.substring(i, i + 1) + " "); + * out.append(s[1].sequence.substring(i, i + 1) + " "); + * out.append(s[1].score[0].elementAt(i) + " "); + * out.append(s[1].score[1].elementAt(i) + " "); + * out.append(s[1].score[2].elementAt(i) + " "); + * out.append(s[1].score[3].elementAt(i) + " "); + * + * out.append("\n"); } out.append("END PRED\n"); return out.toString(); } + * + * public static void main(String[] args) { try { BLCFile blc = new + * BLCFile(args[0], "File"); DrawableSequence[] s = new + * DrawableSequence[blc.seqs.size()]; for (int i = 0; i < blc.seqs.size(); i++) + * { s[i] = new DrawableSequence( (Sequence) blc.seqs.elementAt(i)); } String + * out = BLCFile.print(s); + * + * AlignFrame af = new AlignFrame(null, s); af.resize(700, 500); af.show(); + * System.out.println(out); } catch (java.io.IOException e) { + * System.out.println("Exception " + e); } } } */