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

Use Structure.Builder for assemblies

parent c8d0cfc4
No related branches found
No related tags found
No related merge requests found
...@@ -44,6 +44,7 @@ namespace Structure { ...@@ -44,6 +44,7 @@ namespace Structure {
} }
export interface Builder { export interface Builder {
add(unit: Unit, atoms: OrderedSet): void,
addUnit(unit: Unit): void, addUnit(unit: Unit): void,
addAtoms(unitId: number, atoms: OrderedSet): void, addAtoms(unitId: number, atoms: OrderedSet): void,
getStructure(): Structure, getStructure(): Structure,
...@@ -55,6 +56,7 @@ namespace Structure { ...@@ -55,6 +56,7 @@ namespace Structure {
private atoms = Object.create(null); private atoms = Object.create(null);
atomCount = 0; atomCount = 0;
add(unit: Unit, atoms: OrderedSet) { this.addUnit(unit); this.addAtoms(unit.id, atoms); }
addUnit(unit: Unit) { this.units[unit.id] = unit; } addUnit(unit: Unit) { this.units[unit.id] = unit; }
addAtoms(unitId: number, atoms: OrderedSet) { this.atoms[unitId] = atoms; this.atomCount += OrderedSet.size(atoms); } addAtoms(unitId: number, atoms: OrderedSet) { this.atoms[unitId] = atoms; this.atomCount += OrderedSet.size(atoms); }
getStructure(): Structure { return this.atomCount > 0 ? Structure.create(this.units, AtomSet.create(this.atoms)) : Empty; } getStructure(): Structure { return this.atomCount > 0 ? Structure.create(this.units, AtomSet.create(this.atoms)) : Empty; }
......
...@@ -23,12 +23,9 @@ function buildAssemblyImpl(structure: Structure, name: string) { ...@@ -23,12 +23,9 @@ function buildAssemblyImpl(structure: Structure, name: string) {
const assembly = ModelSymmetry.findAssembly(models[0], name); const assembly = ModelSymmetry.findAssembly(models[0], name);
if (!assembly) throw new Error(`Assembly '${name}' is not defined.`); if (!assembly) throw new Error(`Assembly '${name}' is not defined.`);
const { operatorGroups } = assembly; const assembler = Structure.Builder();
const assemblyUnits = Object.create(null); for (const g of assembly.operatorGroups) {
const assemblyAtoms = Object.create(null);
for (const g of operatorGroups) {
const selection = g.selector(structure); const selection = g.selector(structure);
if (Selection.structureCount(selection) === 0) continue; if (Selection.structureCount(selection) === 0) continue;
const { units, atoms } = Selection.union(selection); const { units, atoms } = Selection.union(selection);
...@@ -37,15 +34,11 @@ function buildAssemblyImpl(structure: Structure, name: string) { ...@@ -37,15 +34,11 @@ function buildAssemblyImpl(structure: Structure, name: string) {
for (const oper of g.operators) { for (const oper of g.operators) {
for (let uI = 0, _uI = unitIds.length; uI < _uI; uI++) { for (let uI = 0, _uI = unitIds.length; uI < _uI; uI++) {
const unitId = unitIds[uI]; const unit = units[unitIds[uI]];
const unit = units[unitId]; assembler.add(Unit.create(unit.model, oper), AtomSet.unitGetByIndex(atoms, uI));
const newUnit = Unit.create(unit.model, oper);
assemblyUnits[newUnit.id] = newUnit;
assemblyAtoms[newUnit.id] = AtomSet.unitGetByIndex(atoms, uI);
} }
} }
} }
return Structure.create(assemblyUnits, AtomSet.create(assemblyAtoms)); return assembler.getStructure();
} }
\ No newline at end of file
- Have the ability to define schemas for output.
Define properties for each pattern/whatever that could be exported as CIF/CSV/JSON.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment