@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
132 lines (131 loc) • 8.11 kB
JavaScript
;
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)));
});
}