Explorar el Código

ignore atoms with zero occupancy for bond computation

- assuming they are not actually atoms
Alexander Rose hace 4 años
padre
commit
b1ca98e945

+ 4 - 1
src/mol-model/structure/structure/unit/bonds/inter-compute.ts

@@ -102,6 +102,10 @@ function findPairBonds(unitA: Unit.Atomic, unitB: Unit.Atomic, props: BondComput
             if (added) continue;
         }
 
+        // ignore atoms with zero occupancy (assuming they are not actually atoms)
+        const occA = occupancyA.value(aI);
+        if (hasOccupancy && occA === 0) continue;
+
         const { indices, count, squaredDistances } = lookup3d.find(imageA[0], imageA[1], imageA[2], MAX_RADIUS);
         if (count === 0) continue;
 
@@ -112,7 +116,6 @@ function findPairBonds(unitA: Unit.Atomic, unitB: Unit.Atomic, props: BondComput
         const metalA = MetalsSet.has(aeI);
         const atomIdA = label_atom_idA.value(aI);
         const compIdA = label_comp_idA.value(residueIndexA[aI]);
-        const occA = occupancyA.value(aI);
 
         for (let ni = 0; ni < count; ni++) {
             const _bI = indices[ni] as StructureElement.UnitIndex;

+ 4 - 0
src/mol-model/structure/structure/unit/bonds/intra-compute.ts

@@ -39,6 +39,7 @@ function _computeBonds(unit: Unit.Atomic, props: BondComputationProps): IntraUni
     const atomCount = unit.elements.length;
     const { elements: atoms, residueIndex, chainIndex } = unit;
     const { type_symbol, label_atom_id, label_alt_id } = unit.model.atomicHierarchy.atoms;
+    const { occupancy } = unit.model.atomicConformation;
     const { label_comp_id, label_seq_id } = unit.model.atomicHierarchy.residues;
     const { index } = unit.model.atomicHierarchy;
     const { byEntityKey } = unit.model.sequence;
@@ -116,6 +117,9 @@ function _computeBonds(unit: Unit.Atomic, props: BondComputationProps): IntraUni
         }
         lastResidue = raI;
 
+        // ignore atoms with zero occupancy (assuming they are not actually atoms)
+        if (occupancy.isDefined && occupancy.value(aI) === 0) continue;
+
         const aeI = getElementIdx(type_symbol.value(aI));
         const atomIdA = label_atom_id.value(aI);
         const componentPairs = componentMap ? componentMap.get(atomIdA) : void 0;