molstar
Version:
A comprehensive macromolecular library.
103 lines • 4.13 kB
JavaScript
/**
* Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { BondType } from '../../../mol-model/structure/model/types';
import { SortedArray } from '../../../mol-data/int';
export function typeSymbol(unit, index) {
return unit.model.atomicHierarchy.atoms.type_symbol.value(unit.elements[index]);
}
export function formalCharge(unit, index) {
return unit.model.atomicHierarchy.atoms.pdbx_formal_charge.value(unit.elements[index]);
}
export function atomId(unit, index) {
return unit.model.atomicHierarchy.atoms.label_atom_id.value(unit.elements[index]);
}
export function altLoc(unit, index) {
return unit.model.atomicHierarchy.atoms.label_alt_id.value(unit.elements[index]);
}
export function compId(unit, index) {
return unit.model.atomicHierarchy.atoms.label_comp_id.value(unit.elements[index]);
}
//
export function interBondCount(structure, unit, index) {
var count = 0;
var indices = structure.interUnitBonds.getEdgeIndices(index, unit.id);
for (var i = 0, il = indices.length; i < il; ++i) {
var b = structure.interUnitBonds.edges[indices[i]];
if (BondType.isCovalent(b.props.flag))
count += 1;
}
return count;
}
export function intraBondCount(unit, index) {
var count = 0;
var _a = unit.bonds, offset = _a.offset, flags = _a.edgeProps.flags;
for (var i = offset[index], il = offset[index + 1]; i < il; ++i) {
if (BondType.isCovalent(flags[i]))
count += 1;
}
return count;
}
export function bondCount(structure, unit, index) {
return interBondCount(structure, unit, index) + intraBondCount(unit, index);
}
export function bondToElementCount(structure, unit, index, element) {
var count = 0;
eachBondedAtom(structure, unit, index, function (unit, index) {
if (typeSymbol(unit, index) === element)
count += 1;
});
return count;
}
//
export function intraConnectedTo(unit, indexA, indexB) {
var _a = unit.bonds, offset = _a.offset, b = _a.b, flags = _a.edgeProps.flags;
BondType.is;
for (var i = offset[indexA], il = offset[indexA + 1]; i < il; ++i) {
if (b[i] === indexB && BondType.isCovalent(flags[i]))
return true;
}
return false;
}
export function interConnectedTo(structure, unitA, indexA, unitB, indexB) {
var b = structure.interUnitBonds.getEdge(indexA, unitA.id, indexB, unitB.id);
return b && BondType.isCovalent(b.props.flag);
}
export function connectedTo(structure, unitA, indexA, unitB, indexB) {
return unitA === unitB ? intraConnectedTo(unitA, indexA, indexB) : interConnectedTo(structure, unitA, indexA, unitB, indexB);
}
//
export function eachInterBondedAtom(structure, unit, index, cb) {
var indices = structure.interUnitBonds.getEdgeIndices(index, unit.id);
for (var i = 0, il = indices.length; i < il; ++i) {
var b = structure.interUnitBonds.edges[indices[i]];
var uB = structure.unitMap.get(b.unitB);
if (BondType.isCovalent(b.props.flag))
cb(uB, b.indexB);
}
}
export function eachIntraBondedAtom(unit, index, cb) {
var _a = unit.bonds, offset = _a.offset, b = _a.b, flags = _a.edgeProps.flags;
for (var i = offset[index], il = offset[index + 1]; i < il; ++i) {
if (BondType.isCovalent(flags[i]))
cb(unit, b[i]);
}
}
export function eachBondedAtom(structure, unit, index, cb) {
eachInterBondedAtom(structure, unit, index, cb);
eachIntraBondedAtom(unit, index, cb);
}
//
export function eachResidueAtom(unit, index, cb) {
var offsets = unit.model.atomicHierarchy.residueAtomSegments.offsets;
var rI = unit.getResidueIndex(index);
for (var i = offsets[rI], il = offsets[rI + 1]; i < il; ++i) {
// TODO optimize, avoid search with .indexOf
var idx = SortedArray.indexOf(unit.elements, i);
if (idx !== -1)
cb(idx);
}
}
//# sourceMappingURL=util.js.map