cell_layer = new deck.ScatterplotLayer({
id: 'cell_layer',
data: data,
getPosition: apply_map_morph,
getFillColor: d => {
var inst_color = [25, 25, 25, 255]
if (select_meta === 'none'){
inst_color = [50, 50, 50, 100]
} else if (select_meta === 'leiden') {
if (selected_leidens.length === 0){
var rgb = d3.color(cat_colors[d[select_meta]])
inst_color = [rgb.r, rgb.g, rgb.b, 255 * cat_opacity]
} else {
// multiple leidens
/////////////////////
if (selected_leidens.includes(d['leiden'])){
var rgb = d3.color(cat_colors[d[select_meta]])
inst_color = [rgb.r, rgb.g, rgb.b, 255 * cat_opacity]
} else {
inst_color = [50, 50, 50, 10]
}
}
} else if (select_meta === 'mean-gene') {
// mean gene expression
////////////////////////////////////////
inst_color = [0, 0, 0, 255]
} else {
// console.log('color by single gene')
// single gene expression
////////////////////////////////////////
if (all_genes.includes(select_meta)){
// console.log('all_genes includes select_meta', select_meta)
// console.log(d.name)
// console.log(gex_dict)
// console.log(gex_dict[select_meta])
// console.log(d.name in gex_dict[select_meta])
if (d.name in gex_dict[select_meta]){
// console.log('name in gex_dict')
var inst_expression = gex_dict[select_meta][d.name]
var inst_opacity = opacity_scale(inst_expression)
inst_color = [255, 0, 0, inst_opacity]
} else {
inst_color = [50, 50, 50, 2]
}
}
// else {
// console.log('all genes does not include select_meta')
// console.log(all_genes.includes(select_meta))
// }
}
return inst_color
},
getRadius: cell_radius,
pickable: is_pickable,
highlightColor: d => [50, 50, 50],
radiusMinPixels: cell_min_radius,
opacity: cell_opacity,
updateTriggers: {
getFillColor: [select_meta, selected_leidens, gex_dict], // , mean_gene_data],
getPosition: map_type,
},
transitions: transitions,
onClick: (info, event) => {
console.log(info.object[cat_name])
if (mutable selected_leidens[0] !== info.object[cat_name]){
mutable select_meta = 'leiden'
mutable selected_leidens = [info.object[cat_name]]
d3.select('#meta_dropdown').select('select').node().value = 'none'
} else {
mutable select_meta = 'leiden'
mutable selected_leidens = []
d3.select('#meta_dropdown').select('select').node().value = 'leiden'
}
}
})