mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-28 11:28:11 +08:00
62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
import quantile from "./quantile";
|
|
|
|
/*
|
|
Centroid coordinate calculation
|
|
*/
|
|
|
|
/* Unused - please cleanup
|
|
const calcMeanCentroid = (world, annoName, annoValue, layoutDimNames) => {
|
|
const centroid = { x: 0, y: 0, size: 0 };
|
|
const annoArray = world.obsAnnotations.col(annoName).asArray();
|
|
const layoutXArray = world.obsLayout.col(layoutDimNames[0]).asArray();
|
|
const layoutYArray = world.obsLayout.col(layoutDimNames[1]).asArray();
|
|
|
|
for (let i = 0, len = annoArray.length; i < len; i += 1) {
|
|
if (annoArray[i] === annoValue) {
|
|
centroid.x += layoutXArray[i];
|
|
centroid.y += layoutYArray[i];
|
|
centroid.size += 1;
|
|
}
|
|
}
|
|
|
|
if (centroid[2] !== 0) {
|
|
centroid.x /= centroid.size;
|
|
centroid.y /= centroid.size;
|
|
}
|
|
|
|
return [centroid.x, centroid.y];
|
|
};
|
|
*/
|
|
|
|
const calcMedianCentroid = (world, annoName, annoValue, layoutDimNames) => {
|
|
const centroidX = [];
|
|
const centroidY = [];
|
|
let hasFinite = false;
|
|
|
|
const annoArray = world.obsAnnotations.col(annoName).asArray();
|
|
const layoutXArray = world.obsLayout.col(layoutDimNames[0]).asArray();
|
|
const layoutYArray = world.obsLayout.col(layoutDimNames[1]).asArray();
|
|
|
|
for (let i = 0, len = annoArray.length; i < len; i += 1) {
|
|
if (annoArray[i] === annoValue) {
|
|
hasFinite =
|
|
Number.isFinite(layoutXArray[i]) || Number.isFinite(layoutYArray[i])
|
|
? true
|
|
: hasFinite;
|
|
centroidX.push(layoutXArray[i]);
|
|
centroidY.push(layoutYArray[i]);
|
|
}
|
|
}
|
|
|
|
if (hasFinite) {
|
|
const medianX = quantile([0.5], Float64Array.from(centroidX));
|
|
const medianY = quantile([0.5], Float64Array.from(centroidY));
|
|
|
|
return [medianX, medianY];
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
export default calcMedianCentroid;
|