diff --git a/CHANGELOG.md b/CHANGELOG.md index 8df9ea3079db697b1d1633b18a7be0a692a9f523..1f329d45d1796351c99a42b397093c5cdc0a20f7 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 299cf5c8f0ad341df19dab5ecf205a79674d1093..316358e302ed1a46960bb6c68ccb798a15694b33 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); }