ソースを参照

queries: add nos-bridge, improve disulfide-bridge

Alexander Rose 3 年 前
コミット
a2b4ed7c1c

+ 4 - 2
CHANGELOG.md

@@ -6,7 +6,9 @@ Note that since we don't clearly distinguish between a public and private interf
 ## [Unreleased]
 
 - Add glTF (GLB) and STL support to ``geo-export`` extension.
-- Change O-S bond distance to allow for NOS bridges (doi:10.1038/s41586-021-03513-3)
+- Protein crosslink improvements
+    - Change O-S bond distance to allow for NOS bridges (doi:10.1038/s41586-021-03513-3)
+    - Added NOS-bridges query & improved disulfide-bridges query
 - Fix #178: ``IndexPairBonds`` for non-single residue structures (bug due to atom reordering).
 
 ## [v2.0.5] - 2021-04-26
@@ -21,7 +23,7 @@ Note that since we don't clearly distinguish between a public and private interf
 - Add `Torus` primitive.
 - Lazy volume loading support.
 - [Breaking] ``Viewer.loadVolumeFromUrl`` signature change.
-  - ``loadVolumeFromUrl(url, format, isBinary, isovalues, entryId)`` => ``loadVolumeFromUrl({ url, format, isBinary }, isovalues, { entryId, isLazy })``
+    - ``loadVolumeFromUrl(url, format, isBinary, isovalues, entryId)`` => ``loadVolumeFromUrl({ url, format, isBinary }, isovalues, { entryId, isLazy })``
 - Add ``TextureMesh`` support to ``geo-export`` extension.
 
 ## [v2.0.4] - 2021-04-20

+ 1 - 0
docs/interesting-pdb-entries.md

@@ -28,3 +28,4 @@
 * Multiple models with different sets of ligands or missing ligands (1J6T, 1VRC, 2ICY, 1O2F)
 * Long linear sugar chain (4HG6)
 * Anisotropic B-factors/Ellipsoids (1EJG)
+* NOS bridges (LYS-CSO in 7B0L, 6ZWJ, 6ZWH)

+ 42 - 6
src/mol-plugin-state/helpers/structure-selection-query.ts

@@ -374,18 +374,53 @@ const connectedOnly = StructureSelectionQuery('Connected to Ligand or Carbohydra
 ]), { category: StructureSelectionCategory.Internal, isHidden: true });
 
 const disulfideBridges = StructureSelectionQuery('Disulfide Bridges', MS.struct.modifier.union([
-    MS.struct.modifier.wholeResidues([
+    MS.struct.combinator.merge([
         MS.struct.modifier.union([
-            MS.struct.generator.bondedAtomicPairs({
-                0: MS.core.flags.hasAny([
-                    MS.struct.bondProperty.flags(),
-                    MS.core.type.bitflags([BondType.Flag.Disulfide])
+            MS.struct.modifier.wholeResidues([
+                MS.struct.filter.isConnectedTo({
+                    0: MS.struct.generator.atomGroups({
+                        'residue-test': MS.core.set.has([MS.set('CYS'), MS.ammp('auth_comp_id')]),
+                        'atom-test': MS.core.set.has([MS.set('SG'), MS.ammp('label_atom_id')])
+                    }),
+                    target: MS.struct.generator.atomGroups({
+                        'residue-test': MS.core.set.has([MS.set('CYS'), MS.ammp('auth_comp_id')]),
+                        'atom-test': MS.core.set.has([MS.set('SG'), MS.ammp('label_atom_id')])
+                    }),
+                    'bond-test': true
+                })
+            ])
+        ]),
+        MS.struct.modifier.union([
+            MS.struct.modifier.wholeResidues([
+                MS.struct.modifier.union([
+                    MS.struct.generator.bondedAtomicPairs({
+                        0: MS.core.flags.hasAny([
+                            MS.struct.bondProperty.flags(),
+                            MS.core.type.bitflags([BondType.Flag.Disulfide])
+                        ])
+                    })
                 ])
-            })
+            ])
         ])
     ])
 ]), { category: StructureSelectionCategory.Bond });
 
+const nosBridges = StructureSelectionQuery('NOS Bridges', MS.struct.modifier.union([
+    MS.struct.modifier.wholeResidues([
+        MS.struct.filter.isConnectedTo({
+            0: MS.struct.generator.atomGroups({
+                'residue-test': MS.core.set.has([MS.set('CSO', 'LYS'), MS.ammp('auth_comp_id')]),
+                'atom-test': MS.core.set.has([MS.set('OD', 'NZ'), MS.ammp('label_atom_id')])
+            }),
+            target: MS.struct.generator.atomGroups({
+                'residue-test': MS.core.set.has([MS.set('CSO', 'LYS'), MS.ammp('auth_comp_id')]),
+                'atom-test': MS.core.set.has([MS.set('OD', 'NZ'), MS.ammp('label_atom_id')])
+            }),
+            'bond-test': true
+        })
+    ])
+]), { category: StructureSelectionCategory.Bond });
+
 const nonStandardPolymer = StructureSelectionQuery('Non-standard Residues in Polymers', MS.struct.modifier.union([
     MS.struct.generator.atomGroups({
         'entity-test': MS.core.rel.eq([MS.ammp('entityType'), 'polymer']),
@@ -652,6 +687,7 @@ export const StructureSelectionQueries = {
     ligandConnectedOnly,
     connectedOnly,
     disulfideBridges,
+    nosBridges,
     nonStandardPolymer,
     coarse,
     ring,