@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
42 lines (41 loc) • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NumericalTrackDistributionFactory = void 0;
const RcsbDistributionConfig_1 = require("../../../../../RcsbAnnotationConfig/RcsbDistributionConfig");
const lodash_1 = require("lodash");
const Assertions_1 = require("../../../../../RcsbUtils/Helpers/Assertions");
var assertDefined = Assertions_1.Assertions.assertDefined;
class NumericalTrackDistributionFactory {
constructor(distributionConfig) {
this.distributionConfig = distributionConfig !== null && distributionConfig !== void 0 ? distributionConfig : new RcsbDistributionConfig_1.RcsbDistributionConfig();
}
getDistribution(tracks, blockType, numberResidues) {
var _a;
const track = tracks[0];
const numericalCategories = (_a = this.distributionConfig.getTrackConfig(track.getId())) === null || _a === void 0 ? void 0 : _a.numericalCategories;
assertDefined(numericalCategories);
const bucketMap = new Map();
const undefResidues = new Set((0, lodash_1.range)(1, numberResidues + 1));
numericalCategories.categories.forEach(category => {
const label = category.label;
bucketMap.set(label, Object.assign(Object.assign({}, category), { residueSet: new Set() }));
});
track.forEach(ann => {
var _a;
let index = numericalCategories.thresholds.findIndex((x) => { var _a; return x >= ((_a = ann.value) !== null && _a !== void 0 ? _a : Number.MAX_SAFE_INTEGER); });
if (index < 0)
index = numericalCategories.thresholds.length;
const label = numericalCategories.categories[index].label;
(_a = bucketMap.get(label)) === null || _a === void 0 ? void 0 : _a.residueSet.add(ann.begin);
undefResidues.delete(ann.begin);
});
const bc = this.distributionConfig.getBlockConfig(blockType);
assertDefined(bc);
return {
attribute: bc.type,
title: bc.title,
buckets: Array.from(bucketMap.values()).concat(bc.undefTrack && undefResidues.size > 0 ? [Object.assign(Object.assign({}, bc.undefTrack), { residueSet: undefResidues })] : [])
};
}
}
exports.NumericalTrackDistributionFactory = NumericalTrackDistributionFactory;