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 {
}
export interface Builder {
add(unit: Unit, atoms: OrderedSet): void,
addUnit(unit: Unit): void,
addAtoms(unitId: number, atoms: OrderedSet): void,
getStructure(): Structure,
......@@ -55,6 +56,7 @@ namespace Structure {
private atoms = Object.create(null);
atomCount = 0;
add(unit: Unit, atoms: OrderedSet) { this.addUnit(unit); this.addAtoms(unit.id, atoms); }
addUnit(unit: Unit) { this.units[unit.id] = unit; }
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; }
......
......@@ -23,12 +23,9 @@ function buildAssemblyImpl(structure: Structure, name: string) {
const assembly = ModelSymmetry.findAssembly(models[0], name);
if (!assembly) throw new Error(`Assembly '${name}' is not defined.`);
const { operatorGroups } = assembly;
const assembler = Structure.Builder();
const assemblyUnits = Object.create(null);
const assemblyAtoms = Object.create(null);
for (const g of operatorGroups) {
for (const g of assembly.operatorGroups) {
const selection = g.selector(structure);
if (Selection.structureCount(selection) === 0) continue;
const { units, atoms } = Selection.union(selection);
......@@ -37,15 +34,11 @@ function buildAssemblyImpl(structure: Structure, name: string) {
for (const oper of g.operators) {
for (let uI = 0, _uI = unitIds.length; uI < _uI; uI++) {
const unitId = unitIds[uI];
const unit = units[unitId];
const newUnit = Unit.create(unit.model, oper);
assemblyUnits[newUnit.id] = newUnit;
assemblyAtoms[newUnit.id] = AtomSet.unitGetByIndex(atoms, uI);
const unit = units[unitIds[uI]];
assembler.add(Unit.create(unit.model, oper), 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.
Please register or to comment