diff --git a/src/mol-model/structure/structure/properties.ts b/src/mol-model/structure/structure/properties.ts index 5cca0f63d1ac0c0b0bac11958b2bb3a343df7312..067a95704ef1d6a4f0cdde838a8522a348f59628 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 c34f32dd9f5c81ee792911d5922e90e510f4f397..b84bce22b88180436c3113b8b3b8f9e8537cd058 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 29ff946781cf9fd37641c585574e0c5000950457..59dab706f2098cd563e1a30bf905bdcc8629be06 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 d9d079244051bc0169c84b93258f45b43aa21d97..fbe722d3b76245794b99bedb63d76c1d9cc1bdf4 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 3f59a9da7d68a2efd8ed873775063f7d7d5ad9ca..d16b114cbc9ae5b5644f6b6c39f986fa209b9f2c 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)),