molstar
Version:
A comprehensive macromolecular library.
85 lines • 3.96 kB
JavaScript
/**
* Copyright (c) 2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { __awaiter, __generator } from "tslib";
import { MmcifFormat } from '../../mol-model-formats/structure/mmcif';
import { CustomPropertyDescriptor } from '../../mol-model/custom-property';
import { CustomModelProperty } from '../common/custom-model-property';
export { BestDatabaseSequenceMapping };
var BestDatabaseSequenceMapping;
(function (BestDatabaseSequenceMapping) {
var _this = this;
BestDatabaseSequenceMapping.Provider = CustomModelProperty.createProvider({
label: 'Best Database Sequence Mapping',
descriptor: CustomPropertyDescriptor({
name: 'molstar_best_database_sequence_mapping'
}),
type: 'static',
defaultParams: {},
getParams: function () { return ({}); },
isApplicable: function (data) { var _a, _b; return MmcifFormat.is(data.sourceData) && ((_b = (_a = data.sourceData.data.frame.categories) === null || _a === void 0 ? void 0 : _a.atom_site) === null || _b === void 0 ? void 0 : _b.fieldNames.indexOf('db_name')) >= 0; },
obtain: function (ctx, data) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, { value: fromCif(data) }];
});
}); }
});
function getKey(loc) {
var model = loc.unit.model;
var data = BestDatabaseSequenceMapping.Provider.get(model).value;
if (!data)
return '';
var eI = loc.unit.elements[loc.element];
var rI = model.atomicHierarchy.residueAtomSegments.offsets[eI];
return data.accession[rI];
}
BestDatabaseSequenceMapping.getKey = getKey;
function getLabel(loc) {
var model = loc.unit.model;
var data = BestDatabaseSequenceMapping.Provider.get(model).value;
if (!data)
return;
var eI = loc.unit.elements[loc.element];
var rI = model.atomicHierarchy.residueAtomSegments.offsets[eI];
var dbName = data.dbName[rI];
if (!dbName)
return;
return dbName + " " + data.accession[rI] + " " + data.num[rI] + " " + data.residue[rI];
}
BestDatabaseSequenceMapping.getLabel = getLabel;
function fromCif(model) {
if (!MmcifFormat.is(model.sourceData))
return;
var atom_site = model.sourceData.data.frame.categories.atom_site;
var db_name = atom_site.getField('db_name');
var db_acc = atom_site.getField('db_acc');
var db_num = atom_site.getField('db_num');
var db_res = atom_site.getField('db_res');
if (!db_name || !db_acc || !db_num || !db_res)
return;
var atomSourceIndex = model.atomicHierarchy.atomSourceIndex;
var _a = model.atomicHierarchy.residueAtomSegments, count = _a.count, residueOffsets = _a.offsets;
var dbName = new Array(count);
var accession = new Array(count);
var num = new Array(count);
var residue = new Array(count);
for (var i = 0; i < count; i++) {
var row = atomSourceIndex.value(residueOffsets[i]);
if (db_name.valueKind(row) !== 0 /* Present */) {
dbName[row] = '';
accession[row] = '';
num[row] = 0;
residue[row] = '';
continue;
}
dbName[row] = db_name.str(row);
accession[row] = db_acc.str(row);
num[row] = db_num.int(row);
residue[row] = db_res.str(row);
}
return { dbName: dbName, accession: accession, num: num, residue: residue };
}
})(BestDatabaseSequenceMapping || (BestDatabaseSequenceMapping = {}));
//# sourceMappingURL=best-database-mapping.js.map