- @Override
- public Color findColour(char c, int j, SequenceI seq)
- {
- Color colour = Color.white;
-
- if (colors != null && symbolIndex != null)
- {
- colour = colors[symbolIndex[c]];
- }
- colour = adjustColour(c, j, colour);
-
- return colour;
- }
-
- /**
- * Adjusts colour by applying thresholding or conservation shading, if in
- * force. That is
- * <ul>
- * <li>if there is a threshold set for colouring, and the residue doesn't
- * match the consensus (or a joint consensus) residue, or the consensus score
- * is not above the threshold, then the colour is set to white</li>
- * <li>if conservation colouring is selected, the colour is faded by an amount
- * depending on the conservation score for the column, and the conservation
- * colour threshold</li>
- * </ul>
- *
- * @param symbol
- * @param column
- * @param colour
- * @return
- */
- protected Color adjustColour(char symbol, int column, Color colour)
- {
- if (!aboveThreshold(symbol, column))
- {
- colour = Color.white;
- }
-
- if (conservationColouring)
- {
- colour = applyConservation(colour, column);
- }
- return colour;
- }
-
- /**
- * Get the percentage threshold for this colour scheme
- *
- * @return Returns the percentage threshold
- */
- @Override
- public int getThreshold()
- {
- return threshold;
- }
-
- /**
- * Sets the percentage consensus threshold value, and whether gaps are ignored
- * in percentage identity calculation
- *
- * @param consensusThreshold
- * @param ignoreGaps
- */
- @Override
- public void setThreshold(int consensusThreshold, boolean ignoreGaps)
- {
- threshold = consensusThreshold;
- this.ignoreGaps = ignoreGaps;
- }
-
- /**
- * Answers true if there is a consensus profile for the specified column, and
- * the given residue matches the consensus (or joint consensus) residue for
- * the column, and the percentage identity for the profile is equal to or
- * greater than the current threshold; else answers false. The percentage
- * calculation depends on whether or not we are ignoring gapped sequences.
- *
- * @param residue
- * @param column
- * (index into consensus profiles)
- *
- * @return
- * @see #setThreshold(int, boolean)
- */
- public boolean aboveThreshold(char residue, int column)
- {
- if (threshold == 0)
- {
- return true;
- }
- if ('a' <= residue && residue <= 'z')
- {
- // TO UPPERCASE !!!
- // Faster than toUpperCase
- residue -= ('a' - 'A');
- }
-
- if (consensus == null)
- {
- return false;
- }
-
- ProfileI profile = consensus.get(column);
-
- /*
- * test whether this is the consensus (or joint consensus) residue
- */
- if (profile != null
- && profile.getModalResidue().contains(String.valueOf(residue)))
- {
- if (profile.getPercentageIdentity(ignoreGaps) >= threshold)
- {
- return true;
- }
- }
-
- return false;
- }
-
- @Override
- public boolean conservationApplied()
- {
- return conservationColouring;
- }
-
- @Override
- public void setConservationApplied(boolean conservationApplied)
- {
- conservationColouring = conservationApplied;
- }
-
- @Override
- public void setConservationInc(int i)
- {
- inc = i;
- }
-
- @Override
- public int getConservationInc()
- {
- return inc;
- }
-