UNPKG

@rcsb/rcsb-saguaro-app

Version:
42 lines (41 loc) 2.32 kB
"use strict"; 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;