From 12ca06fe9103d2a769b5c1b42515f7b0d62653b1 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Sat, 12 Mar 2022 11:44:27 -0800 Subject: [PATCH] fix handling of empty symmetry cell data --- CHANGELOG.md | 1 + .../structure/property/symmetry.ts | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8df9ea307..1f329d45d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Note that since we don't clearly distinguish between a public and private interf - Add Zenodo import extension (load structures, trajectories, volumes, and zip files) - Fix loading of some compressed files within sessions - Fix wrong element assignment for atoms with Charmm ion names +- Fix handling of empty symmetry cell data ## [v3.3.1] - 2022-02-27 diff --git a/src/mol-model-formats/structure/property/symmetry.ts b/src/mol-model-formats/structure/property/symmetry.ts index 299cf5c8f..316358e30 100644 --- a/src/mol-model-formats/structure/property/symmetry.ts +++ b/src/mol-model-formats/structure/property/symmetry.ts @@ -63,10 +63,21 @@ function getSpacegroupNameOrNumber(symmetry: Table<mmCIF_Schema['symmetry']>) { function getSpacegroup(symmetry: Table<mmCIF_Schema['symmetry']>, cell: Table<mmCIF_Schema['cell']>): Spacegroup { if (symmetry._rowCount === 0 || cell._rowCount === 0) return Spacegroup.ZeroP1; + + const a = cell.length_a.value(0); + const b = cell.length_b.value(0); + const c = cell.length_c.value(0); + if (a === 0 || b === 0 || c === 0) return Spacegroup.ZeroP1; + + const alpha = cell.angle_alpha.value(0); + const beta = cell.angle_beta.value(0); + const gamma = cell.angle_gamma.value(0); + if (alpha === 0 || beta === 0 || gamma === 0) return Spacegroup.ZeroP1; + const nameOrNumber = getSpacegroupNameOrNumber(symmetry); const spaceCell = SpacegroupCell.create(nameOrNumber, - Vec3.create(cell.length_a.value(0), cell.length_b.value(0), cell.length_c.value(0)), - Vec3.scale(Vec3.zero(), Vec3.create(cell.angle_alpha.value(0), cell.angle_beta.value(0), cell.angle_gamma.value(0)), Math.PI / 180)); + Vec3.create(a, b, c), + Vec3.scale(Vec3(), Vec3.create(alpha, beta, gamma), Math.PI / 180)); return Spacegroup.create(spaceCell); } -- GitLab