X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FRna.java;h=ba18732a982dd8cad4e18aa9f828a83dddd55e8a;hb=7796bc87c98b21f199f9dc195401223984619091;hp=69a228ba8ac0496fb8f5c42bacdc1f35341fc48a;hpb=323a457c9d0643be2406b6661246e8e988c0d0f6;p=jalview.git diff --git a/src/jalview/analysis/Rna.java b/src/jalview/analysis/Rna.java index 69a228b..ba18732 100644 --- a/src/jalview/analysis/Rna.java +++ b/src/jalview/analysis/Rna.java @@ -1,5 +1,6 @@ -/* 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.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle * * This file is part of Jalview. * @@ -21,13 +22,16 @@ 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(); /** * 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 +44,9 @@ 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; @@ -53,16 +56,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++; @@ -76,13 +83,30 @@ 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 @@ -159,7 +183,6 @@ public class Rna // Record helix as featuregroup pairs[i].setFeatureGroup(Integer.toString(helix)); - pairs[i].setFeatureGroup(Integer.toString(helix)); lastopen = open; lastclose = close; @@ -167,3 +190,4 @@ public class Rna } } } +