UNPKG

@rcsb/rcsb-saguaro-app

Version:
132 lines (131 loc) 8.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RcsbFvInterface = void 0; exports.interfaceAnnotations = interfaceAnnotations; exports.filter = filter; const tslib_1 = require("tslib"); const GqlTypes_1 = require("@rcsb/rcsb-api-tools/lib/RcsbGraphQL/Types/Borrego/GqlTypes"); const RcsbFvAbstractModule_1 = require("./RcsbFvAbstractModule"); const acm = tslib_1.__importStar(require("../../RcsbAnnotationConfig/RcsbAnnotationConfig.ac.json")); const BuriedResidues_1 = require("../../RcsbUtils/TrackGenerators/BuriedResidues"); const BurialFraction_1 = require("../../RcsbUtils/TrackGenerators/BurialFraction"); const FeatureType_1 = require("../../RcsbExport/FeatureType"); const RcsbRequestContextManager_1 = require("../../RcsbRequest/RcsbRequestContextManager"); const SequenceTrackFactory_1 = require("../RcsbFvFactories/RcsbFvTrackFactory/TrackFactoryImpl/SequenceTrackFactory"); const InstanceSequenceTrackTitleFactory_1 = require("../RcsbFvFactories/RcsbFvTrackFactory/TrackTitleFactoryImpl/InstanceSequenceTrackTitleFactory"); const Assertions_1 = require("../../RcsbUtils/Helpers/Assertions"); var assertDefined = Assertions_1.Assertions.assertDefined; const TagDelimiter_1 = require("@rcsb/rcsb-api-tools/lib/RcsbUtils/TagDelimiter"); const annotationConfigMap = acm; class RcsbFvInterface extends RcsbFvAbstractModule_1.RcsbFvAbstractModule { protectedBuild() { return tslib_1.__awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e; const buildConfig = this.buildConfig; const instanceId = buildConfig.instanceId; assertDefined(instanceId); this.instanceId = instanceId; const source = [GqlTypes_1.AnnotationReference.PdbEntity, GqlTypes_1.AnnotationReference.PdbInstance, GqlTypes_1.AnnotationReference.Uniprot, GqlTypes_1.AnnotationReference.PdbInterface]; const alignmentRequestContext = { queryId: instanceId, from: GqlTypes_1.SequenceReference.PdbInstance, to: GqlTypes_1.SequenceReference.Uniprot, externalTrackBuilder: (_a = buildConfig.additionalConfig) === null || _a === void 0 ? void 0 : _a.externalTrackBuilder }; const alignmentResponse = yield this.alignmentCollector.collect(alignmentRequestContext, (_b = buildConfig.additionalConfig) === null || _b === void 0 ? void 0 : _b.alignmentFilter); yield this.buildAlignmentTracks(alignmentRequestContext, alignmentResponse, { sequenceTrackFactory: new SequenceTrackFactory_1.SequenceTrackFactory(this.getPolymerEntityInstanceTranslator(), new InstanceSequenceTrackTitleFactory_1.InstanceSequenceTrackTitleFactory(this.getPolymerEntityInstanceTranslator())) }); const annotationsRequestContext = { queryId: instanceId, reference: GqlTypes_1.SequenceReference.PdbInstance, titleSuffix: this.titleSuffix((_c = buildConfig === null || buildConfig === void 0 ? void 0 : buildConfig.additionalConfig) === null || _c === void 0 ? void 0 : _c.rcsbContext).bind(this), trackTitle: this.trackTitle.bind(this), typeSuffix: this.typeSuffix.bind(this), sources: source, annotationGenerator: interfaceAnnotations, annotationFilter: filter, rcsbContext: (_d = buildConfig.additionalConfig) === null || _d === void 0 ? void 0 : _d.rcsbContext, externalTrackBuilder: (_e = buildConfig.additionalConfig) === null || _e === void 0 ? void 0 : _e.externalTrackBuilder }; const annotationsFeatures = yield this.annotationCollector.collect(annotationsRequestContext); yield this.buildAnnotationsTrack(annotationsRequestContext, annotationsFeatures, annotationConfigMap); this.boardConfigData.length = yield this.alignmentCollector.getAlignmentLength(); this.boardConfigData.includeAxis = true; return void 0; }); } concatAlignmentAndAnnotationTracks() { var _a; const buildConfig = this.buildConfig; this.rowConfigData = !((_a = buildConfig.additionalConfig) === null || _a === void 0 ? void 0 : _a.hideAlignments) ? [this.referenceTrack].concat(this.alignmentTracks).concat(this.annotationTracks) : this.alignmentTracks.concat(this.annotationTracks); } typeSuffix(ann, d) { return tslib_1.__awaiter(this, void 0, void 0, function* () { var _a; if (ann.source === GqlTypes_1.AnnotationReference.PdbInterface && ((_a = ann.target_identifiers) === null || _a === void 0 ? void 0 : _a.interface_id)) { return ann.target_identifiers.interface_id + "|" + ann.target_identifiers.interface_partner_index; } }); } titleSuffix(rcsbContext) { return ((ann, d) => tslib_1.__awaiter(this, void 0, void 0, function* () { var _a; if (ann.source === GqlTypes_1.AnnotationReference.PdbInterface) { if (!ann.target_id || !ann.target_identifiers) return ""; const interfaceTranslate = yield RcsbRequestContextManager_1.rcsbRequestCtxManager.getInterfaceToInstance(ann.target_id); const chain = this.instanceId.split(TagDelimiter_1.TagDelimiter.instance)[1]; const interfaceId = TagDelimiter_1.TagDelimiter.getInterfaceId(ann.target_identifiers); const chPair = interfaceTranslate.getInstances(interfaceId); if (!chPair) return ""; const asym = chPair[0] == chain ? chPair[1] : chPair[0]; const auth = (yield RcsbRequestContextManager_1.rcsbRequestCtxManager.getEntityToInstance(this.instanceId.split(TagDelimiter_1.TagDelimiter.instance)[0])).translateAsymToAuth(asym); const operators = interfaceTranslate.getOperatorIds(interfaceId); let partnerOperator = ""; const partner_idx = (_a = ann.target_identifiers) === null || _a === void 0 ? void 0 : _a.interface_partner_index; if (operators && typeof partner_idx == "number" && rcsbContext && Array.isArray(rcsbContext.operatorIds)) { const opIndex = operators[partner_idx].map(o => o.join("-")).indexOf(rcsbContext.operatorIds.join("-")); if (opIndex < 0) { console.error(`Operator Id ${rcsbContext.operatorIds.join("-")} not found in [[${operators[0]}],[${operators[1]}]]`); console.error(ann.target_identifiers); } else { partnerOperator = TagDelimiter_1.TagDelimiter.operatorComposition + operators[1 - partner_idx][opIndex].join(TagDelimiter_1.TagDelimiter.operatorComposition); } } return (asym == auth ? asym : `${asym}[auth ${auth}]`) + partnerOperator; } })); } trackTitle(ann, d) { return tslib_1.__awaiter(this, void 0, void 0, function* () { if (ann.source === GqlTypes_1.AnnotationReference.PdbInterface && d.type === FeatureType_1.FeatureType.BurialFraction) { return "BINDING CHAIN "; } }); } } exports.RcsbFvInterface = RcsbFvInterface; function interfaceAnnotations(annotations) { const buried = (0, BuriedResidues_1.buriedResidues)(annotations); const burial = (0, BurialFraction_1.burialFraction)(annotations); return new Promise(resolve => { const out = new Array(); if (buried && buried.length > 0) out.push(...buried); if (burial && burial.length > 0) out.push(...burial); resolve(out); }); } function filter(ann) { return new Promise(resolve => { resolve((0, BurialFraction_1.burialFractionFilter)((0, BuriedResidues_1.buriedResiduesFilter)(ann))); }); }