hra-api
Version:
The Human Reference Atlas (HRA) API deployed to https://apps.humanatlas.io/api/
31 lines (27 loc) • 1.2 kB
JavaScript
import { getCollisions } from '../../v1/operations/collisions.js';
import { select } from '../../shared/utils/sparql.js';
import asWeightedCellSummariesQuery from '../queries/as-weighted-cell-summaries.rq';
function getAnatomicalStructureWeights(collisions) {
return collisions.reduce((asWeights, c) => {
const iri = c.representation_of;
const percent = c.percentage_of_tissue_block;
asWeights[iri] = (asWeights[iri] ?? 0) + percent;
return asWeights;
}, {});
}
function getCellSummaryQuery(asWeights) {
const values = Object.entries(asWeights).reduce((vals, [iri, weight]) => vals + ` (<${iri}> ${weight})`, '');
const asWeightVals = `VALUES (?as ?weight) { ${values} }`;
return asWeightedCellSummariesQuery.replaceAll('#{{AS_WEIGHT_VALUES}}', asWeightVals);
}
export async function getCellSummary(ruiLocation, endpoint = 'https://lod.humanatlas.io/sparql') {
const collisions = await getCollisions(ruiLocation);
if (collisions.length === 0) {
return [];
} else {
const asWeights = getAnatomicalStructureWeights(collisions);
const query = getCellSummaryQuery(asWeights);
const summary = await select(query, endpoint);
return summary;
}
}