UNPKG

molstar

Version:

A comprehensive macromolecular library.

116 lines (115 loc) 4.4 kB
/** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { Segmentation } from '../../../../mol-data/int'; import { StructureElement } from '../../../../mol-model/structure/structure/element'; import { StructureProperties as P } from '../../structure'; import { Structure } from '../../structure/structure'; import { StructureSelection } from '../selection'; import { BondType } from '../../model/types'; import { Bundle } from '../../structure/element/bundle'; export function defaultBondTest(ctx) { return BondType.isCovalent(ctx.atomicBond.type); } export function atomicSequence() { return function query_atomicSequence(ctx) { const { inputStructure } = ctx; const l = StructureElement.Location.create(inputStructure); const units = []; for (const unit of inputStructure.units) { if (unit.kind !== 0 /* Unit.Kind.Atomic */) continue; l.unit = unit; const elements = unit.elements; l.element = elements[0]; if (P.entity.type(l) !== 'polymer') continue; const residuesIt = Segmentation.transientSegments(unit.model.atomicHierarchy.residueAtomSegments, elements); let residueCount = 0; while (residuesIt.hasNext) { residueCount++; residuesIt.move(); } if (residueCount < 8) continue; units.push(unit); } return StructureSelection.Singletons(inputStructure, Structure.create(units, { parent: inputStructure })); }; } export function water() { return function query_water(ctx) { const { inputStructure } = ctx; const l = StructureElement.Location.create(inputStructure); const units = []; for (const unit of inputStructure.units) { if (unit.kind !== 0 /* Unit.Kind.Atomic */) continue; l.unit = unit; const elements = unit.elements; l.element = elements[0]; if (P.entity.type(l) !== 'water') continue; units.push(unit); } return StructureSelection.Singletons(inputStructure, Structure.create(units, { parent: inputStructure })); }; } export function atomicHet() { return function query_atomicHet(ctx) { const { inputStructure } = ctx; const l = StructureElement.Location.create(inputStructure); const units = []; for (const unit of inputStructure.units) { if (unit.kind !== 0 /* Unit.Kind.Atomic */) continue; l.unit = unit; const elements = unit.elements; l.element = elements[0]; if (P.entity.type(l) === 'water') continue; if (P.entity.type(l) === 'polymer') { const residuesIt = Segmentation.transientSegments(unit.model.atomicHierarchy.residueAtomSegments, elements); let residueCount = 0; while (residuesIt.hasNext) { residueCount++; residuesIt.move(); } if (residueCount >= 8) continue; } units.push(unit); } return StructureSelection.Singletons(inputStructure, Structure.create(units, { parent: inputStructure })); }; } export function spheres() { return function query_spheres(ctx) { const { inputStructure } = ctx; const units = []; for (const unit of inputStructure.units) { if (unit.kind !== 1 /* Unit.Kind.Spheres */) continue; units.push(unit); } return StructureSelection.Singletons(inputStructure, Structure.create(units, { parent: inputStructure })); }; } export function bundleElementImpl(groupedUnits, ranges, set) { return { groupedUnits: groupedUnits, ranges: ranges, set: set }; } export function bundleGenerator(elements) { return function query_bundleGenerator(ctx) { const bundle = { hash: ctx.inputStructure.hashCode, elements }; return StructureSelection.Sequence(ctx.inputStructure, [Bundle.toStructure(bundle, ctx.inputStructure)]); }; }