From 4cc0754f11b21c52c9924689487f36d756c59a52 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Wed, 30 Oct 2019 11:30:37 -0700 Subject: [PATCH] add isNonStandard atom prop, use polymer repr preset --- src/mol-model/structure/structure/properties.ts | 1 + src/mol-plugin/util/structure-representation-helper.ts | 1 + src/mol-plugin/util/structure-selection-helper.ts | 9 +++++++++ src/mol-script/language/symbol-table/structure-query.ts | 3 ++- src/mol-script/runtime/query/table.ts | 1 + 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/mol-model/structure/structure/properties.ts b/src/mol-model/structure/structure/properties.ts index 5cca0f63d..067a95704 100644 --- a/src/mol-model/structure/structure/properties.ts +++ b/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]]), diff --git a/src/mol-plugin/util/structure-representation-helper.ts b/src/mol-plugin/util/structure-representation-helper.ts index c34f32dd9..b84bce22b 100644 --- a/src/mol-plugin/util/structure-representation-helper.ts +++ b/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 ]) ])) diff --git a/src/mol-plugin/util/structure-selection-helper.ts b/src/mol-plugin/util/structure-selection-helper.ts index 29ff94678..59dab706f 100644 --- a/src/mol-plugin/util/structure-selection-helper.ts +++ b/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, diff --git a/src/mol-script/language/symbol-table/structure-query.ts b/src/mol-script/language/symbol-table/structure-query.ts index d9d079244..fbe722d3b 100644 --- a/src/mol-script/language/symbol-table/structure-query.ts +++ b/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.`), } } diff --git a/src/mol-script/runtime/query/table.ts b/src/mol-script/runtime/query/table.ts index 3f59a9da7..d16b114cb 100644 --- a/src/mol-script/runtime/query/table.ts +++ b/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)), -- GitLab