avoid standard polymers misqualified as ligands

- overrule erroneous chem comp type in some files
This commit is contained in:
Alexander Rose
2021-12-18 12:13:36 -08:00
parent 176f80ea9b
commit ce1e3960a2
3 changed files with 44 additions and 20 deletions

View File

@@ -29,6 +29,11 @@
* Long linear sugar chain (4HG6)
* Anisotropic B-factors/Ellipsoids (1EJG)
* NOS bridges (LYS-CSO in 7B0L, 6ZWJ, 6ZWH)
* Non-polymer components in polymer entities
* PN2 in 1F80
* ACE (many, e.g. 5AGU, 1E1X)
* ACY in 7ABY
* NH2 (many, e.g. 6Y13)
Assembly symmetries
* 5M30 (Assembly 1, C3 local and pseudo)

View File

@@ -321,6 +321,12 @@ export function getMoleculeType(compType: string, compId: string): MoleculeType
if (SaccharideCompIdMap.has(compId)) {
// trust our saccharide table more than given 'non-polymer' or 'other' component type
return MoleculeType.Saccharide;
} else if (AminoAcidNames.has(compId)) {
return MoleculeType.Protein;
} else if (RnaBaseNames.has(compId)) {
return MoleculeType.RNA;
} else if (DnaBaseNames.has(compId)) {
return MoleculeType.DNA;
} else {
return MoleculeType.Other;
}

View File

@@ -7,7 +7,7 @@
import { CustomProperty } from '../../mol-model-props/common/custom-property';
import { QueryContext, Structure, StructureQuery, StructureSelection, StructureProperties, StructureElement } from '../../mol-model/structure';
import { BondType, NucleicBackboneAtoms, ProteinBackboneAtoms, SecondaryStructureType, AminoAcidNamesL, RnaBaseNames, DnaBaseNames, WaterNames, ElementSymbol } from '../../mol-model/structure/model/types';
import { BondType, NucleicBackboneAtoms, ProteinBackboneAtoms, SecondaryStructureType, AminoAcidNamesL, RnaBaseNames, DnaBaseNames, WaterNames, ElementSymbol, PolymerNames } from '../../mol-model/structure/model/types';
import { PluginContext } from '../../mol-plugin/context';
import { MolScriptBuilder as MS } from '../../mol-script/language/builder';
import { Expression } from '../../mol-script/language/expression';
@@ -320,33 +320,46 @@ const branchedConnectedOnly = StructureSelectionQuery('Connected to Carbohydrate
]), { category: StructureSelectionCategory.Internal, isHidden: true });
const ligand = StructureSelectionQuery('Ligand', MS.struct.modifier.union([
MS.struct.combinator.merge([
MS.struct.modifier.union([
MS.struct.generator.atomGroups({
'entity-test': MS.core.logic.and([
MS.core.logic.or([
MS.core.rel.eq([MS.ammp('entityType'), 'non-polymer']),
MS.core.rel.neq([MS.ammp('entityPrdId'), ''])
]),
MS.core.logic.not([MS.core.str.match([
MS.re('(oligosaccharide|lipid|ion)', 'i'),
MS.ammp('entitySubtype')
])])
MS.struct.modifier.exceptBy({
0: MS.struct.modifier.union([
MS.struct.combinator.merge([
MS.struct.modifier.union([
MS.struct.generator.atomGroups({
'entity-test': MS.core.logic.and([
MS.core.logic.or([
MS.core.rel.eq([MS.ammp('entityType'), 'non-polymer']),
MS.core.rel.neq([MS.ammp('entityPrdId'), ''])
]),
MS.core.logic.not([MS.core.str.match([
MS.re('(oligosaccharide|lipid|ion)', 'i'),
MS.ammp('entitySubtype')
])])
]),
'chain-test': MS.core.rel.eq([MS.ammp('objectPrimitive'), 'atomistic']),
'residue-test': MS.core.logic.not([
MS.core.str.match([MS.re('saccharide', 'i'), MS.ammp('chemCompType')])
])
})
]),
'chain-test': MS.core.rel.eq([MS.ammp('objectPrimitive'), 'atomistic']),
'residue-test': MS.core.logic.not([
MS.core.str.match([MS.re('saccharide', 'i'), MS.ammp('chemCompType')])
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': _nonPolymerResidueTest
})
])
})
]),
]),
MS.struct.modifier.union([
by: 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': _nonPolymerResidueTest
'residue-test': MS.core.set.has([
MS.set(...SetUtils.toArray(PolymerNames)), MS.ammp('label_comp_id')
])
})
])
]),
})
]), { category: StructureSelectionCategory.Type });
// don't include branched entities as they have their own link representation