X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FClustalFile.java;h=bc6ca7f154b32c41a37abea36ade2c3d758465f5;hb=865a855a4ca87eadb3e5ff284ed32ed307d9c34b;hp=6a36078ba8f5abd069c8b8ad93454ea42a5a3b0f;hpb=a45774ee31d9f35d4eff46d54d7deab719afb092;p=jalview.git diff --git a/src/jalview/io/ClustalFile.java b/src/jalview/io/ClustalFile.java index 6a36078..bc6ca7f 100755 --- a/src/jalview/io/ClustalFile.java +++ b/src/jalview/io/ClustalFile.java @@ -1,19 +1,20 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) - * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1) + * Copyright (C) 2014 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. - * + * * 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 Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.io; @@ -49,7 +50,9 @@ public class ClustalFile extends AlignFile { int i = 0; boolean flag = false; - + boolean rna = false; + boolean top = false; + StringBuffer pssecstr = new StringBuffer(), consstr = new StringBuffer(); Vector headers = new Vector(); Hashtable seqhash = new Hashtable(); StringBuffer tempseq; @@ -60,6 +63,10 @@ public class ClustalFile extends AlignFile { while ((line = nextLine()) != null) { + if (line.length() == 0) + { + top = true; + } if (line.indexOf(" ") != 0) { str = new StringTokenizer(line, " "); @@ -95,6 +102,7 @@ public class ClustalFile extends AlignFile { tempseq.append(str.nextToken()); } + top = false; } } } @@ -103,6 +111,20 @@ public class ClustalFile extends AlignFile flag = true; } } + else + { + if (line.matches("\\s+(-|\\.|\\(|\\[|\\]|\\))+")) + { + if (top) + { + pssecstr.append(line.trim()); + } + else + { + consstr.append(line.trim()); + } + } + } } } catch (IOException e) { @@ -139,17 +161,41 @@ public class ClustalFile extends AlignFile + headers.elementAt(i)); } } + AlignmentAnnotation lastssa = null; + if (pssecstr.length() == maxLength) + { + Vector ss = new Vector(); + AlignmentAnnotation ssa = lastssa = StockholmFile + .parseAnnotationRow(ss, "secondary structure", + pssecstr.toString()); + ssa.label = "Secondary Structure"; + annotations.addElement(ssa); + } + if (consstr.length() == maxLength) + { + Vector ss = new Vector(); + AlignmentAnnotation ssa = StockholmFile.parseAnnotationRow(ss, + "secondary structure", consstr.toString()); + ssa.label = "Consensus Secondary Structure"; + if (lastssa == null + || !lastssa.getRNAStruc().equals( + ssa.getRNAStruc().replace('-', '.'))) + { + annotations.addElement(ssa); + } + } } } public String print() { return print(getSeqsAsArray()); + // TODO: locaRNA style aln output } public String print(SequenceI[] s) { - StringBuffer out = new StringBuffer("CLUSTAL"+newline+newline); + StringBuffer out = new StringBuffer("CLUSTAL" + newline + newline); int max = 0; int maxid = 0;