+ public RNA trimRNA(RNA rna){
+ ShiftList offset=new ShiftList();
+ RNA rnaTrim = new RNA("trim_"+rna.getName());
+ try {
+ rnaTrim.setRNA(rna.getSeq(),replaceOddGaps(rna.getStructDBN()));
+ } catch (ExceptionUnmatchedClosingParentheses e2) {
+ e2.printStackTrace();
+ } catch (ExceptionFileFormatOrSyntax e3) {
+ e3.printStackTrace();
+ }
+
+ StringBuffer seq=new StringBuffer(rnaTrim.getSeq());
+ StringBuffer struc=new StringBuffer(rnaTrim.getStructDBN());
+ int ofstart=-1,sleng=rnaTrim.getSeq().length();
+ for(int i=0;i<sleng;i++){
+ //TODO: Jalview utility for gap detection java.utils.isGap()
+ //TODO: Switch to jalview rna datamodel
+ if(jalview.util.Comparison.isGap(seq.charAt(i))){
+ if (ofstart==-1)
+ {
+ ofstart=i;
+ }
+ if(!rnaTrim.findPair(i).isEmpty()){
+ int m=rnaTrim.findPair(i).get(1);
+ int l=rnaTrim.findPair(i).get(0);
+
+ struc.replace(m, m+1, "*");
+ struc.replace(l, l+1, "*");
+ }else{
+ struc.replace(i, i+1, "*");
+ }
+ } else {
+ if (ofstart>-1)
+ {
+ offset.addShift(ofstart, ofstart-i);
+ ofstart=-1;
+ }
+ }
+ }
+ // final gap
+ if (ofstart>-1)
+ {
+ offset.addShift(ofstart, ofstart-sleng);
+ ofstart=-1;
+ }
+ String newSeq=rnaTrim.getSeq().replace("-", "");
+ rnaTrim.getSeq().replace(".", "");
+ String newStruc=struc.toString().replace("*", "");
+
+ try {
+ rnaTrim.setRNA(newSeq,newStruc);
+ registerOffset(rnaTrim,offset);
+ } catch (ExceptionUnmatchedClosingParentheses e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ExceptionFileFormatOrSyntax e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return rnaTrim;
+ }
+ Map<RNA,SequenceI> seqs=new Hashtable<RNA,SequenceI>();
+ Map<RNA,ShiftList> offsets=new Hashtable<RNA,ShiftList>();
+ Map<RNA,ShiftList> offsetsInv=new Hashtable<RNA,ShiftList>();
+ private void registerOffset(RNA rnaTrim, ShiftList offset)
+ {
+ offsets.put(rnaTrim, offset);
+ offsetsInv.put(rnaTrim,offset.getInverse());
+ }
+