update author list in license for (JAL-826)
[jalview.git] / src / jalview / schemes / RNAHelicesColour.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
3  * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
10  * 
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 package jalview.schemes;
19
20 import java.awt.*;
21 import java.util.Hashtable;
22
23 import jalview.datamodel.AlignmentAnnotation;
24
25 /**
26  * Looks at the information computed from an RNA Stockholm format file on the
27  * secondary structure of the alignment. Extracts the information on the
28  * positions of the helices present and assigns colors.
29  * 
30  * @author Lauren Michelle Lui
31  * @version 2.5
32  */
33 public class RNAHelicesColour extends ResidueColourScheme
34 {
35
36   /**
37    * Stores random colors generated for the number of helices
38    */
39   public Hashtable helixcolorhash = new Hashtable();
40
41   /**
42    * Maps sequence positions to the RNA helix they belong to. Key: position,
43    * Value: helix
44    */
45   public Hashtable positionsToHelix = new Hashtable();
46
47   /**
48    * Number of helices in the RNA secondary structure
49    */
50   int numHelix = 0;
51
52   public AlignmentAnnotation annotation;
53
54   /**
55    * Creates a new RNAHelicesColour object.
56    */
57   public RNAHelicesColour(AlignmentAnnotation annotation)
58   {
59     this.annotation = annotation;
60
61     // Figure out number of helices
62     // Length of rnasecstr is the number of pairs of positions that base pair
63     // with each other in the secondary structure
64     for (int x = 0; x < this.annotation._rnasecstr.length; x++)
65     {
66
67       /*
68        * System.out.println(this.annotation._rnasecstr[x] + " Begin" +
69        * this.annotation._rnasecstr[x].getBegin());
70        */
71       // System.out.println(this.annotation._rnasecstr[x].getFeatureGroup());
72
73       positionsToHelix.put(this.annotation._rnasecstr[x].getBegin(),
74               this.annotation._rnasecstr[x].getFeatureGroup());
75       positionsToHelix.put(this.annotation._rnasecstr[x].getEnd(),
76               this.annotation._rnasecstr[x].getFeatureGroup());
77
78       if (Integer.parseInt(this.annotation._rnasecstr[x].getFeatureGroup()) > numHelix)
79       {
80         numHelix = Integer.parseInt(this.annotation._rnasecstr[x]
81                 .getFeatureGroup());
82       }
83
84     }
85
86     // Generate random colors and store
87     for (int j = 0; j <= numHelix; j++)
88     {
89       helixcolorhash.put(Integer.toString(j), jalview.util.ColorUtils
90               .generateRandomColor(Color.white));
91     }
92
93   }
94
95   /**
96    * Returns default color base on purinepyrimidineIndex in
97    * jalview.schemes.ResidueProperties (Allows coloring in sequence logo)
98    * 
99    * @param c
100    *          Character in sequence
101    * 
102    * @return color in RGB
103    */
104   public Color findColour(char c)
105   {
106     return ResidueProperties.purinepyrimidine[ResidueProperties.purinepyrimidineIndex[c]];
107     // random colors for all positions
108     // jalview.util.ColorUtils.generateRandomColor(Color.white); If you want
109   }
110
111   /**
112    * Returns color based on helices
113    * 
114    * @param c
115    *          Character in sequence
116    * @param j
117    *          Threshold
118    * 
119    * @return Color in RGB
120    */
121   public Color findColour(char c, int j)
122   {
123     Color currentColour = Color.white;
124     String currentHelix = null;
125     currentHelix = (String) positionsToHelix.get(j);
126
127     if (currentHelix != null)
128     {
129       currentColour = (Color) helixcolorhash.get(currentHelix);
130     }
131
132     // System.out.println(c + " " + j + " helix " + currentHelix + " " +
133     // currentColour);
134     return currentColour;
135   }
136 }