Select Git revision
top.ts 7.03 KiB
/**
* Copyright (c) 2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
import { Column, Table } from '../../mol-data/db';
import { TopFile } from '../../mol-io/reader/top/parser';
import { getMoleculeType, MoleculeType } from '../../mol-model/structure/model/types';
import { Topology } from '../../mol-model/structure/topology/topology';
import { Task } from '../../mol-task';
import { ModelFormat } from '../format';
import { BasicSchema, createBasic } from './basic/schema';
import { ComponentBuilder } from './common/component';
import { EntityBuilder } from './common/entity';
import { getChainId } from './common/util';
import { guessElementSymbolString } from './util';
function getBasic(top: TopFile) {
const { molecules, compounds } = top;
const singleResidue: Record<string, boolean> = {};
let atomCount = 0;
for (let i = 0, il = molecules._rowCount; i < il; ++i) {
const mol = molecules.compound.value(i);
const count = molecules.molCount.value(i);
const { atoms } = compounds[mol];
Column.asArrayColumn(atoms.atom);
Column.asArrayColumn(atoms.resnr);
Column.asArrayColumn(atoms.residu);
atomCount += count * atoms._rowCount;
let prevResnr = atoms.resnr.value(0);
singleResidue[mol] = true;
for (let j = 1, jl = atoms._rowCount; j < jl; ++j) {
const resnr = atoms.resnr.value(j);
if (resnr !== prevResnr) {
singleResidue[mol] = false;
break;
}
prevResnr = resnr;
}
}
//
const atomNames = new Array<string>(atomCount);
const residueIds = new Uint32Array(atomCount);
const residueNames = new Array<string>(atomCount);
let k = 0;
for (let i = 0, il = molecules._rowCount; i < il; ++i) {
const mol = molecules.compound.value(i);
const count = molecules.molCount.value(i);
const { atoms } = compounds[mol];
const isSingleResidue = singleResidue[mol];
for (let j = 0; j < count; ++j) {
for (let l = 0, ll = atoms._rowCount; l < ll; ++l) {
atomNames[k] = atoms.atom.value(l);
residueIds[k] = atoms.resnr.value(l);
residueNames[k] = atoms.residu.value(l);
if (isSingleResidue) residueIds[k] += j;
k += 1;
}
}