Skip to content
Snippets Groups Projects
Commit 22190c17 authored by David Sehnal's avatar David Sehnal
Browse files

Renamed ElementGroup.id to key

parent 134df300
No related branches found
No related tags found
No related merge requests found
...@@ -34,11 +34,11 @@ export class StructureRepresentation { ...@@ -34,11 +34,11 @@ export class StructureRepresentation {
const { elements, units } = structure; const { elements, units } = structure;
const uniqueGroups = EquivalenceClasses<number, ElementGroup>( const uniqueGroups = EquivalenceClasses<number, ElementGroup>(
ElementGroup.hashCode, ElementGroup.hashCode,
(a, b) => units[a.id].model.id === units[b.id].model.id && OrderedSet.areEqual(a.elements, b.elements)); (a, b) => units[a.key].model.id === units[b.key].model.id && OrderedSet.areEqual(a.elements, b.elements));
for (let i = 0, _i = ElementSet.unitCount(elements); i < _i; i++) { for (let i = 0, _i = ElementSet.unitCount(elements); i < _i; i++) {
const group = ElementSet.unitGetByIndex(elements, i); const group = ElementSet.unitGetByIndex(elements, i);
uniqueGroups.add(group.id, group); uniqueGroups.add(group.key, group);
} }
......
...@@ -9,7 +9,8 @@ import Unit from '../unit' ...@@ -9,7 +9,8 @@ import Unit from '../unit'
interface ElementGroup { interface ElementGroup {
elements: OrderedSet, elements: OrderedSet,
id: number // Unique identifier of the group, usable as partial key for various "caches".
key: number
} }
namespace ElementGroup { namespace ElementGroup {
...@@ -20,7 +21,7 @@ namespace ElementGroup { ...@@ -20,7 +21,7 @@ namespace ElementGroup {
} }
export function createNew(elements: OrderedSet): ElementGroup { export function createNew(elements: OrderedSet): ElementGroup {
return { id: nextId(), elements }; return { key: nextKey(), elements };
} }
export function create(unit: Unit, elements: OrderedSet): ElementGroup { export function create(unit: Unit, elements: OrderedSet): ElementGroup {
...@@ -61,7 +62,7 @@ namespace ElementGroup { ...@@ -61,7 +62,7 @@ namespace ElementGroup {
} }
let _id = 0; let _id = 0;
function nextId() { function nextKey() {
const ret = _id; const ret = _id;
_id = (_id + 1) % 0x3fffffff; _id = (_id + 1) % 0x3fffffff;
return ret; return ret;
......
...@@ -11,11 +11,12 @@ import * as fs from 'fs' ...@@ -11,11 +11,12 @@ import * as fs from 'fs'
import fetch from 'node-fetch' import fetch from 'node-fetch'
import CIF from 'mol-io/reader/cif' import CIF from 'mol-io/reader/cif'
import { Structure, Model, Queries as Q, Element, ElementGroup, ElementSet, Selection, Symmetry } from 'mol-model/structure' import { Structure, Model, Queries as Q, Element, ElementGroup, ElementSet, Selection, Symmetry, Unit } from 'mol-model/structure'
import { Segmentation } from 'mol-data/int' import { Segmentation, OrderedSet } from 'mol-data/int'
import to_mmCIF from 'mol-model/structure/export/mmcif' import to_mmCIF from 'mol-model/structure/export/mmcif'
import { Run } from 'mol-task'; import { Run } from 'mol-task';
import { EquivalenceClasses } from 'mol-data/util';
require('util.promisify').shim(); require('util.promisify').shim();
const readFileAsync = util.promisify(fs.readFile); const readFileAsync = util.promisify(fs.readFile);
...@@ -100,7 +101,7 @@ async function ensureBcifAvailable(pdbId: string) { ...@@ -100,7 +101,7 @@ async function ensureBcifAvailable(pdbId: string) {
} }
} }
async function getBcif(pdbId: string) { export async function getBcif(pdbId: string) {
await ensureBcifAvailable(pdbId); await ensureBcifAvailable(pdbId);
return await readCIF(getBcifPath(pdbId)); return await readCIF(getBcifPath(pdbId));
} }
...@@ -301,11 +302,35 @@ export namespace PropertyAccess { ...@@ -301,11 +302,35 @@ export namespace PropertyAccess {
console.log('exported'); console.log('exported');
} }
export function testGrouping(structure: Structure) {
const { elements, units } = Symmetry.buildAssembly(structure, '1');
console.log('grouping', units.length);
console.log('built asm');
const uniqueGroups = EquivalenceClasses<number, { unit: Unit, group: ElementGroup }>(
({ unit, group }) => ElementGroup.hashCode(group),
(a, b) => a.unit.model.id === b.unit.model.id && (a.group.key === b.group.key && OrderedSet.areEqual(a.group.elements, b.group.elements))
);
for (let i = 0, _i = ElementSet.unitCount(elements); i < _i; i++) {
const group = ElementSet.unitGetByIndex(elements, i);
const unitId = ElementSet.unitGetId(elements, i);
uniqueGroups.add(unitId, { unit: units[unitId], group });
}
console.log('group count', uniqueGroups.groups.length);
}
export async function run() { export async function run() {
const { structures, models/*, mmcif*/ } = await getBcif('1cbs'); //const { structures, models/*, mmcif*/ } = await getBcif('1cbs');
// const { structures, models } = await getBcif('3j3q'); // const { structures, models } = await getBcif('3j3q');
//const { structures, models, mmcif } = await readCIF('e:/test/quick/1cbs_updated.cif'); const { structures, models /*, mmcif*/ } = await readCIF('e:/test/quick/1hrv_updated.cif');
const { structures: s1, /*, mmcif*/ } = await readCIF('e:/test/quick/1tqn_updated.cif');
testGrouping(structures[0]);
console.log('------');
testGrouping(s1[0]);
//const { structures, models/*, mmcif*/ } = await readCIF('e:/test/quick/5j7v_updated.cif'); //const { structures, models/*, mmcif*/ } = await readCIF('e:/test/quick/5j7v_updated.cif');
//console.log(mmcif.pdbx_struct_oper_list.matrix.toArray()); //console.log(mmcif.pdbx_struct_oper_list.matrix.toArray());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment