Skip to content
Snippets Groups Projects
Select Git revision
  • f2f1e355c23f2b7b2388549ba420bf357a08a752
  • master default protected
  • rednatco-v2
  • rednatco
  • test
  • ntc-tube-uniform-color
  • ntc-tube-missing-atoms
  • restore-vertex-array-per-program
  • watlas2
  • dnatco_new
  • cleanup-old-nodejs
  • webmmb
  • fix_auth_seq_id
  • update_deps
  • ext_dev
  • ntc_balls
  • nci-2
  • plugin
  • bugfix-0.4.5
  • nci
  • servers
  • v0.5.0-dev.1
  • v0.4.5
  • v0.4.4
  • v0.4.3
  • v0.4.2
  • v0.4.1
  • v0.4.0
  • v0.3.12
  • v0.3.11
  • v0.3.10
  • v0.3.9
  • v0.3.8
  • v0.3.7
  • v0.3.6
  • v0.3.5
  • v0.3.4
  • v0.3.3
  • v0.3.2
  • v0.3.1
  • v0.3.0
41 results

modifiers.ts

Blame
  • modifiers.ts 15.30 KiB
    /**
     * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
     *
     * @author David Sehnal <david.sehnal@gmail.com>
     */
    
    import { Segmentation, SortedArray } from '../../../../mol-data/int';
    import { Structure, Unit } from '../../structure';
    import { StructureQuery } from '../query';
    import { StructureSelection } from '../selection';
    import { UniqueStructuresBuilder } from '../utils/builders';
    import { StructureUniqueSubsetBuilder } from '../../structure/util/unique-subset-builder';
    import { QueryContext, QueryFn } from '../context';
    import { structureIntersect, structureSubtract } from '../utils/structure-set';
    import { UniqueArray } from '../../../../mol-data/generic';
    import { StructureSubsetBuilder } from '../../structure/util/subset-builder';
    import StructureElement from '../../structure/element';
    import { defaultLinkTest } from './internal';
    
    function getWholeResidues(ctx: QueryContext, source: Structure, structure: Structure) {
        const builder = source.subsetBuilder(true);
        for (const unit of structure.units) {
            if (unit.kind !== Unit.Kind.Atomic) {
                // just copy non-atomic units.
                builder.setUnit(unit.id, unit.elements);
                continue;
            }
    
            const { residueAtomSegments } = unit.model.atomicHierarchy;
    
            const elements = unit.elements;
            builder.beginUnit(unit.id);
            const residuesIt = Segmentation.transientSegments(residueAtomSegments, elements);
            while (residuesIt.hasNext) {
                const rI = residuesIt.move().index;
                for (let j = residueAtomSegments.offsets[rI], _j = residueAtomSegments.offsets[rI + 1]; j < _j; j++) {
                    builder.addElement(j);
                }
            }
            builder.commitUnit();
    
            ctx.throwIfTimedOut();
        }
        return builder.getStructure();
    }
    
    export function wholeResidues(query: StructureQuery): StructureQuery {
        return ctx => {
            const inner = query(ctx);
            if (StructureSelection.isSingleton(inner)) {
                return StructureSelection.Singletons(ctx.inputStructure, getWholeResidues(ctx, ctx.inputStructure, inner.structure));
            } else {
                const builder = new UniqueStructuresBuilder(ctx.inputStructure);
                for (const s of inner.structures) {
                    builder.add(getWholeResidues(ctx, ctx.inputStructure, s));
                }
                return builder.getSelection();
            }
        };
    }
    
    export interface IncludeSurroundingsParams {
        radius: number,
        elementRadius?: QueryFn<number>,
        wholeResidues?: boolean
    }
    
    function getIncludeSurroundings(ctx: QueryContext, source: Structure, structure: Structure, params: IncludeSurroundingsParams) {
        const builder = new StructureUniqueSubsetBuilder(source);
        const lookup = source.lookup3d;