X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FRna.java;h=3d7eab51100ee0a372ca005c7710fcc1af8c3dbb;hb=0619c67b9d65ffbe0a7ea5b2c7e12df5d125c535;hp=f2ef11887a7c1f55d334b0bb89b47a058e61d463;hpb=be415b56e8ce1bc00f5004c64793ce5d0cb17be8;p=jalview.git diff --git a/src/jalview/analysis/Rna.java b/src/jalview/analysis/Rna.java index f2ef118..3d7eab5 100644 --- a/src/jalview/analysis/Rna.java +++ b/src/jalview/analysis/Rna.java @@ -1,12 +1,13 @@ -/* Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) + * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle * * 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 @@ -14,20 +15,24 @@ * * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ - /* Author: Lauren Michelle Lui * Methods are based on RALEE methods http://personalpages.manchester.ac.uk/staff/sam.griffiths-jones/software/ralee/ + * Additional Author: Jan Engelhart (2011) - Structure consensus and bug fixing + * Additional Author: Anne Menard (2012) - Pseudoknot support and secondary structure consensus * */ package jalview.analysis; import java.util.Hashtable; +import java.util.Stack; import java.util.Vector; import jalview.datamodel.SequenceFeature; public class Rna { + 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 @@ -40,10 +45,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 { - - Vector stack = new Vector(); + Stack stack = new Stack(); Vector pairs = new Vector(); int i = 0; @@ -51,18 +56,22 @@ public class Rna { char base = line.charAt(i); - if ((base == '<') || (base == '(') || (base == '{') || (base == '[')) + if ((base == '<') || (base == '(') || (base == '{') || (base == '[')|| (base == 'A')|| (base == 'B')|| (base == 'C')|| (base == 'D')|| (base == '1')|| (base == 'F')|| (base == 'G')|| (base == '2')|| (base == 'I')|| (base == 'J')|| (base == 'K')|| (base == 'L')|| (base == 'M')|| (base == 'N')|| (base == 'O')|| (base == 'P')|| (base == 'Q')|| (base == 'R')|| (base == 'S')|| (base == 'T')|| (base == 'U')|| (base == 'V')|| (base == 'W')|| (base == 'X')|| (base == 'Y')|| (base == 'Z')) { - stack.addElement(i); + stack.push(i); } - else if ((base == '>') || (base == ')') || (base == '}') - || (base == ']')) + else if ((base == '>') || (base == ')') || (base == '}')|| (base == ']')|| (base == 'a')|| (base == 'b')|| (base == 'c')|| (base == 'd')|| (base == 'e')|| (base == 'f')|| (base == 'g')|| (base == 'h')|| (base == 'i')|| (base == 'j')|| (base == 'k')|| (base == 'l')|| (base == 'm')|| (base == 'n')|| (base == 'o')|| (base == 'p')|| (base == 'q')|| (base == 'r')|| (base == 's')|| (base == 't')|| (base == 'u')|| (base == 'v')|| (base == 'w')|| (base == 'x')|| (base == 'y')|| (base == 'z')) + { - 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++; @@ -76,15 +85,31 @@ 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); + } return outPairs; } /** + * Function to get the end position corresponding to a given start position + * + * @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); } + */ + + /** * Figures out which helix each position belongs to and stores the helix * number in the 'featureGroup' member of a SequenceFeature Based off of RALEE * code ralee-helix-map.