Ver código fonte

filter for present valuekind

Sebastian Bittrich 1 ano atrás
pai
commit
1b0401dff5
1 arquivos alterados com 33 adições e 16 exclusões
  1. 33 16
      src/mol-model-formats/structure/mmcif.ts

+ 33 - 16
src/mol-model-formats/structure/mmcif.ts

@@ -158,34 +158,51 @@ async function createCcdModel(data: CCD_Database, format: CCDFormat, props: CCDP
 
     const { atom_id, charge, comp_id, pdbx_ordinal, type_symbol } = chem_comp_atom;
     const atomCount = chem_comp_atom._rowCount;
-    const A = Column.ofConst('A', atomCount, Column.Schema.str);
-    const seq_id = Column.ofConst(1, atomCount, Column.Schema.int);
-    const entity_id = Column.ofConst('1', atomCount, Column.Schema.str);
-    const occupancy = Column.ofConst(1, atomCount, Column.Schema.float);
-    const model_num = Column.ofConst(1, atomCount, Column.Schema.int);
+
+    const filteredRows: number[] = [];
+    for (let i = 0; i < atomCount; i++) {
+        if (chem_comp_atom[cartn_x].valueKind(i) > 0) continue;
+        filteredRows[filteredRows.length] = i;
+    }
+    const filteredRowCount = filteredRows.length;
+
+    const A = Column.ofConst('A', filteredRowCount, Column.Schema.str);
+    const seq_id = Column.ofConst(1, filteredRowCount, Column.Schema.int);
+    const entity_id = Column.ofConst('1', filteredRowCount, Column.Schema.str);
+    const occupancy = Column.ofConst(1, filteredRowCount, Column.Schema.float);
+    const model_num = Column.ofConst(1, filteredRowCount, Column.Schema.int);
+
+    const filteredAtomId = Column.view(atom_id, filteredRows);
+    const filteredCompId = Column.view(comp_id, filteredRows);
+    const filteredX = Column.view(chem_comp_atom[cartn_x], filteredRows);
+    const filteredY = Column.view(chem_comp_atom[cartn_y], filteredRows);
+    const filteredZ = Column.view(chem_comp_atom[cartn_z], filteredRows);
+    const filteredId = Column.view(pdbx_ordinal, filteredRows);
+    const filteredTypeSymbol = Column.view(type_symbol, filteredRows);
+    const filteredCharge = Column.view(charge, filteredRows);
 
     const model_atom_site = Table.ofPartialColumns(BasicSchema.atom_site, {
         auth_asym_id: A,
-        auth_atom_id: atom_id,
-        auth_comp_id: comp_id,
+        auth_atom_id: filteredAtomId,
+        auth_comp_id: filteredCompId,
         auth_seq_id: seq_id,
-        Cartn_x: chem_comp_atom[cartn_x],
-        Cartn_y: chem_comp_atom[cartn_y],
-        Cartn_z: chem_comp_atom[cartn_z],
-        id: pdbx_ordinal,
+        Cartn_x: filteredX,
+        Cartn_y: filteredY,
+        Cartn_z: filteredZ,
+        id: filteredId,
 
         label_asym_id: A,
-        label_atom_id: atom_id,
-        label_comp_id: comp_id,
+        label_atom_id: filteredAtomId,
+        label_comp_id: filteredCompId,
         label_seq_id: seq_id,
         label_entity_id: entity_id,
 
         occupancy,
-        type_symbol,
+        type_symbol: filteredTypeSymbol,
 
         pdbx_PDB_model_num: model_num,
-        pdbx_formal_charge: charge
-    }, atomCount);
+        pdbx_formal_charge: filteredCharge
+    }, filteredRowCount);
 
     const entityBuilder = new EntityBuilder();
     entityBuilder.setNames([[id, `${name} (${coordinateType})`]]);