@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
88 lines • 5.26 kB
JavaScript
import { __awaiter } from "tslib";
import { AnnotationCollector } from "../../../../RcsbCollectTools/AnnotationCollector/AnnotationCollector";
import { SequenceReference, AnnotationReference } from "@rcsb/rcsb-api-tools/lib/RcsbGraphQL/Types/Borrego/GqlTypes";
import { filter, interfaceAnnotations } from "../../../../RcsbFvWeb/RcsbFvModule/RcsbFvInterface";
import * as rcm from "../../../../RcsbAnnotationConfig/RcsbResidueConfig.ac.json";
import { AnnotationBlockManager } from "../../../../RcsbFvWeb/RcsbFvFactories/RcsbFvBlockFactory/BlockManager/AnnotationBlockManager";
import { AnnotationTrackManagerFactory } from "../../../../RcsbFvWeb/RcsbFvFactories/RcsbFvBlockFactory/BlockManager/AnnotationTrackManager";
import { RcsbAnnotationConfig } from "../../../../RcsbAnnotationConfig/RcsbAnnotationConfig";
import { TrackBlockFactory } from "../ResidueChartFactories/TrackBlockFactoryImpl/TrackBlockFactory";
import { TrackDistributionFactory } from "../ResidueChartFactories/ResidueDistributionFactoryImpl/TrackDistributionFactory";
import { DistributionChartFactory } from "../ResidueChartFactories/DistributionChartFactoryImpl/DistributionChartFactory";
import { AlignmentCollector } from "../../../../RcsbCollectTools/AlignmentCollector/AlignmentCollector";
import { rcsbRequestCtxManager } from "../../../../RcsbRequest/RcsbRequestContextManager";
import { Helper } from "./Helper";
import { Assertions } from "../../../../RcsbUtils/Helpers/Assertions";
export var ResidueChartTools;
(function (ResidueChartTools) {
var assertDefined = Assertions.assertDefined;
function getResidueDistribution(residueChart) {
return __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 __awaiter(this, void 0, void 0, function* () {
const instanceIds = (yield 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.mergeCharts(charts);
});
}
function getInstanceCharts(instanceId) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b;
const alignmentRequestContext = {
queryId: instanceId,
from: SequenceReference.PdbInstance,
to: SequenceReference.PdbInstance
};
const alignmentResponse = yield alignmentCollector.collect(alignmentRequestContext);
const annotationsRequestContext = {
queryId: instanceId,
reference: SequenceReference.PdbInstance,
sources: [AnnotationReference.PdbEntity, AnnotationReference.PdbInstance, AnnotationReference.Uniprot, AnnotationReference.PdbInterface],
annotationGenerator: interfaceAnnotations,
annotationFilter: 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 __awaiter(this, void 0, void 0, function* () {
return processAnnotations({
annotations,
annotationBlockManager: new AnnotationBlockManager(new AnnotationTrackManagerFactory(), new RcsbAnnotationConfig(rcm)),
annotationRequestContext,
trackBlockFactory: new TrackBlockFactory(),
residueDistributionFactory: new TrackDistributionFactory(),
distributionChartFactory: new DistributionChartFactory(),
numberResidues
});
});
}
function processAnnotations(config) {
return __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();
const alignmentCollector = new AlignmentCollector();
})(ResidueChartTools || (ResidueChartTools = {}));
//# sourceMappingURL=ResidueChartTools.js.map