X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FRna.java;h=835ead3387067fc20b5587d29a188c1feb6b5808;hb=7335eb77076ba83a2faebeaf45f0aa03407fdcd1;hp=ca3c6d5159308b1ee589d4b7553ec1be6584f40d;hpb=857a40730ad5db87bfc7a381924717a2162c2b81;p=jalview.git diff --git a/src/jalview/analysis/Rna.java b/src/jalview/analysis/Rna.java index ca3c6d5..835ead3 100644 --- a/src/jalview/analysis/Rna.java +++ b/src/jalview/analysis/Rna.java @@ -1,36 +1,37 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) - * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1) + * 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. */ - /* Author: Lauren Michelle Lui * Methods are based on RALEE methods http://personalpages.manchester.ac.uk/staff/sam.griffiths-jones/software/ralee/ * */ package jalview.analysis; -import java.util.ArrayList; import java.util.Hashtable; +import java.util.Stack; import java.util.Vector; import jalview.datamodel.SequenceFeature; public class Rna { - static Hashtable pairHash = new Hashtable(); + static Hashtable pairHash = new Hashtable(); + /** * Based off of RALEE code ralee-get-base-pairs. Keeps track of open bracket * positions in "stack" vector. When a close bracket is reached, pair this @@ -43,11 +44,10 @@ public class Rna * @return Array of SequenceFeature; type = RNA helix, begin is open base * pair, end is close base pair */ - public static SequenceFeature[] GetBasePairs(String line) - public static SequenceFeature[] GetBasePairs(CharSequence line) throws WUSSParseException + public static SequenceFeature[] GetBasePairs(CharSequence line) + throws WUSSParseException { - - Vector stack = new Vector(); + Stack stack = new Stack(); Vector pairs = new Vector(); int i = 0; @@ -57,16 +57,20 @@ public class Rna if ((base == '<') || (base == '(') || (base == '{') || (base == '[')) { - stack.addElement(i); + stack.push(i); } else if ((base == '>') || (base == ')') || (base == '}') || (base == ']')) { - Object temp = stack.lastElement(); - stack.remove(stack.size() - 1); + if (stack.isEmpty()) + { + // error whilst parsing i'th position. pass back + throw new WUSSParseException("Mismatched closing bracket", i); + } + Object temp = stack.pop(); pairs.addElement(temp); - pairs.addElement(i); + pairs.addElement(i); } i++; @@ -80,30 +84,29 @@ public class Rna { int begin = Integer.parseInt(pairs.elementAt(p).toString()); int end = Integer.parseInt(pairs.elementAt(p + 1).toString()); - - outPairs[p / 2] = new SequenceFeature("RNA helix", "", "", begin, + + outPairs[p / 2] = new SequenceFeature("RNA helix", "", "", begin, end, ""); - //pairHash.put(begin, end); + // pairHash.put(begin, end); } return outPairs; } - - + /** * Function to get the end position corresponding to a given start position - * @param indice - start position of a base pair + * + * @param indice + * - start position of a base pair * @return - end position of a base pair */ - /*makes no sense at the moment :( - public int findEnd(int indice){ - //TODO: Probably extend this to find the start to a given end? - //could be done by putting everything twice to the hash - ArrayList pair = new ArrayList(); - return pairHash.get(indice); - }*/ - + /* + * makes no sense at the moment :( public int findEnd(int indice){ //TODO: + * Probably extend this to find the start to a given end? //could be done by + * putting everything twice to the hash ArrayList pair = new + * ArrayList(); return pairHash.get(indice); } + */ /** * Figures out which helix each position belongs to and stores the helix