UNPKG

@rcsb/rcsb-saguaro-app

Version:
111 lines 6.25 kB
import { __awaiter } from "tslib"; import { Operator } from "../../../../RcsbUtils/Helpers/Operator"; import { range } from "lodash"; import { PlainAlignmentTrackFactory } from "./PlainAlignmentTrackFactory"; import { TrackUtils } from "./Helper/TrackUtils"; import { rcsbRequestCtxManager } from "../../../../RcsbRequest/RcsbRequestContextManager"; import { Assertions } from "../../../../RcsbUtils/Helpers/Assertions"; var assertDefined = Assertions.assertDefined; import { TagDelimiter } from "@rcsb/rcsb-api-tools/lib/RcsbUtils/TagDelimiter"; export class PlainObservedAlignmentTrackFactory { constructor(entityInstanceTranslator) { this.unObservedResidues = new Map(); this.instanceEntityMap = new Map(); this.entityInstanceNumberMap = new Map(); this.alignmentTrackFactory = new PlainAlignmentTrackFactory(entityInstanceTranslator); } getTrack(alignmentRequestContext, targetAlignment) { return __awaiter(this, void 0, void 0, function* () { return this.alignmentTrackFactory.getTrack(alignmentRequestContext, targetAlignment, this.alignedRegionToTrackElementList.bind(this)); }); } prepareFeatures(unObservedRegions) { return __awaiter(this, void 0, void 0, function* () { yield this.collectFeatureEntryProperties(unObservedRegions); this.prepareFeaturesAlignmentMap(unObservedRegions); }); } collectFeatureEntryProperties(unObservedRegions) { return __awaiter(this, void 0, void 0, function* () { const entryIds = Operator.uniqueValues(unObservedRegions.map(uor => { assertDefined(uor.target_id); return uor.target_id.split(TagDelimiter.instance)[0]; })); //TODO define a Translator class for multiple entry entry data const entryProperties = (yield Promise.all(Operator.arrayChunk(entryIds, 100).map(ids => rcsbRequestCtxManager.getEntryProperties(ids)))).flat(); entryProperties.forEach(ep => { ep.entityToInstance.forEach((instanceList, entityId) => { this.entityInstanceNumberMap.set(entityId, instanceList.length); instanceList.forEach(instanceId => { this.instanceEntityMap.set(instanceId, entityId); }); }); }); }); } prepareFeaturesAlignmentMap(unObservedRegions) { const uoInstanceFeatureMap = new Map(); unObservedRegions.forEach(ur => { var _a; if (!ur.target_id) return; const instanceId = ur.target_id; if (!uoInstanceFeatureMap.has(instanceId)) uoInstanceFeatureMap.set(instanceId, new Set()); (_a = ur.features) === null || _a === void 0 ? void 0 : _a.forEach(feature => { var _a; (_a = feature === null || feature === void 0 ? void 0 : feature.feature_positions) === null || _a === void 0 ? void 0 : _a.forEach(fp => { var _a; if ((fp === null || fp === void 0 ? void 0 : fp.beg_seq_id) && (fp === null || fp === void 0 ? void 0 : fp.end_seq_id)) for (let i = fp.beg_seq_id; i <= fp.end_seq_id; i++) { (_a = uoInstanceFeatureMap.get(instanceId)) === null || _a === void 0 ? void 0 : _a.add(i); } }); }); }); const uoEntityFeatureMap = new Map(); uoInstanceFeatureMap.forEach((uoSet, instanceId) => { const entityId = this.instanceEntityMap.get(instanceId); if (!entityId) return; if (!uoEntityFeatureMap.has(entityId)) uoEntityFeatureMap.set(entityId, new Map()); uoSet.forEach(i => { var _a, _b, _c, _d; if ((_a = uoEntityFeatureMap.get(entityId)) === null || _a === void 0 ? void 0 : _a.has(i)) { const v = (_b = uoEntityFeatureMap.get(entityId)) === null || _b === void 0 ? void 0 : _b.get(i); if (v) (_c = uoEntityFeatureMap.get(entityId)) === null || _c === void 0 ? void 0 : _c.set(i, v + 1); } else { (_d = uoEntityFeatureMap.get(entityId)) === null || _d === void 0 ? void 0 : _d.set(i, 1); } }); }); uoEntityFeatureMap.forEach((unObservedMap, entityId) => { this.unObservedResidues.set(entityId, Array.from(unObservedMap.entries()).filter(e => (e[1] == this.entityInstanceNumberMap.get(entityId))).map(e => e[0]).sort((a, b) => a - b)); }); } alignedRegionToTrackElementList(region, alignmentContext) { var _a; if (!this.unObservedResidues.has(alignmentContext.targetId) || ((_a = this.unObservedResidues.get(alignmentContext.targetId)) === null || _a === void 0 ? void 0 : _a.length) == 0) return this.alignmentTrackFactory.alignedRegionToTrackElementList(region, alignmentContext); const unModelledSet = new Set(this.unObservedResidues.get(alignmentContext.targetId)); const delta = region.target_begin - region.query_begin; return range(region.query_begin, region.query_end + 1).map((i) => { assertDefined(alignmentContext.to); return this.alignmentTrackFactory.addAuthorResIds({ begin: i, oriBegin: i + delta, sourceId: alignmentContext.targetId, source: TrackUtils.transformSourceFromTarget(alignmentContext.targetId, alignmentContext.to), provenanceName: TrackUtils.getProvenanceConfigFormTarget(alignmentContext.targetId, alignmentContext.to).name, provenanceColor: TrackUtils.getProvenanceConfigFormTarget(alignmentContext.targetId, alignmentContext.to).color, type: "ALIGNED_BLOCK", title: unModelledSet.has(i) ? "UNMODELED REGION" : "ALIGNED REGION", value: unModelledSet.has(i) ? 0 : 100 }, alignmentContext); }); } } //# sourceMappingURL=PlainObservedAlignmentTrackFactory.js.map