@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
952 lines • 33.9 kB
JavaScript
import { __awaiter } from "tslib";
import { SequenceReference } from "@rcsb/rcsb-api-tools/lib/RcsbGraphQL/Types/Borrego/GqlTypes";
import { buildDataProviderFv } from "../RcsbFvWeb/RcsbFvBuilder";
import { rcsbRequestCtxManager } from "../RcsbRequest/RcsbRequestContextManager";
import { Assertions } from "../RcsbUtils/Helpers/Assertions";
var assertElementListDefined = Assertions.assertElementListDefined;
import { AlignmentReference } from "../RcsbUtils/PairwiseAlignmentTools/AlignmentReference";
const alignment = {
"info": {
"uuid": "e6e216de-c650-4ad5-bd81-45e75dfbe180",
"status": "COMPLETE"
},
"meta": {
"alignment_mode": "pairwise",
"alignment_method": "fatcat-rigid"
},
"results": [
{
"structures": [
{
"entry_id": "101M",
"selection": {
"asym_id": "A"
}
},
{
"entry_id": "1ASH",
"selection": {
"asym_id": "A"
}
}
],
"structure_alignment": [
{
"regions": [
[
{
"asym_id": "A",
"beg_seq_id": 4,
"beg_index": 0,
"length": 47
},
{
"asym_id": "A",
"beg_seq_id": 52,
"beg_index": 52,
"length": 70
},
{
"asym_id": "A",
"beg_seq_id": 124,
"beg_index": 128,
"length": 22
}
],
[
{
"asym_id": "A",
"beg_seq_id": 1,
"beg_index": 0,
"length": 17
},
{
"asym_id": "A",
"beg_seq_id": 22,
"beg_index": 21,
"length": 61
},
{
"asym_id": "A",
"beg_seq_id": 86,
"beg_index": 86,
"length": 14
},
{
"asym_id": "A",
"beg_seq_id": 101,
"beg_index": 101,
"length": 47
}
]
],
"transformations": [
[
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1
],
[
-0.7671995717115603,
-0.5623954843039239,
0.30840904072376607,
0,
-0.6011420900233072,
0.4627787494512096,
-0.6515090303739346,
0,
0.2236805864799372,
-0.6852351043918645,
-0.6931232552303105,
0,
37.48154540719762,
28.2044983569036,
-7.345065372687518,
1
]
],
"summary": {
"scores": [
{
"value": 1.95,
"type": "RMSD"
},
{
"value": 330.13,
"type": "similarity-score"
}
],
"n_aln_residue_pairs": 139
}
}
],
"sequence_alignment": [
{
"regions": [
{
"asym_id": "A",
"beg_seq_id": 4,
"beg_index": 0,
"length": 17
},
{
"asym_id": "A",
"beg_seq_id": 21,
"beg_index": 21,
"length": 62
},
{
"asym_id": "A",
"beg_seq_id": 83,
"beg_index": 86,
"length": 14
},
{
"asym_id": "A",
"beg_seq_id": 97,
"beg_index": 101,
"length": 49
}
],
"gaps": [
{
"beg_index": 17,
"length": 4
},
{
"beg_index": 83,
"length": 3
},
{
"beg_index": 100,
"length": 1
}
]
},
{
"regions": [
{
"asym_id": "A",
"beg_seq_id": 1,
"beg_index": 0,
"length": 51
},
{
"asym_id": "A",
"beg_seq_id": 52,
"beg_index": 52,
"length": 74
},
{
"asym_id": "A",
"beg_seq_id": 126,
"beg_index": 128,
"length": 22
}
],
"gaps": [
{
"beg_index": 51,
"length": 1
},
{
"beg_index": 126,
"length": 2
}
]
}
],
"summary": {
"scores": [
{
"value": 0.15,
"type": "sequence-identity"
},
{
"value": 1.94,
"type": "RMSD"
},
{
"value": 0.79,
"type": "TM-score"
},
{
"value": 330.13,
"type": "similarity-score"
},
{
"value": 0.34,
"type": "sequence-similarity"
}
],
"n_aln_residue_pairs": 139,
"n_modeled_residues": [
154,
147
],
"seq_aln_len": 150,
"aln_coverage": [
90,
95
]
}
},
{
"structures": [
{
"entry_id": "101M",
"selection": {
"asym_id": "A"
}
},
{
"entry_id": "4HHB",
"selection": {
"asym_id": "A"
}
}
],
"structure_alignment": [
{
"regions": [
[
{
"asym_id": "A",
"beg_seq_id": 2,
"beg_index": 0,
"length": 48
},
{
"asym_id": "A",
"beg_seq_id": 56,
"beg_index": 54,
"length": 93
}
],
[
{
"asym_id": "A",
"beg_seq_id": 1,
"beg_index": 0,
"length": 141
}
]
],
"transformations": [
[
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1
],
[
0.5659010881349978,
0.8158255303919226,
0.11909938038614465,
0,
0.49060456462775587,
-0.21711201635870375,
-0.8439013766543271,
0,
-0.6626183815847819,
0.5359954069890864,
-0.5231116554547112,
0,
16.44633740010974,
7.329736404913569,
7.069768946221407,
1
]
],
"summary": {
"scores": [
{
"value": 1.41,
"type": "RMSD"
},
{
"value": 360.42,
"type": "similarity-score"
}
],
"n_aln_residue_pairs": 141
}
}
],
"sequence_alignment": [
{
"regions": [
{
"asym_id": "A",
"beg_seq_id": 2,
"beg_index": 0,
"length": 147
}
]
},
{
"regions": [
{
"asym_id": "A",
"beg_seq_id": 1,
"beg_index": 0,
"length": 48
},
{
"asym_id": "A",
"beg_seq_id": 49,
"beg_index": 54,
"length": 93
}
],
"gaps": [
{
"beg_index": 48,
"length": 6
}
]
}
],
"summary": {
"scores": [
{
"value": 1.63,
"type": "RMSD"
},
{
"value": 360.42,
"type": "similarity-score"
},
{
"value": 0.26,
"type": "sequence-identity"
},
{
"value": 0.83,
"type": "TM-score"
},
{
"value": 0.4,
"type": "sequence-similarity"
}
],
"n_aln_residue_pairs": 141,
"n_modeled_residues": [
154,
141
],
"seq_aln_len": 147,
"aln_coverage": [
92,
100
]
}
},
{
"structures": [
{
"entry_id": "101M",
"selection": {
"asym_id": "A"
}
},
{
"entry_id": "3IA3",
"selection": {
"asym_id": "A"
}
}
],
"structure_alignment": [
{
"regions": [
[
{
"asym_id": "A",
"beg_seq_id": 6,
"beg_index": 0,
"length": 2
},
{
"asym_id": "A",
"beg_seq_id": 9,
"beg_index": 3,
"length": 10
},
{
"asym_id": "A",
"beg_seq_id": 70,
"beg_index": 64,
"length": 7
},
{
"asym_id": "A",
"beg_seq_id": 90,
"beg_index": 84,
"length": 64
}
],
[
{
"asym_id": "A",
"beg_seq_id": 2,
"beg_index": 0,
"length": 2
},
{
"asym_id": "A",
"beg_seq_id": 5,
"beg_index": 3,
"length": 28
},
{
"asym_id": "A",
"beg_seq_id": 37,
"beg_index": 99,
"length": 23
},
{
"asym_id": "A",
"beg_seq_id": 62,
"beg_index": 124,
"length": 30
}
]
],
"transformations": [
[
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1
],
[
0.5053504853280419,
-0.8551690322642134,
-0.11535516128462073,
0,
0.8381805444620154,
0.45468307113605794,
0.3011920976845868,
0,
-0.20512011569826996,
-0.248896024633924,
0.946560355739325,
0,
54.00745824109328,
20.631415015987336,
1.2186542597577539,
1
]
],
"summary": {
"scores": [
{
"value": 10.35,
"type": "RMSD"
},
{
"value": 163.43,
"type": "similarity-score"
}
],
"n_aln_residue_pairs": 83
}
}
],
"sequence_alignment": [
{
"regions": [
{
"asym_id": "A",
"beg_seq_id": 6,
"beg_index": 0,
"length": 95
},
{
"asym_id": "A",
"beg_seq_id": 101,
"beg_index": 99,
"length": 23
},
{
"asym_id": "A",
"beg_seq_id": 124,
"beg_index": 124,
"length": 30
}
],
"gaps": [
{
"beg_index": 95,
"length": 4
},
{
"beg_index": 122,
"length": 2
}
]
},
{
"regions": [
{
"asym_id": "A",
"beg_seq_id": 2,
"beg_index": 0,
"length": 13
},
{
"asym_id": "A",
"beg_seq_id": 15,
"beg_index": 64,
"length": 7
},
{
"asym_id": "A",
"beg_seq_id": 22,
"beg_index": 84,
"length": 70
}
],
"gaps": [
{
"beg_index": 13,
"length": 51
},
{
"beg_index": 71,
"length": 13
}
]
}
],
"summary": {
"scores": [
{
"value": 0.38,
"type": "TM-score"
},
{
"value": 4.06,
"type": "RMSD"
},
{
"value": 163.43,
"type": "similarity-score"
},
{
"value": 0.13,
"type": "sequence-identity"
},
{
"value": 0.29,
"type": "sequence-similarity"
}
],
"n_aln_residue_pairs": 83,
"n_modeled_residues": [
154,
90
],
"seq_aln_len": 154,
"aln_coverage": [
54,
92
]
}
},
{
"structures": [
{
"entry_id": "101M",
"selection": {
"asym_id": "A"
}
},
{
"entry_id": "3IA3",
"selection": {
"asym_id": "B"
}
}
],
"structure_alignment": [
{
"regions": [
[
{
"asym_id": "A",
"beg_seq_id": 1,
"beg_index": 0,
"length": 18
},
{
"asym_id": "A",
"beg_seq_id": 22,
"beg_index": 22,
"length": 30
},
{
"asym_id": "A",
"beg_seq_id": 58,
"beg_index": 58,
"length": 85
}
],
[
{
"asym_id": "B",
"beg_seq_id": 6,
"beg_index": 0,
"length": 4
},
{
"asym_id": "B",
"beg_seq_id": 11,
"beg_index": 5,
"length": 129
}
]
],
"transformations": [
[
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1
],
[
-0.42302765123934255,
-0.016759653799444912,
0.9059617653584768,
0,
0.36791779101822186,
0.910522894182729,
0.18863869757125365,
0,
-0.8280604478775673,
0.41311883662407556,
-0.3790101865216464,
0,
80.69972926533072,
-0.278244322992661,
6.001546353485595,
1
]
],
"summary": {
"scores": [
{
"value": 278.41,
"type": "similarity-score"
},
{
"value": 2.79,
"type": "RMSD"
}
],
"n_aln_residue_pairs": 133
}
}
],
"sequence_alignment": [
{
"regions": [
{
"asym_id": "A",
"beg_seq_id": 1,
"beg_index": 0,
"length": 4
},
{
"asym_id": "A",
"beg_seq_id": 5,
"beg_index": 5,
"length": 138
}
],
"gaps": [
{
"beg_index": 4,
"length": 1
}
]
},
{
"regions": [
{
"asym_id": "B",
"beg_seq_id": 6,
"beg_index": 0,
"length": 19
},
{
"asym_id": "B",
"beg_seq_id": 25,
"beg_index": 22,
"length": 30
},
{
"asym_id": "B",
"beg_seq_id": 55,
"beg_index": 58,
"length": 85
}
],
"gaps": [
{
"beg_index": 19,
"length": 3
},
{
"beg_index": 52,
"length": 6
}
]
}
],
"summary": {
"scores": [
{
"value": 278.41,
"type": "similarity-score"
},
{
"value": 0.35,
"type": "sequence-similarity"
},
{
"value": 3.03,
"type": "RMSD"
},
{
"value": 0.66,
"type": "TM-score"
},
{
"value": 0.2,
"type": "sequence-identity"
}
],
"n_aln_residue_pairs": 133,
"n_modeled_residues": [
154,
135
],
"seq_aln_len": 143,
"aln_coverage": [
86,
99
]
}
}
]
};
class RcsbStructuralAlignmentProvider {
constructor(alignment) {
this.alignmentResponse = undefined;
this.alignment = alignment;
}
data() {
return __awaiter(this, void 0, void 0, function* () {
if (this.alignmentResponse)
return this.alignmentResponse;
return new Promise((resolve) => {
alignmentTransform(this.alignment).then(ar => {
this.alignmentResponse = ar;
resolve(ar);
});
});
});
}
collect(requestConfig, filter) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
resolve(yield this.data());
}));
});
}
getTargets() {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
var _a, _b;
resolve((_b = (_a = (yield this.data()).target_alignments) === null || _a === void 0 ? void 0 : _a.map(ta => { var _a; return (_a = ta === null || ta === void 0 ? void 0 : ta.target_id) !== null && _a !== void 0 ? _a : "NA"; })) !== null && _b !== void 0 ? _b : []);
}));
});
}
getAlignmentLength() {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
var _a;
const ends = (_a = (yield this.data()).target_alignments) === null || _a === void 0 ? void 0 : _a.map(ta => { var _a, _b, _c; return (_c = (_a = ta === null || ta === void 0 ? void 0 : ta.aligned_regions) === null || _a === void 0 ? void 0 : _a[((_b = ta === null || ta === void 0 ? void 0 : ta.aligned_regions) === null || _b === void 0 ? void 0 : _b.length) - 1]) === null || _c === void 0 ? void 0 : _c.query_end; });
assertElementListDefined(ends);
resolve(Math.max(...ends));
}));
});
}
getAlignment() {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
resolve(this.data());
}));
});
}
}
function alignmentTransform(alignment) {
return __awaiter(this, void 0, void 0, function* () {
var _a, _b;
const alignmentRef = mergeAlignments(alignment.results);
const out = alignmentRef.buildAlignments();
const instance_ids = (_a = out.target_alignments) === null || _a === void 0 ? void 0 : _a.map(ta => ta === null || ta === void 0 ? void 0 : ta.target_id);
assertElementListDefined(instance_ids);
const seqs = yield rcsbRequestCtxManager.getInstanceSequences(instance_ids);
(_b = out.target_alignments) === null || _b === void 0 ? void 0 : _b.forEach(ta => {
var _a;
const seq = (_a = seqs.find(s => s.rcsbId === (ta === null || ta === void 0 ? void 0 : ta.target_id))) === null || _a === void 0 ? void 0 : _a.sequence;
if (seq && ta)
ta.target_sequence = seq;
});
return out;
});
}
function app() {
return __awaiter(this, void 0, void 0, function* () {
yield buildDataProviderFv("pfv", {
alignments: {
collector: new RcsbStructuralAlignmentProvider(alignment),
context: {
queryId: "structural-alignment",
to: SequenceReference.PdbInstance
}
}
}, {
boardConfig: {
rowTitleWidth: 100
}
});
});
}
app().then(() => {
});
function mergeAlignments(results) {
const result = results[0];
if (!result)
throw "Results not available";
const alignmentRef = new AlignmentReference(getInstanceId(result, 0), getInstanceId(result), transformToGapedDomain(result.sequence_alignment[0].regions), transformToGapedDomain(result.sequence_alignment[1].regions));
results.slice(1).forEach(result => {
alignmentRef.addAlignment(getInstanceId(result), transformToGapedDomain(result.sequence_alignment[0].regions), transformToGapedDomain(result.sequence_alignment[1].regions));
});
return alignmentRef;
}
function getInstanceId(result, index = 1) {
return `${result.structures[index].entry_id}.${result.structures[index].selection.asym_id}`;
}
function transformToGapedDomain(regions) {
const out = [];
let prevRegionEnd = 0;
regions.forEach(region => {
const beg = region.beg_index + 1;
const end = region.beg_index + region.length;
if (beg > (prevRegionEnd + 1)) {
const nGaps = beg - (prevRegionEnd + 1);
out.push(...Array(nGaps).fill(undefined));
}
prevRegionEnd = end;
const seqBeg = region.beg_seq_id;
const seqEnd = region.beg_seq_id + region.length - 1;
for (let i = seqBeg; i <= seqEnd; i++) {
out.push(i);
}
});
return out;
}
//# sourceMappingURL=ExternalDataProvider.js.map