package jalview.schemes;
import jalview.analysis.SequenceIdMatcher;
import jalview.datamodel.AlignmentAnnotation;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.AnnotatedCollectionI;
import jalview.datamodel.Annotation;
import jalview.datamodel.SequenceI;
import jalview.io.TCoffeeScoreFile;
import java.awt.Color;
import java.util.ArrayList;
import java.util.IdentityHashMap;
import java.util.TreeMap;
/**
* Defines the color score for T-Coffee MSA
*
* See http://tcoffee.org
*
*
* @author Paolo Di Tommaso
*
*/
public class TCoffeeColourScheme extends ResidueColourScheme {
static final Color[] colors = {
new Color( 102, 102, 255 ), // #6666FF
new Color( 0, 255, 0), // #00FF00
new Color( 102, 255, 0), // #66FF00
new Color( 204, 255, 0), // #CCFF00
new Color( 255, 255, 0), // #FFFF00
new Color( 255, 204, 0), // #FFCC00
new Color( 255, 153, 0), // #FF9900
new Color( 255, 102, 0), // #FF6600
new Color( 255, 51, 0), // #FF3300
new Color( 255, 34, 0) // #FF2000
};
IdentityHashMap seqMap;
/**
* the color scheme needs to look at the alignment to get and cache T-COFFEE scores
*
* @param alignment - annotated sequences to be searched
*/
public TCoffeeColourScheme(AnnotatedCollectionI alignment) {
alignmentChanged(alignment);
}
@Override public void alignmentChanged(AnnotatedCollectionI alignment)
{
// assume only one set of TCOFFEE scores - but could have more than one potentially.
ArrayList annots = new ArrayList();
// Search alignment to get all tcoffee annotation and pick one set of annotation to use to colour seqs.
seqMap = new IdentityHashMap();
for (AlignmentAnnotation al:alignment.getAlignmentAnnotation())
{
if (al.sequenceRef!=null && !al.belowAlignment && al.label!=null && (al.label==TCoffeeScoreFile.TCOFFEE_SCORE || al.label.equals(TCoffeeScoreFile.TCOFFEE_SCORE)))
{
annots.add(al);
Color[] scores=new Color[al.annotations.length];
int i=0;
for (Annotation an:al.annotations)
{
scores[i++]=(an!=null) ? an.colour : Color.white;
}
seqMap.put(al.sequenceRef, scores);
}
}
}
@Override
public Color findColour(char c, int j, SequenceI seq) {
Color[] cols;
if( seqMap==null || (cols=seqMap.get(seq))==null) {
return Color.white;
}
if( j < 0 || j>= cols.length ) {
return Color.white;
}
return cols[j];
}
}