Skip to content
Snippets Groups Projects
Commit 4455bab6 authored by dsehnal's avatar dsehnal
Browse files

Fix struct_conn bond assignment for ions

parent b21fb270
No related branches found
No related tags found
No related merge requests found
...@@ -16,6 +16,7 @@ Note that since we don't clearly distinguish between a public and private interf ...@@ -16,6 +16,7 @@ Note that since we don't clearly distinguish between a public and private interf
- Add per-pixel object clipping - Add per-pixel object clipping
- Fix `QualityAssessment` assignment bug for structures with different auth vs label sequence numbering - Fix `QualityAssessment` assignment bug for structures with different auth vs label sequence numbering
- Refresh `ApplyActionControl`'s param definition when toggling expanded state - Refresh `ApplyActionControl`'s param definition when toggling expanded state
- Fix `struct_conn` bond assignment for ions
## [v3.26.0] - 2022-12-04 ## [v3.26.0] - 2022-12-04
......
...@@ -20,6 +20,7 @@ import { InterUnitGraph } from '../../../../../mol-math/graph/inter-unit-graph'; ...@@ -20,6 +20,7 @@ import { InterUnitGraph } from '../../../../../mol-math/graph/inter-unit-graph';
import { StructConn } from '../../../../../mol-model-formats/structure/property/bonds/struct_conn'; import { StructConn } from '../../../../../mol-model-formats/structure/property/bonds/struct_conn';
import { equalEps } from '../../../../../mol-math/linear-algebra/3d/common'; import { equalEps } from '../../../../../mol-math/linear-algebra/3d/common';
import { Model } from '../../../model'; import { Model } from '../../../model';
import { StructureProperties } from '../../properties';
// avoiding namespace lookup improved performance in Chrome (Aug 2020) // avoiding namespace lookup improved performance in Chrome (Aug 2020)
const v3distance = Vec3.distance; const v3distance = Vec3.distance;
...@@ -249,13 +250,27 @@ function computeInterUnitBonds(structure: Structure, props?: Partial<InterBondCo ...@@ -249,13 +250,27 @@ function computeInterUnitBonds(structure: Structure, props?: Partial<InterBondCo
(!Unit.isAtomic(a) || mtA[a.residueIndex[a.elements[0]]] !== MoleculeType.Water) && (!Unit.isAtomic(a) || mtA[a.residueIndex[a.elements[0]]] !== MoleculeType.Water) &&
(!Unit.isAtomic(b) || mtB[b.residueIndex[b.elements[0]]] !== MoleculeType.Water) (!Unit.isAtomic(b) || mtB[b.residueIndex[b.elements[0]]] !== MoleculeType.Water)
); );
const notIon = (
(!Unit.isAtomic(a) || mtA[a.residueIndex[a.elements[0]]] !== MoleculeType.Ion) && const sameModel = a.model === b.model;
(!Unit.isAtomic(b) || mtB[b.residueIndex[b.elements[0]]] !== MoleculeType.Ion) const notIonA = (!Unit.isAtomic(a) || mtA[a.residueIndex[a.elements[0]]] !== MoleculeType.Ion) || (sameModel && hasStructConnRecord(a));
); const notIonB = (!Unit.isAtomic(b) || mtB[b.residueIndex[b.elements[0]]] !== MoleculeType.Ion) || (sameModel && hasStructConnRecord(b));
const notIon = notIonA && notIonB;
return Structure.validUnitPair(s, a, b) && (notWater || !p.ignoreWater) && (notIon || !p.ignoreIon); return Structure.validUnitPair(s, a, b) && (notWater || !p.ignoreWater) && (notIon || !p.ignoreIon);
}), }),
}); });
} }
function hasStructConnRecord(unit: Unit) {
const elements = unit.elements;
const structConn = StructConn.Provider.get(unit.model);
if (structConn) {
for (let i = 0, _i = elements.length; i < _i; i++) {
if (structConn.byAtomIndex.get(elements[i])) {
return true;
}
}
}
return false;
}
export { computeInterUnitBonds }; export { computeInterUnitBonds };
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