UNPKG

@rcsb/rcsb-saguaro-app

Version:
91 lines (90 loc) 5.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResidueChartTools = void 0; const tslib_1 = require("tslib"); const AnnotationCollector_1 = require("../../../../RcsbCollectTools/AnnotationCollector/AnnotationCollector"); const GqlTypes_1 = require("@rcsb/rcsb-api-tools/lib/RcsbGraphQL/Types/Borrego/GqlTypes"); const RcsbFvInterface_1 = require("../../../../RcsbFvWeb/RcsbFvModule/RcsbFvInterface"); const rcm = tslib_1.__importStar(require("../../../../RcsbAnnotationConfig/RcsbResidueConfig.ac.json")); const AnnotationBlockManager_1 = require("../../../../RcsbFvWeb/RcsbFvFactories/RcsbFvBlockFactory/BlockManager/AnnotationBlockManager"); const AnnotationTrackManager_1 = require("../../../../RcsbFvWeb/RcsbFvFactories/RcsbFvBlockFactory/BlockManager/AnnotationTrackManager"); const RcsbAnnotationConfig_1 = require("../../../../RcsbAnnotationConfig/RcsbAnnotationConfig"); const TrackBlockFactory_1 = require("../ResidueChartFactories/TrackBlockFactoryImpl/TrackBlockFactory"); const TrackDistributionFactory_1 = require("../ResidueChartFactories/ResidueDistributionFactoryImpl/TrackDistributionFactory"); const DistributionChartFactory_1 = require("../ResidueChartFactories/DistributionChartFactoryImpl/DistributionChartFactory"); const AlignmentCollector_1 = require("../../../../RcsbCollectTools/AlignmentCollector/AlignmentCollector"); const RcsbRequestContextManager_1 = require("../../../../RcsbRequest/RcsbRequestContextManager"); const Helper_1 = require("./Helper"); const Assertions_1 = require("../../../../RcsbUtils/Helpers/Assertions"); var ResidueChartTools; (function (ResidueChartTools) { var assertDefined = Assertions_1.Assertions.assertDefined; function getResidueDistribution(residueChart) { return tslib_1.__awaiter(this, void 0, void 0, function* () { switch (residueChart.granularity) { case "entry": return yield getEntryCharts(residueChart.rcsbId); case "assembly": return []; case "instance": return yield getInstanceCharts(residueChart.rcsbId); case "entity": return []; } }); } ResidueChartTools.getResidueDistribution = getResidueDistribution; function getEntryCharts(entryId) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const instanceIds = (yield RcsbRequestContextManager_1.rcsbRequestCtxManager.getEntryProperties(entryId)).map(e => Array.from(e.entityToInstance.values()).flat()).flat(); let charts = []; for (const id of instanceIds) { charts = charts.concat(yield getInstanceCharts(id)); } return Helper_1.Helper.mergeCharts(charts); }); } function getInstanceCharts(instanceId) { return tslib_1.__awaiter(this, void 0, void 0, function* () { var _a, _b; const alignmentRequestContext = { queryId: instanceId, from: GqlTypes_1.SequenceReference.PdbInstance, to: GqlTypes_1.SequenceReference.PdbInstance }; const alignmentResponse = yield alignmentCollector.collect(alignmentRequestContext); const annotationsRequestContext = { queryId: instanceId, reference: GqlTypes_1.SequenceReference.PdbInstance, sources: [GqlTypes_1.AnnotationReference.PdbEntity, GqlTypes_1.AnnotationReference.PdbInstance, GqlTypes_1.AnnotationReference.Uniprot, GqlTypes_1.AnnotationReference.PdbInterface], annotationGenerator: RcsbFvInterface_1.interfaceAnnotations, annotationFilter: RcsbFvInterface_1.filter }; return yield getCharts(annotationsRequestContext, yield annotationCollector.collect(annotationsRequestContext), (_b = (_a = alignmentResponse.query_sequence) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : -1); }); } function getCharts(annotationRequestContext, annotations, numberResidues) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return processAnnotations({ annotations, annotationBlockManager: new AnnotationBlockManager_1.AnnotationBlockManager(new AnnotationTrackManager_1.AnnotationTrackManagerFactory(), new RcsbAnnotationConfig_1.RcsbAnnotationConfig(rcm)), annotationRequestContext, trackBlockFactory: new TrackBlockFactory_1.TrackBlockFactory(), residueDistributionFactory: new TrackDistributionFactory_1.TrackDistributionFactory(), distributionChartFactory: new DistributionChartFactory_1.DistributionChartFactory(), numberResidues }); }); } function processAnnotations(config) { return tslib_1.__awaiter(this, void 0, void 0, function* () { yield config.annotationBlockManager.setData(config.annotationRequestContext, config.annotations); return config.trackBlockFactory.getTrackBlocks(config.annotationBlockManager.getTracks()).map(block => (config.residueDistributionFactory.getDistribution(block.tracks, block.blockType, config.numberResidues))).map(distribution => { assertDefined(distribution); return config.distributionChartFactory.getChart(distribution); }); }); } const annotationCollector = new AnnotationCollector_1.AnnotationCollector(); const alignmentCollector = new AlignmentCollector_1.AlignmentCollector(); })(ResidueChartTools || (exports.ResidueChartTools = ResidueChartTools = {}));