5454import SequenceLogo from ' ./SequenceLogo.vue' ;
5555import { debounce } from ' ./Utilities.js' ;
5656
57- const colorsAa = {
58- " A" : " #80A0F0FF" ,
59- " R" : " #F01505FF" ,
60- " N" : " #00FF00FF" ,
61- " D" : " #C048C0FF" ,
62- " C" : " #F08080FF" ,
63- " Q" : " #00FF00FF" ,
64- " E" : " #C048C0FF" ,
65- " G" : " #F09048FF" ,
66- " H" : " #15A4A4FF" ,
67- " I" : " #80A0F0FF" ,
68- " L" : " #80A0F0FF" ,
69- " K" : " #F01505FF" ,
70- " M" : " #80A0F0FF" ,
71- " F" : " #80A0F0FF" ,
72- " P" : " #FFD700FF" ,
73- " S" : " #00FF00FF" ,
74- " T" : " #00FF00FF" ,
75- " W" : " #80A0F0FF" ,
76- " Y" : " #15A4A4FF" ,
77- " V" : " #80A0F0FF" ,
78- " B" : " #FFFFFFFF" ,
79- " X" : " #FFFFFFFF" ,
80- " Z" : " #FFFFFFFF" ,
81- " -" : " #ffffff"
82- }
83-
84- const colors3di = {
85- " A" : " #df9a8c" ,
86- " C" : " #fb72c5" ,
87- " D" : " #b4a3d8" ,
88- " E" : " #ff5701" ,
89- " F" : " #d99e81" ,
90- " G" : " #7491c5" ,
91- " H" : " #94abe1" ,
92- " I" : " #609d7b" ,
93- " K" : " #d7a304" ,
94- " L" : " #fe4c8b" ,
95- " M" : " #12a564" ,
96- " N" : " #d570fd" ,
97- " P" : " #cb99c4" ,
98- " Q" : " #da8e99" ,
99- " R" : " #9487d0" ,
100- " S" : " #e842fe" ,
101- " T" : " #42a299" ,
102- " V" : " #fb7edd" ,
103- " W" : " #d1a368" ,
104- " Y" : " #17a8fd" ,
105- " X" : " #c0c0c0" ,
106- " -" : " #ffffff"
107- }
57+ const colorsAaByPalette = {
58+ " 3di" : {
59+ A : " #3563D4" , R : " #91D435" , N : " #D435C0" , D : " #35D4B9" , C : " #D48B35" ,
60+ Q : " #5C35D4" , E : " #3BD435" , G : " #D4356A" , H : " #3598D4" , I : " #C7D435" ,
61+ L : " #B235D4" , K : " #35D484" , M : " #D45535" , F : " #3542D4" , P : " #71D435" ,
62+ S : " #D4359F" , T : " #35CDD4" , W : " #D4AC35" , Y : " #7D35D4" , V : " #35D44F" ,
63+ B : " #D43549" , X : " #3577D4" , Z : " #A6D435" , " -" : " #D335D4"
64+ },
65+ clustal: {
66+ A : " #FFA500" , R : " #FF0000" , N : " #FFFFFF" , D : " #FF0000" , C : " #008000" ,
67+ Q : " #FFFFFF" , E : " #FF0000" , G : " #FFA500" , H : " #FF0000" , I : " #008000" ,
68+ L : " #008000" , K : " #FF0000" , M : " #008000" , F : " #2555D9" , P : " #FFA500" ,
69+ S : " #FFA500" , T : " #FFA500" , W : " #2555D9" , Y : " #2555D9" , V : " #008000" ,
70+ B : " #FFFFFF" , X : " #FFFFFF" , Z : " #FFFFFF" , " -" : " #ffffff"
71+ },
72+ clustal2: {
73+ A : " #80A0F0" , R : " #F01505" , N : " #00FF00" , D : " #C048C0" , C : " #F08080" ,
74+ Q : " #00FF00" , E : " #C048C0" , G : " #F09048" , H : " #15A4A4" , I : " #80A0F0" ,
75+ L : " #80A0F0" , K : " #F01505" , M : " #80A0F0" , F : " #80A0F0" , P : " #FFD700" ,
76+ S : " #00FF00" , T : " #00FF00" , W : " #80A0F0" , Y : " #15A4A4" , V : " #80A0F0" ,
77+ B : " #FFFFFF" , X : " #FFFFFF" , Z : " #FFFFFF" , " -" : " #ffffff" ,
78+ },
79+ buried: {
80+ A : " #00A35C" , R : " #00FC03" , N : " #00EB14" , D : " #00EB14" , C : " #2555D9" ,
81+ Q : " #00F10E" , E : " #00F10E" , G : " #009D62" , H : " #00D52A" , I : " #0054AB" ,
82+ L : " #007B84" , K : " #00FF00" , M : " #009768" , F : " #008778" , P : " #00E01F" ,
83+ S : " #00D52A" , T : " #00DB24" , W : " #00A857" , Y : " #00E619" , V : " #005FA0" ,
84+ B : " #00EB14" , X : " #00B649" , Z : " #00F10E" , " -" : " #ffffff" ,
85+ },
86+ cinema: {
87+ A : " #BBBBBB" , R : " #00FFFF" , N : " #008000" , D : " #FF0000" , C : " #FFD700" ,
88+ Q : " #008000" , E : " #FF0000" , G : " #A52A2A" , H : " #00FFFF" , I : " #BBBBBB" ,
89+ L : " #BBBBBB" , K : " #00FFFF" , M : " #BBBBBB" , F : " #FF00FF" , P : " #A52A2A" ,
90+ S : " #008000" , T : " #008000" , W : " #FF00FF" , Y : " #FF00FF" , V : " #BBBBBB" ,
91+ B : " #808080" , X : " #808080" , Z : " #808080" , " -" : " #ffffff" ,
92+ },
93+ clustal: {
94+ A : " #FFA500" , R : " #FF0000" , N : " #FFFFFF" , D : " #FF0000" , C : " #008000" ,
95+ Q : " #FFFFFF" , E : " #FF0000" , G : " #FFA500" , H : " #FF0000" , I : " #008000" ,
96+ L : " #008000" , K : " #FF0000" , M : " #008000" , F : " #2555D9" , P : " #FFA500" ,
97+ S : " #FFA500" , T : " #FFA500" , W : " #2555D9" , Y : " #2555D9" , V : " #008000" ,
98+ B : " #FFFFFF" , X : " #FFFFFF" , Z : " #FFFFFF" , " -" : " #ffffff" ,
99+ },
100+ helix: {
101+ A : " #E718E7" , R : " #6F906F" , N : " #1BE41B" , D : " #778877" , C : " #23DC23" ,
102+ Q : " #926D92" , E : " #FF00FF" , G : " #00FF00" , H : " #758A75" , I : " #8A758A" ,
103+ L : " #AE51AE" , K : " #A05FA0" , M : " #EF10EF" , F : " #986798" , P : " #00FF00" ,
104+ S : " #36C936" , T : " #47B847" , W : " #8A758A" , Y : " #21DE21" , V : " #857A85" ,
105+ B : " #49B649" , X : " #758A75" , Z : " #C936C9" , " -" : " #ffffff" ,
106+ },
107+ hydrophobicity: {
108+ A : " #AD0052" , R : " #2555D9" , N : " #0C00F3" , D : " #0C00F3" , C : " #C2003D" ,
109+ Q : " #0C00F3" , E : " #0C00F3" , G : " #6A0095" , H : " #1500EA" , I : " #FF0000" ,
110+ L : " #EA0015" , K : " #2555D9" , M : " #B0004F" , F : " #CB0034" , P : " #4600B9" ,
111+ S : " #5E00A1" , T : " #61009E" , W : " #5B00A4" , Y : " #4F00B0" , V : " #F60009" ,
112+ B : " #0C00F3" , X : " #680097" , Z : " #0C00F3" , " -" : " #ffffff" ,
113+ },
114+ lesk: {
115+ A : " #FFA500" , R : " #FF0000" , N : " #FF00FF" , D : " #FF0000" , C : " #008000" ,
116+ Q : " #FF00FF" , E : " #FF0000" , G : " #FFA500" , H : " #FF00FF" , I : " #008000" ,
117+ L : " #008000" , K : " #FF0000" , M : " #008000" , F : " #008000" , P : " #008000" ,
118+ S : " #FFA500" , T : " #FFA500" , W : " #008000" , Y : " #008000" , V : " #008000" ,
119+ B : " #FFFFFF" , X : " #FFFFFF" , Z : " #FFFFFF" , " -" : " #ffffff" ,
120+ },
121+ mae: {
122+ A : " #77DD88" , R : " #FFCC77" , N : " #55BB33" , D : " #55BB33" , C : " #99EE66" ,
123+ Q : " #55BB33" , E : " #55BB33" , G : " #77DD88" , H : " #5555FF" , I : " #66BBFF" ,
124+ L : " #66BBFF" , K : " #FFCC77" , M : " #66BBFF" , F : " #9999FF" , P : " #EEAAAA" ,
125+ S : " #FF4455" , T : " #FF4455" , W : " #9999FF" , Y : " #9999FF" , V : " #66BBFF" ,
126+ B : " #FFFFFF" , X : " #FFFFFF" , Z : " #FFFFFF" , " -" : " #ffffff" ,
127+ },
128+ strand: {
129+ A : " #5858A7" , R : " #6B6B94" , N : " #64649B" , D : " #2121DE" , C : " #9D9D62" ,
130+ Q : " #8C8C73" , E : " #2555D9" , G : " #4949B6" , H : " #60609F" , I : " #ECEC13" ,
131+ L : " #B2B24D" , K : " #4747B8" , M : " #82827D" , F : " #C2C23D" , P : " #2323DC" ,
132+ S : " #4949B6" , T : " #9D9D62" , W : " #C0C03F" , Y : " #D3D32C" , V : " #FFD700" ,
133+ B : " #4343BC" , X : " #797986" , Z : " #4747B8" , " -" : " #ffffff" ,
134+ },
135+ taylor: {
136+ A : " #CCFF00" , R : " #2555d9" , N : " #CC00FF" , D : " #FF0000" , C : " #FFD700" ,
137+ Q : " #FF00CC" , E : " #FF0066" , G : " #FF9900" , H : " #7d98e8" , I : " #66FF00" ,
138+ L : " #33FF00" , K : " #6600FF" , M : " #00FF00" , F : " #00FF66" , P : " #FFCC00" ,
139+ S : " #FF3300" , T : " #FF6600" , W : " #00CCFF" , Y : " #00FFCC" , V : " #99FF00" ,
140+ B : " #FFFFFF" , X : " #FFFFFF" , Z : " #FFFFFF" , " -" : " #ffffff" ,
141+ },
142+ turn: {
143+ A : " #2CD3D3" , R : " #708F8F" , N : " #FF0000" , D : " #E81717" , C : " #A85757" ,
144+ Q : " #3FC0C0" , E : " #778888" , G : " #FF0000" , H : " #708F8F" , I : " #00FFFF" ,
145+ L : " #1CE3E3" , K : " #7E8181" , M : " #1EE1E1" , F : " #1EE1E1" , P : " #F60909" ,
146+ S : " #E11E1E" , T : " #738C8C" , W : " #738C8C" , Y : " #9D6262" , V : " #07F8F8" ,
147+ B : " #F30C0C" , X : " #7C8383" , Z : " #5BA4A4" , " -" : " #ffffff" ,
148+ },
149+ zappo: {
150+ A : " #FFAFAF" , R : " #6464FF" , N : " #00FF00" , D : " #FF0000" , C : " #FFD700" ,
151+ Q : " #00FF00" , E : " #FF0000" , G : " #FF00FF" , H : " #6464FF" , I : " #FFAFAF" ,
152+ L : " #FFAFAF" , K : " #6464FF" , M : " #FFAFAF" , F : " #FFC800" , P : " #FF00FF" ,
153+ S : " #00FF00" , T : " #00FF00" , W : " #FFC800" , Y : " #FFC800" , V : " #FFAFAF" ,
154+ B : " #FFFFFF" , X : " #FFFFFF" , Z : " #FFFFFF" , " -" : " #ffffff" ,
155+ },
156+ };
108157
109158export default {
110159 components: { SequenceLogo, SequenceLogo },
@@ -297,7 +346,7 @@ export default {
297346 result .seqStart ++ ;
298347 }
299348 if (makeGradients) {
300- result .css = this .generateCSSGradient (start, end, result .ss );
349+ result .css = this .generateCSSGradient (start, end, result .aa , result . ss );
301350 }
302351 return result;
303352 },
@@ -308,22 +357,26 @@ export default {
308357 let gaps = sequence .split (' -' ).length - 1 ;
309358 return start + this .lineLen - gaps;
310359 },
311- generateCSSGradient (start , end , sequence ) {
360+ generateCSSGradient (start , end , aaSequence , ssSequence ) {
312361 if (! this .scores ) {
313362 return null ;
314363 }
315364 let colors = [];
316- if (this .colorScheme === ' 3di' ) {
317- for (const residue of sequence) {
318- colors .push (colors3di[residue]);
365+ const palette = colorsAaByPalette[this .colorScheme ];
366+ if (palette) {
367+ const paletteSequence = (this .colorScheme === " 3di" && ssSequence) ? ssSequence : aaSequence;
368+ const fallbackColor = palette .X || " #ffffff" ;
369+ for (const residue of paletteSequence) {
370+ const key = residue ? residue .toUpperCase () : residue;
371+ colors .push (palette[key] || fallbackColor);
319372 }
320373 } else {
321374 colors = this .scores
322375 .slice (start, end)
323376 .map (score => this .percentageToColor (parseFloat (score)));
324377 }
325- for (let i = 0 ; i < sequence .length ; i++ ) {
326- if (sequence [i] === ' -' ) {
378+ for (let i = 0 ; i < aaSequence .length ; i++ ) {
379+ if (aaSequence [i] === ' -' ) {
327380 colors[i] = this .$vuetify .theme .dark ? " rgba(100, 100, 100, 0.4)" : " rgba(0, 0, 0, 0)" ;
328381 }
329382 }
@@ -630,4 +683,4 @@ export default {
630683.theme -- dark .column - box .active - column:: before {
631684 opacity: 1 ;
632685}
633- < / style>
686+ < / style>
0 commit comments