ソースを参照

add isNonStandard atom prop, use polymer repr preset

Alexander Rose 5 年 前
コミット
4cc0754f11

+ 1 - 0
src/mol-model/structure/structure/properties.ts

@@ -100,6 +100,7 @@ const residue = {
         const id = compId(l)
         return l.unit.model.properties.modifiedResidues.parentId.get(id) || id
     }),
+    isNonStandard: p(l => !Unit.isAtomic(l.unit) ? notAtomic() : l.unit.model.properties.chemicalComponentMap.get(compId(l))!.mon_nstd_flag[0] !== 'y'),
     hasMicroheterogeneity: p(hasMicroheterogeneity),
     microheterogeneityCompIds: p(microheterogeneityCompIds),
     secondary_structure_type: p(l => !Unit.isAtomic(l.unit) ? notAtomic() : l.unit.model.properties.secondaryStructure.type[l.unit.residueIndex[l.element]]),

+ 1 - 0
src/mol-plugin/util/structure-representation-helper.ts

@@ -205,6 +205,7 @@ async function polymerAndLigand(r: StructureRepresentationHelper) {
         MS.struct.combinator.merge([
             Q.ligandPlusConnected.expression,
             Q.branchedConnectedOnly.expression,
+            Q.nonStandardPolymer.expression,
             Q.water.expression
         ])
     ]))

+ 9 - 0
src/mol-plugin/util/structure-selection-helper.ts

@@ -188,6 +188,14 @@ const modified = StructureSelectionQuery('Modified Residues', MS.struct.modifier
     })
 ]))
 
+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']),
+        'chain-test': MS.core.rel.eq([MS.ammp('objectPrimitive'), 'atomistic']),
+        'residue-test': MS.ammp('isNonStandard')
+    })
+]))
+
 const coarse = StructureSelectionQuery('Coarse Elements', MS.struct.modifier.union([
     MS.struct.generator.atomGroups({
         'chain-test': MS.core.set.has([
@@ -230,6 +238,7 @@ export const StructureSelectionQueries = {
     ligandConnectedOnly,
     connectedOnly,
     modified,
+    nonStandardPolymer,
     coarse,
     surroundings,
     complement,

+ 2 - 1
src/mol-script/language/symbol-table/structure-query.ts

@@ -303,8 +303,9 @@ const atomProperty = {
 
         secondaryStructureKey: atomProp(Type.AnyValue, 'Unique value for each secondary structure element.'),
         secondaryStructureFlags: atomProp(Types.SecondaryStructureFlags),
-        isModified: atomProp(Type.Bool, 'True if the atom bolongs to modification of a standard residue.'),
+        isModified: atomProp(Type.Bool, 'True if the atom belongs to modification of a standard residue.'),
         modifiedParentName: atomProp(Type.Str, `'3-letter' code of the modifed parent residue.`),
+        isNonStandard: atomProp(Type.Bool, 'True if this is a non-standard residue.'),
         chemCompType: atomProp(Type.Str, `Type of the chemical component as defined in mmCIF.`),
     }
 }

+ 1 - 0
src/mol-script/runtime/query/table.ts

@@ -314,6 +314,7 @@ const symbols = [
 
     D(MolScript.structureQuery.atomProperty.macromolecular.isModified, atomProp(StructureProperties.residue.isModified)),
     D(MolScript.structureQuery.atomProperty.macromolecular.modifiedParentName, atomProp(StructureProperties.residue.modifiedParentName)),
+    D(MolScript.structureQuery.atomProperty.macromolecular.isNonStandard, atomProp(StructureProperties.residue.isNonStandard)),
     D(MolScript.structureQuery.atomProperty.macromolecular.secondaryStructureKey, atomProp(StructureProperties.residue.secondary_structure_key)),
     D(MolScript.structureQuery.atomProperty.macromolecular.secondaryStructureFlags, atomProp(StructureProperties.residue.secondary_structure_type)),
     D(MolScript.structureQuery.atomProperty.macromolecular.chemCompType, atomProp(StructureProperties.residue.chem_comp_type)),