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 === cluster_name) {
if (selected_clusters.length === 0){
var rgb = d3.color(cat_colors[d[select_meta]])
inst_color = [rgb.r, rgb.g, rgb.b, 255 * cat_opacity]
} else {
if (selected_clusters.includes(d[cluster_name])){
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)){
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]
}
}
}
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_clusters, gex_dict], // , mean_gene_data],
getPosition: map_type,
},
transitions: transitions,
onClick: (info, event) => {
console.log(info.object[cluster_name])
if (mutable selected_clusters[0] !== info.object[cluster_name]){
mutable select_meta = cluster_name
mutable selected_clusters = [info.object[cluster_name]]
d3.select('#meta_dropdown').select('select').node().value = 'none'
} else {
mutable select_meta = cluster_name
mutable selected_clusters = []
d3.select('#meta_dropdown').select('select').node().value = cluster_name
}
}
})