From: jprocter Date: Fri, 7 Dec 2012 15:53:31 +0000 (+0000) Subject: revised renderer and annotation model to support different pair-patterns - needs... X-Git-Tag: Jalview_2_9~221^2^2~8^2~23 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=7f78655d044a97fd257fe60db922f11184a60767 revised renderer and annotation model to support different pair-patterns - needs merging and debugging --- diff --git a/src/jalview/datamodel/AlignmentAnnotation.java b/src/jalview/datamodel/AlignmentAnnotation.java index 8115af4..1433f73 100755 --- a/src/jalview/datamodel/AlignmentAnnotation.java +++ b/src/jalview/datamodel/AlignmentAnnotation.java @@ -263,10 +263,10 @@ public class AlignmentAnnotation || annotations[i].secondaryStructure == 'B' || annotations[i].secondaryStructure == 'C' || annotations[i].secondaryStructure == 'D' - || annotations[i].secondaryStructure == '1' + || annotations[i].secondaryStructure == 'E' || annotations[i].secondaryStructure == 'F' || annotations[i].secondaryStructure == 'G' - || annotations[i].secondaryStructure == '2' + || annotations[i].secondaryStructure == 'H' || annotations[i].secondaryStructure == 'I' || annotations[i].secondaryStructure == 'J' || annotations[i].secondaryStructure == 'K' @@ -315,8 +315,8 @@ public class AlignmentAnnotation // && // annotations[i].displayCharacter.charAt(0)==annotations[i].secondaryStructure firstChar != ' ' - && firstChar != 'H' - && firstChar != 'E' + && firstChar != '$' + && firstChar != 'µ' // JBPNote should explicitly express as unicode number to avoid source code translation problems && firstChar != '(' && firstChar != '[' && firstChar != '>' @@ -325,10 +325,10 @@ public class AlignmentAnnotation && firstChar != 'B' && firstChar != 'C' && firstChar != 'D' - && firstChar != '1' + && firstChar != 'E' && firstChar != 'F' && firstChar != 'G' - && firstChar != '2' + && firstChar != 'H' && firstChar != 'I' && firstChar != 'J' && firstChar != 'K' diff --git a/src/jalview/renderer/AnnotationRenderer.java b/src/jalview/renderer/AnnotationRenderer.java index 90808de..cb53eb6 100644 --- a/src/jalview/renderer/AnnotationRenderer.java +++ b/src/jalview/renderer/AnnotationRenderer.java @@ -145,7 +145,7 @@ public class AnnotationRenderer private int imgWidth; - public void drawNotCanonicalAnnot(Graphics g, Color nonCanColor, Annotation[] row_annotations, + public void drawPseudoNode(Graphics g, Color nonCanColor, Annotation[] row_annotations, int lastSSX, int x, int y, int iconOffset, int startRes, int column, boolean validRes, boolean validEnd) { @@ -155,7 +155,7 @@ public class AnnotationRenderer int sCol = (lastSSX / charWidth) + startRes; int x1 = lastSSX; int x2 = (x * charWidth); - Regex closeparen = new Regex("}|]|<|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z"); + Regex closeparen = new Regex("}|]|<|[a-z]"); String dc = (column == 0 || row_annotations[column - 1] == null) ? "" : row_annotations[column - 1].displayCharacter; @@ -318,7 +318,7 @@ public class AnnotationRenderer updateFromAwtRenderPanel(annotPanel, av); fm = g.getFontMetrics(); AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation(); - + int temp = 0; int x = 0, y = 0; int column = 0; char lastSS; @@ -563,267 +563,50 @@ public class AnnotationRenderer } } - if (ss == 'A') + if (ss >=65) { + // System.out.println("ss="+ss); // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('a') > -1) + if (row_annotations[column].displayCharacter.indexOf(ss+32) > -1) { - ss = 'a'; + + ss = (char) (ss+32); } } + - if (ss == 'B') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('b') > -1) - { - ss = 'b'; - - } - } - - if (ss == 'C') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('c') > -1) - { - ss = 'c'; - - } - } - if (ss == 'D') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('d') > -1) - { - ss = 'd'; - - } - } - if (ss == '1') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('e') > -1) - { - ss = 'e'; - - } - } - if (ss == 'F') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('f') > -1) - { - ss = 'f'; - - } - } - if (ss == 'G') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('g') > -1) - { - ss = 'g'; - - } - } - if (ss == '2') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('h') > -1) - { - ss = 'h'; - - } - } - if (ss == 'I') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('i') > -1) - { - ss = 'i'; - - } - } - if (ss == 'J') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('j') > -1) - { - ss = 'j'; - - } - } - if (ss == 'K') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('k') > -1) - { - ss = 'k'; - - } - } - if (ss == 'L') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('l') > -1) - { - ss = 'l'; - - } - } - if (ss == 'M') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('m') > -1) - { - ss = 'm'; - - } - } - if (ss == 'N') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('n') > -1) - { - ss = 'n'; - - } - } - if (ss == 'O') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('o') > -1) - { - ss = 'o'; - - } - } - if (ss == 'P') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('p') > -1) - { - ss = 'p'; - - } - } - if (ss == 'Q') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('q') > -1) - { - ss = 'q'; - - } - } - if (ss == 'R') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('r') > -1) - { - ss = 'r'; - - } - } - if (ss == 'S') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('s') > -1) - { - ss = 's'; - - } - } - if (ss == 'T') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('t') > -1) - { - ss = 't'; - - } - } - if (ss == 'U') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('u') > -1) - { - ss = 'u'; - - } - } - if (ss == 'V') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('v') > -1) - { - ss = 'v'; - - } - } - if (ss == 'W') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('w') > -1) - { - ss = 'w'; - - } - } - if (ss == 'X') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('x') > -1) - { - ss = 'x'; - - } - } - if (ss == 'Y') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('y') > -1) - { - ss = 'y'; - - } - } - if (ss == 'Z') - { - // distinguish between forward/backward base-pairing - if (row_annotations[column].displayCharacter.indexOf('z') > -1) - { - ss = 'z'; - - } - } if (!validRes || (ss != lastSS)) { + + if (x > -1) { + + + int nb_annot=x-temp; + //System.out.println("\t type :"+lastSS+"\t x :"+x+"\t nbre annot :"+nb_annot); switch (lastSS) { - case 'H': - drawHelixAnnot(g, row_annotations, lastSSX, x, y, - iconOffset, startRes, column, validRes, validEnd); + + case '$': + drawHelixAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes, + column, validRes, validEnd); break; - case 'E': - drawSheetAnnot(g, row_annotations, lastSSX, x, y, - iconOffset, startRes, column, validRes, validEnd); + case 'µ': + drawSheetAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes, + column, validRes, validEnd); break; case '(': // Stem case for RNA secondary structure case ')': // and opposite direction + + drawStemAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd); -// case 'S': // Stem case for RNA secondary structure -// case 's': // and opposite direction -// drawStemAnnot(g, row_annotations, lastSSX, x, y, -// iconOffset, startRes, column, validRes, validEnd); + temp=x; break; case '{': case '}': @@ -839,13 +622,13 @@ public class AnnotationRenderer case 'c': case 'D': case 'd': - case '1': + case 'E': case 'e': case 'F': case 'f': case 'G': case 'g': - case '2': + case 'H': case 'h': case 'I': case 'i': @@ -883,16 +666,17 @@ public class AnnotationRenderer case 'y': case 'Z': case 'z': - //System.out.println(lastSS); + Color nonCanColor= getNotCanonicalColor(lastSS); - drawNotCanonicalAnnot(g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, + drawPseudoNode(g, nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd); + temp=x; break; default: g.setColor(Color.gray); g.fillRect(lastSSX, y + 6 + iconOffset, (x * charWidth) - lastSSX, 2); - + temp=x; break; } } @@ -938,19 +722,21 @@ public class AnnotationRenderer { switch (lastSS) { - case 'H': - drawHelixAnnot(g, row_annotations, lastSSX, x, y, iconOffset, - startRes, column, validRes, validEnd); + case '$': + drawHelixAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes, + column, validRes, validEnd); break; - case 'E': - drawSheetAnnot(g, row_annotations, lastSSX, x, y, iconOffset, - startRes, column, validRes, validEnd); + case 'µ': + drawSheetAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes, + column, validRes, validEnd); break; case 's': case 'S': // Stem case for RNA secondary structure - drawStemAnnot(g, row_annotations, lastSSX, x, y, iconOffset, - startRes, column, validRes, validEnd); + + drawStemAnnot(g, row_annotations, lastSSX, x, y, iconOffset, startRes, + column, validRes, validEnd); + break; case '{': case '}': @@ -966,13 +752,13 @@ public class AnnotationRenderer case 'c': case 'D': case 'd': - case '1': + case 'E': case 'e': case 'F': case 'f': case 'G': case 'g': - case '2': + case 'H': case 'h': case 'I': case 'i': @@ -1009,13 +795,16 @@ public class AnnotationRenderer case 'Z': case 'z': //System.out.println(lastSS); + Color nonCanColor = getNotCanonicalColor(lastSS); - drawNotCanonicalAnnot(g,nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, + drawPseudoNode(g,nonCanColor, row_annotations, lastSSX, x, y, iconOffset, startRes, column, validRes, validEnd); + break; + default: - drawGlyphLine(g, row_annotations, lastSSX, x, y, iconOffset, - startRes, column, validRes, validEnd); + drawGlyphLine(g, row_annotations, lastSSX, x, y, iconOffset, startRes, + column, validRes, validEnd); break; } } @@ -1038,6 +827,7 @@ public class AnnotationRenderer { aa[gg].visible = false; } + if (aa[gg].graphMax > groupmax) { groupmax = aa[gg].graphMax; @@ -1052,8 +842,8 @@ public class AnnotationRenderer { if (aa[gg].graphGroup == row.graphGroup) { - drawLineGraph(g, aa[gg], aa[gg].annotations, startRes, - endRes, y, groupmin, groupmax, row.graphHeight); + drawLineGraph(g, aa[gg], aa[gg].annotations, startRes, endRes, y, groupmin, + groupmax, row.graphHeight); } } @@ -1061,14 +851,14 @@ public class AnnotationRenderer } else { - drawLineGraph(g, row, row_annotations, startRes, endRes, y, - row.graphMin, row.graphMax, row.graphHeight); + drawLineGraph(g, row, row_annotations, startRes, endRes, y, row.graphMin, + row.graphMax, row.graphHeight); } } else if (row.graph == AlignmentAnnotation.BAR_GRAPH) { - drawBarGraph(g, row, row_annotations, startRes, endRes, - row.graphMin, row.graphMax, y); + drawBarGraph(g, row, row_annotations, startRes, endRes, row.graphMin, + row.graphMax, y); } } @@ -1095,17 +885,18 @@ public class AnnotationRenderer private Color sdNOTCANONICAL_COLOUR; - public void drawGlyphLine(Graphics g, Annotation[] row, int lastSSX, - int x, int y, int iconOffset, int startRes, int column, - boolean validRes, boolean validEnd) + public void drawGlyphLine(Graphics g, Annotation[] row, + int lastSSX, int x, int y, int iconOffset, int startRes, + int column, boolean validRes, boolean validEnd) { g.setColor(GLYPHLINE_COLOR); g.fillRect(lastSSX, y + 6 + iconOffset, (x * charWidth) - lastSSX, 2); } - public void drawSheetAnnot(Graphics g, Annotation[] row, int lastSSX, - int x, int y, int iconOffset, int startRes, int column, - boolean validRes, boolean validEnd) + public void drawSheetAnnot(Graphics g, Annotation[] row, + + int lastSSX, int x, int y, int iconOffset, int startRes, + int column, boolean validRes, boolean validEnd) { g.setColor(SHEET_COLOUR); @@ -1483,122 +1274,122 @@ public class AnnotationRenderer { case '{': case '}': - return Color.cyan; + return new Color(255,125,5); case '[': case ']': - return Color.green; + return new Color(245,115,10); case '>': case '<': - return Color.magenta; + return new Color(235,135,15); case 'A': case 'a': - return Color.orange; + return new Color(225,105,20); case 'B': case 'b': - return Color.pink; + return new Color(215,145,30); case 'C': case 'c': - return Color.red; + return new Color(205,95,35); case 'D': case 'd': - return Color.yellow; + return new Color(195,155,45); - case '1': + case 'E': case 'e': - return Color.black; + return new Color(185,85,55); case 'F': case 'f': - return Color.darkGray; + return new Color(175,165,65); case 'G': case 'g': - return Color.gray; + return new Color(170,75,75); - case '2': + case 'H': case 'h': - return Color.lightGray; + return new Color(160,175,85); case 'I': case 'i': - return Color.white; + return new Color(150,65,95); case 'J': case 'j': - return Color.cyan; + return new Color(140,185,105); case 'K': case 'k': - return Color.magenta; + return new Color(130,55,110); case 'L': case 'l': - return Color.orange; + return new Color(120,195,120); case 'M': case 'm': - return Color.red; + return new Color(110,45,130); case 'N': case 'n': - return Color.yellow; + return new Color(100,205,140); case 'O': case 'o': - return Color.pink; + return new Color(90,35,150); case 'P': case 'p': - return Color.black; + return new Color(85,215,160); case 'Q': case 'q': - return Color.blue; + return new Color(75,25,170); case 'R': case 'r': - return Color.cyan; + return new Color(65,225,180); case 'S': case 's': - return Color.magenta; + return new Color(55,15,185); case 'T': case 't': - return Color.darkGray; + return new Color(45,235,195); case 'U': case 'u': - return Color.yellow; + return new Color(35,5,205); case 'V': case 'v': - return Color.blue; + return new Color(25,245,215); case 'W': case 'w': - return Color.orange; + return new Color(15,0,225); case 'X': case 'x': - return Color.magenta; + return new Color(10,255,235); case 'Y': case 'y': - return Color.blue; + return new Color(5,150,245); case 'Z': case 'z': - return Color.blue; + return new Color(0,80,255); default : - System.out.println("This is not a interaction"); + System.out.println("This is not a interaction : "+lastss); return null; } diff --git a/src/jalview/schemes/ResidueProperties.java b/src/jalview/schemes/ResidueProperties.java index f0e319e..8ce7072 100755 --- a/src/jalview/schemes/ResidueProperties.java +++ b/src/jalview/schemes/ResidueProperties.java @@ -1357,14 +1357,14 @@ public class ResidueProperties toRNAssState.put("c", "C"); toRNAssState.put("D", "D"); toRNAssState.put("d", "D"); - toRNAssState.put("1", "1"); - toRNAssState.put("e", "1"); + toRNAssState.put("E", "E"); + toRNAssState.put("e", "E"); toRNAssState.put("F", "F"); toRNAssState.put("f", "F"); toRNAssState.put("G", "G"); toRNAssState.put("g", "G"); - toRNAssState.put("2", "2"); - toRNAssState.put("h", "2"); + toRNAssState.put("H", "H"); + toRNAssState.put("h", "H"); toRNAssState.put("I", "I"); toRNAssState.put("i", "I"); toRNAssState.put("J", "J");