Browse Source

handle deuterated part 2

Sebastian Bittrich 3 years ago
parent
commit
ee7e37f6bc

+ 5 - 4
src/mol-io/writer/ligand-encoder.ts

@@ -9,12 +9,13 @@ import { Writer } from './writer';
 import { Encoder, Category, Field } from './cif/encoder';
 import { ComponentAtom } from '../../mol-model-formats/structure/property/atoms/chem_comp';
 import { ComponentBond } from '../../mol-model-formats/structure/property/bonds/chem_comp';
+import { getElementIdx, isHydrogen } from '../../mol-model/structure/structure/unit/bonds/common';
 
 interface Atom {
     Cartn_x: number,
     Cartn_y: number,
     Cartn_z: number,
-    type_symbol: string,
+    type_symbol: string & { '@type': 'element-symbol' },
     index: number
 }
 
@@ -112,7 +113,7 @@ export abstract class LigandEncoder implements Encoder<string> {
                 // ignore all alternate locations after the first
                 if (atoms.has(lai)) continue;
 
-                const ts = type_symbol.value(key, data, index) as string;
+                const ts = type_symbol.value(key, data, index) as string & { '@type': 'element-symbol' };
                 if (this.skipHydrogen(ts)) continue;
 
                 const a: { [k: string]: (string | number) } = {};
@@ -132,11 +133,11 @@ export abstract class LigandEncoder implements Encoder<string> {
         return atoms;
     }
 
-    protected skipHydrogen(type_symbol: string) {
+    protected skipHydrogen(type_symbol: string & { '@type': 'element-symbol' }) {
         if (this.hydrogens) {
             return false;
         }
-        return type_symbol === 'H' || type_symbol === 'D';
+        return isHydrogen(getElementIdx(type_symbol));
     }
 
     private getSortedFields<Ctx>(instance: Category.Instance<Ctx>, names: string[]) {

+ 2 - 2
src/mol-io/writer/mol/encoder.ts

@@ -53,8 +53,8 @@ export class MolEncoder extends LigandEncoder {
                 const atom2 = atoms.get(label_atom_id2);
                 if (!atom2) return;
 
-                const { index: i2, type_symbol: type_symbol2 } = atom2;
-                if (i1 < i2 && !this.skipHydrogen(type_symbol2)) {
+                const { index: i2 } = atom2;
+                if (i1 < i2) {
                     const { order } = bond;
                     StringBuilder.writeIntegerPadLeft(bonds, i1 + 1, 3);
                     StringBuilder.writeIntegerPadLeft(bonds, i2 + 1, 3);

+ 2 - 2
src/mol-io/writer/mol2/encoder.ts

@@ -42,8 +42,8 @@ export class Mol2Encoder extends LigandEncoder {
                     const atom2 = atoms.get(label_atom_id2);
                     if (!atom2) return;
 
-                    const { index: i2, type_symbol: type_symbol2 } = atom2;
-                    if (i1 < i2 && !this.skipHydrogen(type_symbol2)) {
+                    const { index: i2 } = atom2;
+                    if (i1 < i2) {
                         const { order, flags } = bond;
                         const ar = BondType.is(BondType.Flag.Aromatic, flags);
                         StringBuilder.writeSafe(b, `${++bondCount} ${i1 + 1} ${i2 + 1} ${ar ? 'ar' : order}`);