@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
91 lines (90 loc) • 5.75 kB
JavaScript
;
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 = {}));