|
@@ -9,6 +9,7 @@ import { Segmentation } from 'mol-data/int'
|
|
|
import { mmCIF_Schema as mmCIF } from 'mol-io/reader/cif/schema/mmcif'
|
|
|
import { ElementSymbol } from '../../types'
|
|
|
import { Element } from '../../../structure'
|
|
|
+import { ChainIndex, EntityIndex, ResidueIndex } from '../../indexing';
|
|
|
|
|
|
export const AtomsSchema = {
|
|
|
type_symbol: Column.Schema.Aliased<ElementSymbol>(mmCIF.atom_site.type_symbol),
|
|
@@ -49,7 +50,7 @@ export interface AtomicData {
|
|
|
|
|
|
export interface AtomicSegments {
|
|
|
/** Maps residueIndex to a range of atoms [segments[rI], segments[rI + 1]) */
|
|
|
- residueAtomSegments: Segmentation<Element>,
|
|
|
+ residueAtomSegments: Segmentation<Element, ResidueIndex>,
|
|
|
/**
|
|
|
* Maps chainIndex to a range of atoms [segments[cI], segments[cI + 1]),
|
|
|
*
|
|
@@ -58,7 +59,7 @@ export interface AtomicSegments {
|
|
|
* const start = rI[offsets[i]], const end = rI[offsets[i + 1] - 1] + 1;
|
|
|
* for (let j = start; j < end; i++) { }
|
|
|
*/
|
|
|
- chainAtomSegments: Segmentation<Element>,
|
|
|
+ chainAtomSegments: Segmentation<Element, ChainIndex>,
|
|
|
/**
|
|
|
* bonded/connected stretches of polymer chains, i.e. a chain will be
|
|
|
* broken into multiple polymer segments if there are missing residues
|
|
@@ -69,27 +70,19 @@ export interface AtomicSegments {
|
|
|
}
|
|
|
|
|
|
export interface AtomicKeys {
|
|
|
- // TODO: since Atoms must be sorted now, get rid of keys
|
|
|
// TODO: include (lazily computed) "entity/chain/residue" indices?
|
|
|
|
|
|
- // assign a key to each residue index.
|
|
|
- residueKey: ArrayLike<number>,
|
|
|
- // assign a key to each chain index
|
|
|
- chainKey: ArrayLike<number>,
|
|
|
- // assigne a key to each chain index
|
|
|
- // also index to the Entities table.
|
|
|
- entityKey: ArrayLike<number>,
|
|
|
+ /** @returns index or -1 if not present. */
|
|
|
+ getEntityKey(cI: ChainIndex): EntityIndex,
|
|
|
|
|
|
- /**
|
|
|
- * @returns index or -1 if not present.
|
|
|
- */
|
|
|
- findChainKey(entityId: string, label_asym_id: string): number,
|
|
|
+ /** @returns index or -1 if not present. */
|
|
|
+ findChainKey(entityId: string, label_asym_id: string): ChainIndex,
|
|
|
|
|
|
/**
|
|
|
* Unique number for each of the residue. Also the index of the 1st occurence of this residue.
|
|
|
* @returns index or -1 if not present.
|
|
|
*/
|
|
|
- findResidueKey(entityId: string, label_asym_id: string, label_comp_id: string, auth_seq_id: number, pdbx_PDB_ins_code: string): number
|
|
|
+ findResidueKey(entityId: string, label_asym_id: string, label_comp_id: string, auth_seq_id: number, pdbx_PDB_ins_code: string): ResidueIndex
|
|
|
}
|
|
|
|
|
|
type _Hierarchy = AtomicData & AtomicSegments & AtomicKeys
|
|
@@ -97,12 +90,12 @@ export interface AtomicHierarchy extends _Hierarchy { }
|
|
|
|
|
|
export namespace AtomicHierarchy {
|
|
|
/** Start residue inclusive */
|
|
|
- export function chainStartResidueIndex(segs: AtomicSegments, cI: number) {
|
|
|
+ export function chainStartResidueIndex(segs: AtomicSegments, cI: ChainIndex) {
|
|
|
return segs.residueAtomSegments.index[segs.chainAtomSegments.offsets[cI]];
|
|
|
}
|
|
|
|
|
|
/** End residue exclusive */
|
|
|
- export function chainEndResidueIndexExcl(segs: AtomicSegments, cI: number) {
|
|
|
- return segs.residueAtomSegments.index[segs.chainAtomSegments.offsets[cI + 1] - 1] + 1;
|
|
|
+ export function chainEndResidueIndexExcl(segs: AtomicSegments, cI: ChainIndex) {
|
|
|
+ return segs.residueAtomSegments.index[segs.chainAtomSegments.offsets[cI + 1] - 1] + 1 as ResidueIndex;
|
|
|
}
|
|
|
}
|