/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ 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. */ package jalview.schemes; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AnnotatedCollectionI; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceI; import jalview.util.ColorUtils; import java.awt.Color; import java.util.Hashtable; import java.util.Map; /** * Looks at the information computed from an RNA Stockholm format file on the * secondary structure of the alignment. Extracts the information on the * positions of the helices present and assigns colors. * * @author Lauren Michelle Lui * @version 2.5 */ public class RNAHelicesColour extends ResidueColourScheme { /** * Stores random colors generated for the number of helices */ public Hashtable helixcolorhash = new Hashtable(); /** * Maps sequence positions to the RNA helix they belong to. Key: position, * Value: helix */ public Hashtable positionsToHelix = new Hashtable(); /** * Number of helices in the RNA secondary structure */ int numHelix = 0; public AlignmentAnnotation annotation; /** * Creates a new RNAHelicesColour object. */ public RNAHelicesColour(AlignmentAnnotation annotation) { super(ResidueProperties.nucleotideIndex); this.annotation = annotation; refresh(); } public RNAHelicesColour(AnnotatedCollectionI alignment) { super(ResidueProperties.nucleotideIndex); alignmentChanged(alignment, null); } @Override public void alignmentChanged(AnnotatedCollectionI alignment, Map hiddenReps) { // This loop will find the first rna structure annotation by which to colour // the sequences. AlignmentAnnotation[] annotations = alignment.getAlignmentAnnotation(); for (int i = 0; i < annotations.length; i++) { // is this a sensible way of determining type of annotation? if (annotations[i].getRNAStruc() != null) { annotation = annotations[i]; break; } } refresh(); } private long lastrefresh = -1; public void refresh() { if (annotation != null && ((annotation._rnasecstr == null || lastrefresh != annotation._rnasecstr .hashCode()) && annotation.isValidStruc())) { annotation.getRNAStruc(); lastrefresh = annotation._rnasecstr.hashCode(); numHelix = 0; positionsToHelix = new Hashtable(); // Figure out number of helices // Length of rnasecstr is the number of pairs of positions that base pair // with each other in the secondary structure for (int x = 0; x < this.annotation._rnasecstr.length; x++) { /* * System.out.println(this.annotation._rnasecstr[x] + " Begin" + * this.annotation._rnasecstr[x].getBegin()); */ // System.out.println(this.annotation._rnasecstr[x].getFeatureGroup()); positionsToHelix.put(this.annotation._rnasecstr[x].getBegin(), this.annotation._rnasecstr[x].getFeatureGroup()); positionsToHelix.put(this.annotation._rnasecstr[x].getEnd(), this.annotation._rnasecstr[x].getFeatureGroup()); if (Integer.parseInt(this.annotation._rnasecstr[x] .getFeatureGroup()) > numHelix) { numHelix = Integer.parseInt(this.annotation._rnasecstr[x] .getFeatureGroup()); } } // Generate random colors and store for (int j = 0; j <= numHelix; j++) { if (!helixcolorhash.containsKey(Integer.toString(j))) { helixcolorhash.put(Integer.toString(j), ColorUtils.generateRandomColor(Color.white)); } } } } /** * Returns default color base on purinepyrimidineIndex in * ResidueProperties (Allows coloring in sequence logo) * * @param c * Character in sequence * * @return color in RGB */ @Override public Color findColour(char c) { return ResidueProperties.purinepyrimidine[ResidueProperties.purinepyrimidineIndex[c]]; // random colors for all positions // jalview.util.ColorUtils.generateRandomColor(Color.white); If you want } /** * Returns color based on helices * * @param c * Character in sequence * @param j * Threshold * * @return Color in RGB */ @Override public Color findColourSeq(char c, int j, SequenceI seq) { refresh(); Color currentColour = Color.white; String currentHelix = null; currentHelix = (String) positionsToHelix.get(j); if (currentHelix != null) { currentColour = (Color) helixcolorhash.get(currentHelix); } // System.out.println(c + " " + j + " helix " + currentHelix + " " + // currentColour); return currentColour; } }