package aliview.gui.pane;
import java.awt.Color;
import java.awt.Font;
import java.util.HashMap;
import java.util.HashSet;
import org.apache.log4j.Logger;
import aliview.AminoAcid;
import aliview.NucleotideUtilities;
import aliview.alignment.Alignment;
import aliview.color.ColorScheme;
import aliview.sequencelist.AlignmentListModel;
public class TranslationCharPixelsContainer {
private static final Logger logger = Logger.getLogger(TranslationCharPixelsContainer.class);
private CharPixelsContainer[] allAAContainers;
public RGBArray getRGBArray(AminoAcid aa, byte residue){
return allAAContainers[aa.intVal].getRGBArray(residue);
}
public static TranslationCharPixelsContainer createDefaultTranslationPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color fgColor = colorScheme.getBaseForegroundColor(baseVal);
Color bgColor = colorScheme.getAminoAcidBackgroundColor(containerAcid);
container.backend[n] = new CharPixels((char)n, width, height, fgColor, bgColor, font, minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createSelectedTranslationPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
// It looks better without the selected color for foreground
Color fgColor = colorScheme.getBaseForegroundColor(baseVal);
Color bgColor = colorScheme.getAminoAcidSelectionBackgroundColor(containerAcid);
container.backend[n] = new CharPixels((char)n, width, height, fgColor, bgColor, font, minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createLetterTranslationPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
Color fgColor = Color.white; //colorScheme.getAminoAcidForgroundColor(containerAcid);
Color bgColor = colorScheme.getAminoAcidBackgroundColor(containerAcid);
container.backend[n] = new CharPixels(containerAcid.getCodeCharVal(), width, height, fgColor, bgColor, font, minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createSelectedLetterTranslationPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
Color fgColor = Color.white; //colorScheme.getAminoAcidForgroundColor(containerAcid);
Color bgColor = colorScheme.getAminoAcidSelectionBackgroundColor(containerAcid);
container.backend[n] = new CharPixels(containerAcid.getCodeCharVal(), width, height, fgColor, bgColor, font, minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
////////////////////////
public static TranslationCharPixelsContainer createDefaultTranslationAndNucPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.WHITE;
Color aaBgColor = colorScheme.getAminoAcidBackgroundColor(containerAcid);
Color nucFgColor = colorScheme.getBaseForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseBackgroundColor(baseVal).brighter();
container.backend[n] = new CharPixelsBothNucAndAA((char)n,containerAcid.getCodeCharVal(), width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createDefaultTranslationAndNucPixelsContainerNoAALetter(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.WHITE;
Color aaBgColor = colorScheme.getAminoAcidBackgroundColor(containerAcid);
Color nucFgColor = colorScheme.getBaseForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseBackgroundColor(baseVal).brighter();
container.backend[n] = new CharPixelsBothNucAndAA((char)n,' ', width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createSelectedTranslationAndNucPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.white;
Color aaBgColor = colorScheme.getAminoAcidSelectionBackgroundColor(containerAcid);
Color nucFgColor = colorScheme.getBaseSelectionForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseSelectionBackgroundColor(baseVal).brighter();
container.backend[n] = new CharPixelsBothNucAndAA((char)n,containerAcid.getCodeCharVal(), width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createSelectedTranslationAndNucPixelsContainerNoAALetter(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.white;
Color aaBgColor = colorScheme.getAminoAcidSelectionBackgroundColor(containerAcid);
Color nucFgColor = colorScheme.getBaseSelectionForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseSelectionBackgroundColor(baseVal).brighter();
container.backend[n] = new CharPixelsBothNucAndAA((char)n,' ', width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createDominantNucTranslationAndNucPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.WHITE;
Color aaBgColor = colorScheme.getAminoAcidBackgroundColor(containerAcid).brighter().brighter();;
Color nucFgColor = colorScheme.getBaseForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseBackgroundColor(baseVal);
container.backend[n] = new CharPixelsBothNucAndAA((char)n, containerAcid.getCodeCharVal(), width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createDominantNucTranslationAndNucPixelsContainerNoAALetter(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.WHITE;
Color aaBgColor = colorScheme.getAminoAcidBackgroundColor(containerAcid).brighter().brighter();
Color nucFgColor = colorScheme.getBaseForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseBackgroundColor(baseVal);
container.backend[n] = new CharPixelsBothNucAndAA((char)n, ' ', width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createSelectedDominantNucTranslationAndNucPixelsContainer(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.white;
Color aaBgColor = colorScheme.getAminoAcidSelectionBackgroundColor(containerAcid).brighter().brighter();;
Color nucFgColor = colorScheme.getBaseSelectionForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseSelectionBackgroundColor(baseVal);
container.backend[n] = new CharPixelsBothNucAndAA((char)n, containerAcid.getCodeCharVal(), width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
public static TranslationCharPixelsContainer createSelectedDominantNucTranslationAndNucPixelsContainerNoAALetter(Font font, int minFontSize, int width, int height, ColorScheme colorScheme, int fontCase) {
TranslationCharPixelsContainer transContainer = new TranslationCharPixelsContainer();
transContainer.allAAContainers = new CharPixelsContainer[AminoAcid.HIGEST_AA_INT_VAL + 1];
for(AminoAcid containerAcid: AminoAcid.GROUP_ALL){
CharPixelsContainer container = new CharPixelsContainer();
for(int n = 0; n < container.backend.length; n++){
int baseVal = NucleotideUtilities.baseValFromBase((byte)n);
Color aaFgColor = Color.white;
Color aaBgColor = colorScheme.getAminoAcidSelectionBackgroundColor(containerAcid).brighter().brighter();
Color nucFgColor = colorScheme.getBaseSelectionForegroundColor(baseVal);
Color nucBgColor = colorScheme.getBaseSelectionBackgroundColor(baseVal);
container.backend[n] = new CharPixelsBothNucAndAA((char)n, ' ', width, height, nucFgColor, nucBgColor, aaFgColor, aaBgColor, font.deriveFont((float)font.getSize()*.67f), minFontSize, fontCase);
}
transContainer.allAAContainers[containerAcid.intVal] = container;
}
return transContainer;
}
}