|
@@ -4,7 +4,7 @@
|
|
* @author Alexander Rose <alexander.rose@weirdbyte.de>
|
|
* @author Alexander Rose <alexander.rose@weirdbyte.de>
|
|
*/
|
|
*/
|
|
|
|
|
|
-import { Color } from '../../mol-util/color';
|
|
|
|
|
|
+import { Color, ColorMap } from '../../mol-util/color';
|
|
import { StructureElement, Unit, Bond, ElementIndex } from '../../mol-model/structure';
|
|
import { StructureElement, Unit, Bond, ElementIndex } from '../../mol-model/structure';
|
|
import { Location } from '../../mol-model/location';
|
|
import { Location } from '../../mol-model/location';
|
|
import { ColorTheme } from '../color';
|
|
import { ColorTheme } from '../color';
|
|
@@ -13,6 +13,18 @@ import { getElementMoleculeType } from '../../mol-model/structure/util';
|
|
import { ParamDefinition as PD } from '../../mol-util/param-definition';
|
|
import { ParamDefinition as PD } from '../../mol-util/param-definition';
|
|
import { ThemeDataContext } from '../theme';
|
|
import { ThemeDataContext } from '../theme';
|
|
import { TableLegend } from '../../mol-util/legend';
|
|
import { TableLegend } from '../../mol-util/legend';
|
|
|
|
+import { getAdjustedColorMap, getColorMapParams } from '../../mol-util/color/color';
|
|
|
|
+
|
|
|
|
+export const MoleculeTypeColors = ColorMap({
|
|
|
|
+ water: 0x386cb0,
|
|
|
|
+ ion: 0xf0027f,
|
|
|
|
+ protein: 0xbeaed4,
|
|
|
|
+ RNA: 0xfdc086,
|
|
|
|
+ DNA: 0xbf5b17,
|
|
|
|
+ PNA: 0x42A49A,
|
|
|
|
+ saccharide: 0x7fc97f,
|
|
|
|
+});
|
|
|
|
+export type MoleculeTypeColors = typeof MoleculeTypeColors
|
|
|
|
|
|
const DefaultMoleculeTypeColor = Color(0xffff99);
|
|
const DefaultMoleculeTypeColor = Color(0xffff99);
|
|
const Description = 'Assigns a color based on the molecule type of a residue.';
|
|
const Description = 'Assigns a color based on the molecule type of a residue.';
|
|
@@ -20,15 +32,9 @@ const Description = 'Assigns a color based on the molecule type of a residue.';
|
|
export const MoleculeTypeColorThemeParams = {
|
|
export const MoleculeTypeColorThemeParams = {
|
|
saturation: PD.Numeric(0, { min: -6, max: 6, step: 0.1 }),
|
|
saturation: PD.Numeric(0, { min: -6, max: 6, step: 0.1 }),
|
|
lightness: PD.Numeric(0, { min: -6, max: 6, step: 0.1 }),
|
|
lightness: PD.Numeric(0, { min: -6, max: 6, step: 0.1 }),
|
|
- colors: PD.Group({
|
|
|
|
- water: PD.Color(Color(0x386cb0)),
|
|
|
|
- ion: PD.Color(Color(0xf0027f)),
|
|
|
|
- protein: PD.Color(Color(0xbeaed4)),
|
|
|
|
- rna: PD.Color(Color(0xfdc086)),
|
|
|
|
- dna: PD.Color(Color(0xbf5b17)),
|
|
|
|
- pna: PD.Color(Color(0x42A49A)),
|
|
|
|
- saccharide: PD.Color(Color(0x7fc97f)),
|
|
|
|
- lipid: PD.Color(Color(0xcccccc)),
|
|
|
|
|
|
+ colors: PD.MappedStatic('default', {
|
|
|
|
+ 'default': PD.EmptyGroup(),
|
|
|
|
+ 'custom': PD.Group(getColorMapParams(MoleculeTypeColors))
|
|
})
|
|
})
|
|
};
|
|
};
|
|
export type MoleculeTypeColorThemeParams = typeof MoleculeTypeColorThemeParams
|
|
export type MoleculeTypeColorThemeParams = typeof MoleculeTypeColorThemeParams
|
|
@@ -36,32 +42,28 @@ export function getMoleculeTypeColorThemeParams(ctx: ThemeDataContext) {
|
|
return MoleculeTypeColorThemeParams; // TODO return copy
|
|
return MoleculeTypeColorThemeParams; // TODO return copy
|
|
}
|
|
}
|
|
|
|
|
|
-type MoleculeTypeColorThemeProps = PD.Values<MoleculeTypeColorThemeParams>;
|
|
|
|
-export function moleculeTypeColor(props: MoleculeTypeColorThemeProps, unit: Unit, element: ElementIndex): Color {
|
|
|
|
- let c = DefaultMoleculeTypeColor;
|
|
|
|
|
|
+export function moleculeTypeColor(colorMap: MoleculeTypeColors, unit: Unit, element: ElementIndex): Color {
|
|
const moleculeType = getElementMoleculeType(unit, element);
|
|
const moleculeType = getElementMoleculeType(unit, element);
|
|
switch (moleculeType) {
|
|
switch (moleculeType) {
|
|
- case MoleculeType.Water: c = props.colors.water; break;
|
|
|
|
- case MoleculeType.Ion: c = props.colors.ion; break;
|
|
|
|
- case MoleculeType.Protein: c = props.colors.protein; break;
|
|
|
|
- case MoleculeType.RNA: c = props.colors.rna; break;
|
|
|
|
- case MoleculeType.DNA: c = props.colors.dna; break;
|
|
|
|
- case MoleculeType.PNA: c = props.colors.pna; break;
|
|
|
|
- case MoleculeType.Saccharide: c = props.colors.saccharide; break;
|
|
|
|
- case MoleculeType.Lipid: c = props.colors.lipid; break;
|
|
|
|
|
|
+ case MoleculeType.Water: return colorMap.water;
|
|
|
|
+ case MoleculeType.Ion: return colorMap.ion;
|
|
|
|
+ case MoleculeType.Protein: return colorMap.protein;
|
|
|
|
+ case MoleculeType.RNA: return colorMap.RNA;
|
|
|
|
+ case MoleculeType.DNA: return colorMap.DNA;
|
|
|
|
+ case MoleculeType.PNA: return colorMap.PNA;
|
|
|
|
+ case MoleculeType.Saccharide: return colorMap.saccharide;
|
|
}
|
|
}
|
|
- c = Color.saturate(c, props.saturation);
|
|
|
|
- c = Color.darken(c, -props.lightness);
|
|
|
|
- return c;
|
|
|
|
|
|
+ return DefaultMoleculeTypeColor;
|
|
}
|
|
}
|
|
|
|
|
|
export function MoleculeTypeColorTheme(ctx: ThemeDataContext, props: PD.Values<MoleculeTypeColorThemeParams>): ColorTheme<MoleculeTypeColorThemeParams> {
|
|
export function MoleculeTypeColorTheme(ctx: ThemeDataContext, props: PD.Values<MoleculeTypeColorThemeParams>): ColorTheme<MoleculeTypeColorThemeParams> {
|
|
|
|
+ const colorMap = getAdjustedColorMap(props.colors.name === 'default' ? MoleculeTypeColors : props.colors.params, props.saturation, props.lightness);
|
|
|
|
|
|
function color(location: Location): Color {
|
|
function color(location: Location): Color {
|
|
if (StructureElement.Location.is(location)) {
|
|
if (StructureElement.Location.is(location)) {
|
|
- return moleculeTypeColor(props, location.unit, location.element);
|
|
|
|
|
|
+ return moleculeTypeColor(colorMap, location.unit, location.element);
|
|
} else if (Bond.isLocation(location)) {
|
|
} else if (Bond.isLocation(location)) {
|
|
- return moleculeTypeColor(props, location.aUnit, location.aUnit.elements[location.aIndex]);
|
|
|
|
|
|
+ return moleculeTypeColor(colorMap, location.aUnit, location.aUnit.elements[location.aIndex]);
|
|
}
|
|
}
|
|
return DefaultMoleculeTypeColor;
|
|
return DefaultMoleculeTypeColor;
|
|
}
|
|
}
|
|
@@ -72,8 +74,8 @@ export function MoleculeTypeColorTheme(ctx: ThemeDataContext, props: PD.Values<M
|
|
color,
|
|
color,
|
|
props,
|
|
props,
|
|
description: Description,
|
|
description: Description,
|
|
- legend: TableLegend(Object.keys(props.colors).map(name => {
|
|
|
|
- return [name, (props.colors as any)[name] as Color] as [string, Color];
|
|
|
|
|
|
+ legend: TableLegend(Object.keys(colorMap).map(name => {
|
|
|
|
+ return [name, (colorMap as any)[name] as Color] as [string, Color];
|
|
}).concat([['Other/unknown', DefaultMoleculeTypeColor]]))
|
|
}).concat([['Other/unknown', DefaultMoleculeTypeColor]]))
|
|
};
|
|
};
|
|
}
|
|
}
|