molstar
Version:
A comprehensive macromolecular library.
107 lines • 4.37 kB
JavaScript
/**
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { __assign } from "tslib";
import { Table } from '../../mol-data/db';
import { CifWriter } from '../../mol-io/writer/cif';
import * as S from './schemas';
// import { getCategoryInstanceProvider } from './utils'
export function createMapping(allData) {
var mols = Object.keys(allData);
var enc = CifWriter.createEncoder();
enc.startDataBlock(mols[0]);
if (!mols.length)
return enc.getData();
var data = allData[mols[0]];
var sources = getSources(data);
if (!sources._rowCount)
return enc.getData();
enc.writeCategory({ name: "pdbx_domain_annotation_sources", instance: function () { return CifWriter.Category.ofTable(sources); } });
for (var _i = 0, _a = Object.keys(S.categories); _i < _a.length; _i++) {
var cat = _a[_i];
writeDomain(enc, getDomain(cat, S.categories[cat], data));
}
return enc.getData();
}
function writeDomain(enc, domain) {
if (!domain)
return;
enc.writeCategory({ name: "pdbx_" + domain.name + "_domain_annotation", instance: function () { return CifWriter.Category.ofTable(domain.domains); } });
enc.writeCategory({ name: "pdbx_" + domain.name + "_domain_mapping", instance: function () { return CifWriter.Category.ofTable(domain.mappings); } });
}
function getSources(data) {
var rows = [];
for (var _i = 0, _a = Object.keys(S.categories); _i < _a.length; _i++) {
var name_1 = _a[_i];
if (!data[name_1])
continue;
var row = { id: name_1, count: Object.keys(data[name_1]).length };
if (row.count > 0)
rows.push(row);
}
return Table.ofRows(S.Sources, rows);
}
function getMappings(startId, group_id, mappings) {
var rows = [];
var n = function (v) { return v === null ? void 0 : v; };
for (var _i = 0, mappings_1 = mappings; _i < mappings_1.length; _i++) {
var entry = mappings_1[_i];
if (entry.start && entry.end) {
rows.push({
id: startId++,
group_id: group_id,
label_entity_id: '' + entry.entity_id,
label_asym_id: entry.struct_asym_id,
auth_asym_id: entry.chain_id,
beg_label_seq_id: n(entry.start.residue_number),
beg_auth_seq_id: n(entry.start.author_residue_number),
pdbx_beg_PDB_ins_code: entry.start.author_insertion_code,
end_label_seq_id: n(entry.end.residue_number),
end_auth_seq_id: n(entry.end.author_residue_number),
pdbx_end_PDB_ins_code: entry.end.author_insertion_code
});
}
else {
rows.push({
id: startId++,
group_id: group_id,
label_entity_id: '' + entry.entity_id,
label_asym_id: entry.struct_asym_id,
auth_asym_id: entry.chain_id
});
}
}
return rows;
}
function getDomainInfo(id, mapping_group_id, data, schema) {
var props = Object.create(null);
for (var _i = 0, _a = Object.keys(schema); _i < _a.length; _i++) {
var k = _a[_i];
props[k] = data[k];
}
return __assign({ id: id, mapping_group_id: mapping_group_id, identifier: data.identifier }, props);
}
function getDomain(name, schema, allData) {
if (!allData[name])
return void 0;
var data = allData[name];
var domains = [];
var mappings = [];
var mappingSerialId = 1, mapping_group_id = 1;
for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) {
var id = _a[_i];
var domain = data[id];
domains.push(getDomainInfo(id, mapping_group_id, domain, schema));
mappings.push.apply(mappings, getMappings(mappingSerialId, mapping_group_id, domain.mappings));
mappingSerialId = mappings.length + 1;
mapping_group_id++;
}
return domains.length > 0 ? {
name: name,
domains: Table.ofRows(__assign(__assign({}, S.Base), schema), domains),
mappings: Table.ofRows(S.mapping, mappings)
} : void 0;
}
//# sourceMappingURL=mapping.js.map