Ver Fonte

support files without assembly info

Sebastian Bittrich há 3 anos atrás
pai
commit
c925f9d30b
2 ficheiros alterados com 14 adições e 8 exclusões
  1. 13 7
      src/viewer/helpers/preset.ts
  2. 1 1
      src/viewer/index.html

+ 13 - 7
src/viewer/helpers/preset.ts

@@ -354,20 +354,26 @@ function determineAssemblyId(traj: any, p: MotifProps) {
     try {
         // find first assembly that contains all requested struct_oper_ids - if multiple, the first will be returned
         const pdbx_struct_assembly_gen = traj.obj.data.representative.sourceData.data.frame.categories.pdbx_struct_assembly_gen;
-        const assembly_id = pdbx_struct_assembly_gen.getField('assembly_id');
-        const oper_expression = pdbx_struct_assembly_gen.getField('oper_expression');
-        const asym_id_list = pdbx_struct_assembly_gen.getField('asym_id_list');
+        if (pdbx_struct_assembly_gen) {
+            const assembly_id = pdbx_struct_assembly_gen.getField('assembly_id');
+            const oper_expression = pdbx_struct_assembly_gen.getField('oper_expression');
+            const asym_id_list = pdbx_struct_assembly_gen.getField('asym_id_list');
 
-        for (let i = 0, il = pdbx_struct_assembly_gen.rowCount; i < il; i++) {
-            if (ids.some(val => !equals(oper_expression.str(i), val[0]) || asym_id_list.str(i).indexOf(val[1]) === -1)) continue;
+            for (let i = 0, il = pdbx_struct_assembly_gen.rowCount; i < il; i++) {
+                if (ids.some(val => !equals(oper_expression.str(i), val[0]) || asym_id_list.str(i).indexOf(val[1]) === -1)) continue;
 
-            Object.assign(p, { assemblyId: assembly_id.str(i) });
-            return;
+                Object.assign(p, {assemblyId: assembly_id.str(i)});
+                return;
+            }
+        } else {
+            // this happens e.g. for AlphaFold structures
+            console.warn(`Source file is missing 'pdbx_struct_assembly_gen' category`);
         }
     } catch (error) {
         console.warn(error);
     }
     // default to '1' if error or legitimately not found
+    console.warn(`Could not auto-detect assembly-of-interest. Falling back to '1'`);
     Object.assign(p, { assemblyId: '1' });
 }
 

+ 1 - 1
src/viewer/index.html

@@ -514,7 +514,7 @@
                             { label_asym_id: "A", struct_oper_id: '1', label_seq_id: 342 },
                             { label_asym_id: "A", struct_oper_id: '1', label_seq_id: 344 }];
                         const mat = [-0.471, 0.856, 0.215, 0, 0.405, -0.007, 0.914, 0, 0.784, 0.518, -0.343, 0, 54.981, 65.575, 12.287, 1];
-                        return viewer.loadStructureFromUrl(url, 'mmcif', false, { assemblyId: '1', kind: 'motif', label, targets, unsafe: true }, mat);
+                        return viewer.loadStructureFromUrl(url, 'mmcif', false, { kind: 'motif', label, targets, unsafe: true }, mat);
                     })
                     .then(function() {
                         viewer.resetCamera(0)