Browse Source

removed 'modified residues'

- use non-standard flag in polymers residues instead to show interesting residues
- 'modified residues' is of limited value to get parent, better rely on chem_comp.type
Alexander Rose 5 years ago
parent
commit
ec45f6c0ee

+ 0 - 13
src/apps/structure-info/model.ts

@@ -123,18 +123,6 @@ export function printSequence(model: Model) {
     console.log();
 }
 
-export function printModRes(model: Model) {
-    console.log('\nModified Residues\n=============');
-    const map = model.properties.modifiedResidues.parentId;
-    const { label_comp_id, _rowCount } = model.atomicHierarchy.residues;
-    for (let i = 0; i < _rowCount; i++) {
-        const comp_id = label_comp_id.value(i);
-        if (!map.has(comp_id)) continue;
-        console.log(`[${i}] ${map.get(comp_id)} -> ${comp_id}`);
-    }
-    console.log();
-}
-
 export function printRings(structure: Structure) {
     console.log('\nRings\n=============');
     for (const unit of structure.units) {
@@ -221,7 +209,6 @@ async function run(frame: CifFrame, args: Args) {
     if (args.rings) printRings(structure);
     if (args.intraBonds) printBonds(structure, true, false);
     if (args.interBonds) printBonds(structure, false, true);
-    if (args.mod) printModRes(models[0]);
     if (args.sec) printSecStructure(models[0]);
 }
 

+ 4 - 5
src/examples/proteopedia-wrapper/helpers.ts

@@ -7,7 +7,7 @@
 import { ResidueIndex, Model } from '../../mol-model/structure';
 import { BuiltInStructureRepresentationsName } from '../../mol-repr/structure/registry';
 import { BuiltInColorThemeName } from '../../mol-theme/color';
-import { AminoAcidNames } from '../../mol-model/structure/model/types';
+import { PolymerType } from '../../mol-model/structure/model/types';
 import { PluginContext } from '../../mol-plugin/context';
 import { ModelSymmetry } from '../../mol-model-formats/structure/property/symmetry';
 
@@ -54,15 +54,14 @@ export namespace ModelInfo {
         const hetMap = new Map<string, ModelInfo['hetResidues'][0]>();
 
         for (let rI = 0 as ResidueIndex; rI < residueCount; rI++) {
-            const comp_id = model.atomicHierarchy.residues.label_comp_id.value(rI);
-            if (AminoAcidNames.has(comp_id)) continue;
-            const mod_parent = model.properties.modifiedResidues.parentId.get(comp_id);
-            if (mod_parent && AminoAcidNames.has(mod_parent)) continue;
+            if (model.atomicHierarchy.derived.residue.polymerType[rI] !== PolymerType.NA) continue;
 
             const cI = chainIndex[residueOffsets[rI]];
             const eI = model.atomicHierarchy.index.getEntityFromChain(cI);
             if (model.entities.data.type.value(eI) === 'water') continue;
 
+            const comp_id = model.atomicHierarchy.residues.label_comp_id.value(rI);
+
             let lig = hetMap.get(comp_id);
             if (!lig) {
                 lig = { name: comp_id, indices: [] };

+ 2 - 2
src/mol-model-formats/structure/basic/parser.ts

@@ -45,7 +45,7 @@ function createStandardModel(data: BasicData, atom_site: AtomSite, sourceIndex:
     }
 
     const coarse = EmptyCoarse;
-    const sequence = getSequence(data, entities, atomic.hierarchy, coarse.hierarchy, properties.modifiedResidues.parentId)
+    const sequence = getSequence(data, entities, atomic.hierarchy, coarse.hierarchy)
     const atomicRanges = getAtomicRanges(atomic.hierarchy, entities, atomic.conformation, sequence)
 
     const entry = data.entry.id.valueKind(0) === Column.ValueKind.Present
@@ -80,7 +80,7 @@ function createStandardModel(data: BasicData, atom_site: AtomSite, sourceIndex:
 function createIntegrativeModel(data: BasicData, ihm: CoarseData, properties: Model['properties'], format: ModelFormat): Model {
     const atomic = getAtomicHierarchyAndConformation(ihm.atom_site, ihm.atom_site_sourceIndex, ihm.entities, properties.chemicalComponentMap);
     const coarse = getCoarse(ihm, properties);
-    const sequence = getSequence(data, ihm.entities, atomic.hierarchy, coarse.hierarchy, properties.modifiedResidues.parentId)
+    const sequence = getSequence(data, ihm.entities, atomic.hierarchy, coarse.hierarchy)
     const atomicRanges = getAtomicRanges(atomic.hierarchy, ihm.entities, atomic.conformation, sequence)
 
     const entry = data.entry.id.valueKind(0) === Column.ValueKind.Present

+ 0 - 18
src/mol-model-formats/structure/basic/properties.ts

@@ -13,23 +13,6 @@ import { memoize1 } from '../../../mol-util/memoize';
 import { BasicData } from './schema';
 import { Table } from '../../../mol-data/db';
 
-function getModifiedResidueNameMap(data: BasicData): Model['properties']['modifiedResidues'] {
-    const parentId = new Map<string, string>();
-    const details = new Map<string, string>();
-
-    const c = data.pdbx_struct_mod_residue;
-    const comp_id = c.label_comp_id.isDefined ? c.label_comp_id : c.auth_comp_id;
-    const parent_id = c.parent_comp_id, details_data = c.details;
-
-    for (let i = 0; i < c._rowCount; i++) {
-        const id = comp_id.value(i);
-        parentId.set(id, parent_id.value(i));
-        details.set(id, details_data.value(i));
-    }
-
-    return { parentId, details };
-}
-
 function getMissingResidues(data: BasicData): Model['properties']['missingResidues'] {
     const map = new Map<string, MissingResidue>();
     const getKey = (model_num: number, asym_id: string, seq_id: number) => {
@@ -126,7 +109,6 @@ const getUniqueComponentNames = memoize1((data: BasicData) => {
 
 export function getProperties(data: BasicData): Model['properties'] {
     return {
-        modifiedResidues: getModifiedResidueNameMap(data),
         missingResidues: getMissingResidues(data),
         chemicalComponentMap: getChemicalComponentMap(data),
         saccharideComponentMap: getSaccharideComponentMap(data)

+ 0 - 4
src/mol-model-formats/structure/basic/schema.ts

@@ -8,7 +8,6 @@ import { mmCIF_Schema } from '../../../mol-io/reader/cif/schema/mmcif';
 import { Table } from '../../../mol-data/db';
 
 // TODO split into conformation and hierarchy parts
-// TODO extract `pdbx_struct_mod_residue` as property?
 
 export type Entry = Table<mmCIF_Schema['entry']>
 export type Struct = Table<mmCIF_Schema['struct']>
@@ -22,7 +21,6 @@ export type EntityPolySeq = Table<mmCIF_Schema['entity_poly_seq']>
 export type EntityBranch = Table<mmCIF_Schema['pdbx_entity_branch']>
 export type ChemComp = Table<mmCIF_Schema['chem_comp']>
 export type ChemCompIdentifier = Table<mmCIF_Schema['pdbx_chem_comp_identifier']>
-export type StructModResidue = Table<mmCIF_Schema['pdbx_struct_mod_residue']>
 export type AtomSite = Table<mmCIF_Schema['atom_site']>
 export type IhmSphereObjSite = Table<mmCIF_Schema['ihm_sphere_obj_site']>
 export type IhmGaussianObjSite =Table<mmCIF_Schema['ihm_gaussian_obj_site']>
@@ -41,7 +39,6 @@ export const BasicSchema = {
     pdbx_entity_branch: mmCIF_Schema.pdbx_entity_branch,
     chem_comp: mmCIF_Schema.chem_comp,
     pdbx_chem_comp_identifier: mmCIF_Schema.pdbx_chem_comp_identifier,
-    pdbx_struct_mod_residue: mmCIF_Schema.pdbx_struct_mod_residue,
     atom_site: mmCIF_Schema.atom_site,
     ihm_sphere_obj_site: mmCIF_Schema.ihm_sphere_obj_site,
     ihm_gaussian_obj_site: mmCIF_Schema.ihm_gaussian_obj_site,
@@ -61,7 +58,6 @@ export interface BasicData {
     pdbx_entity_branch: EntityBranch
     chem_comp: ChemComp
     pdbx_chem_comp_identifier: ChemCompIdentifier
-    pdbx_struct_mod_residue: StructModResidue
     atom_site: AtomSite
     ihm_sphere_obj_site: IhmSphereObjSite
     ihm_gaussian_obj_site: IhmGaussianObjSite

+ 3 - 3
src/mol-model-formats/structure/basic/sequence.ts

@@ -13,9 +13,9 @@ import { Sequence } from '../../../mol-model/sequence';
 import { CoarseHierarchy } from '../../../mol-model/structure/model/properties/coarse';
 import { BasicData } from './schema';
 
-export function getSequence(data: BasicData, entities: Entities, atomicHierarchy: AtomicHierarchy, coarseHierarchy: CoarseHierarchy, modResMap: ReadonlyMap<string, string>): StructureSequence {
+export function getSequence(data: BasicData, entities: Entities, atomicHierarchy: AtomicHierarchy, coarseHierarchy: CoarseHierarchy): StructureSequence {
     if (!data.entity_poly_seq || !data.entity_poly_seq._rowCount) {
-        return StructureSequence.fromHierarchy(entities, atomicHierarchy, coarseHierarchy, modResMap);
+        return StructureSequence.fromHierarchy(entities, atomicHierarchy, coarseHierarchy);
     }
 
     const { entity_id, num, mon_id } = data.entity_poly_seq;
@@ -37,7 +37,7 @@ export function getSequence(data: BasicData, entities: Entities, atomicHierarchy
 
         byEntityKey[entityKey] = {
             entityId: id,
-            sequence: Sequence.ofResidueNames(compId, seqId, modResMap)
+            sequence: Sequence.ofResidueNames(compId, seqId)
         };
 
         sequences.push(byEntityKey[entityKey]);

+ 4 - 8
src/mol-model/sequence/sequence.ts

@@ -80,11 +80,11 @@ namespace Sequence {
         return code
     }
 
-    export function ofResidueNames(compId: Column<string>, seqId: Column<number>, modifiedMap?: ReadonlyMap<string, string>): Sequence {
+    export function ofResidueNames(compId: Column<string>, seqId: Column<number>): Sequence {
         if (seqId.rowCount === 0) throw new Error('cannot be empty');
 
         const kind = determineKind(compId);
-        return new ResidueNamesImpl(kind, compId, seqId, modifiedMap) as Sequence;
+        return new ResidueNamesImpl(kind, compId, seqId) as Sequence;
     }
 
     class ResidueNamesImpl<K extends Kind, Alphabet extends string> implements Base<K, Alphabet> {
@@ -154,11 +154,7 @@ namespace Sequence {
                 const code = this.codeFromName(name);
                 // in case of MICROHETEROGENEITY `sequenceArray[idx]` may already be set
                 if (!sequenceArray[idx] || sequenceArray[idx] === '-') {
-                    if (code === 'X' && this.modifiedMap && this.modifiedMap.has(name)) {
-                        sequenceArray[idx] = this.modifiedMap.get(name)!
-                    } else {
-                        sequenceArray[idx] = code;
-                    }
+                    sequenceArray[idx] = code;
                 }
                 labels[idx].push(code === 'X' ? name : code);
                 compIds[seqId].push(name);
@@ -183,7 +179,7 @@ namespace Sequence {
             this._length = count
         }
 
-        constructor(public kind: K, public compId: Column<string>, public seqId: Column<number>, private modifiedMap?: ReadonlyMap<string, string>) {
+        constructor(public kind: K, public compId: Column<string>, public seqId: Column<number>) {
 
             this.codeFromName = codeProvider(kind)
         }

+ 0 - 64
src/mol-model/structure/export/categories/modified-residues.ts

@@ -1,64 +0,0 @@
-/**
- * Copyright (c) 2017-2018 Mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
-
-import { Segmentation } from '../../../../mol-data/int';
-import { CifWriter } from '../../../../mol-io/writer/cif';
-import { StructureElement, StructureProperties as P, Unit } from '../../../structure';
-import { CifExportContext } from '../mmcif';
-
-import CifField = CifWriter.Field
-import CifCategory = CifWriter.Category
-
-const pdbx_struct_mod_residue_fields: CifField<number, StructureElement.Location[]>[] = [
-    CifField.index('id'),
-    CifField.str(`label_comp_id`, (i, xs) => P.residue.label_comp_id(xs[i])),
-    CifField.int(`label_seq_id`, (i, xs) => P.residue.label_seq_id(xs[i])),
-    CifField.str(`pdbx_PDB_ins_code`, (i, xs) => P.residue.pdbx_PDB_ins_code(xs[i])),
-    CifField.str(`label_asym_id`, (i, xs) => P.chain.label_asym_id(xs[i])),
-    CifField.str(`label_entity_id`, (i, xs) => P.chain.label_entity_id(xs[i])),
-    CifField.str(`auth_comp_id`, (i, xs) => P.residue.auth_comp_id(xs[i])),
-    CifField.int(`auth_seq_id`, (i, xs) => P.residue.auth_seq_id(xs[i])),
-    CifField.str(`auth_asym_id`, (i, xs) => P.chain.auth_asym_id(xs[i])),
-    CifField.str<number, StructureElement.Location[]>('parent_comp_id', (i, xs) => xs[i].unit.model.properties.modifiedResidues.parentId.get(P.residue.label_comp_id(xs[i]))!),
-    CifField.str('details', (i, xs) => xs[i].unit.model.properties.modifiedResidues.details.get(P.residue.label_comp_id(xs[i]))!)
-];
-
-function getModifiedResidues({ structures }: CifExportContext): StructureElement.Location[] {
-    // TODO: can different models (in the same mmCIF file) have different modified residues?
-    const structure = structures[0], model = structure.model;
-    const map = model.properties.modifiedResidues.parentId;
-    if (!map.size) return [];
-
-    const ret = [];
-    const prop = P.residue.label_comp_id;
-    const loc = StructureElement.Location.create(structure);
-    for (const unit of structure.units) {
-        if (!Unit.isAtomic(unit) || !unit.conformation.operator.isIdentity) continue;
-        const residues = Segmentation.transientSegments(unit.model.atomicHierarchy.residueAtomSegments, unit.elements);
-        loc.unit = unit;
-        while (residues.hasNext) {
-            const seg = residues.move();
-            loc.element = unit.elements[seg.start];
-            const name = prop(loc);
-            if (map.has(name)) {
-                ret[ret.length] = StructureElement.Location.clone(loc);
-            }
-        }
-    }
-    return ret;
-}
-
-export const _pdbx_struct_mod_residue: CifCategory<CifExportContext> = {
-    name: 'pdbx_struct_mod_residue',
-    instance(ctx) {
-        const residues = getModifiedResidues(ctx);
-        return {
-            fields: pdbx_struct_mod_residue_fields,
-            source: [{ data: residues, rowCount: residues.length }]
-        };
-    }
-}

+ 0 - 2
src/mol-model/structure/export/mmcif.ts

@@ -11,7 +11,6 @@ import { Structure } from '../structure'
 import { _atom_site } from './categories/atom_site';
 import CifCategory = CifWriter.Category
 import { _struct_conf, _struct_sheet_range } from './categories/secondary-structure';
-import { _pdbx_struct_mod_residue } from './categories/modified-residues';
 import { _chem_comp, _pdbx_chem_comp_identifier, _pdbx_nonpoly_scheme } from './categories/misc';
 import { Model } from '../model';
 import { getUniqueEntityIndicesFromStructures, copy_mmCif_category } from './categories/utils';
@@ -83,7 +82,6 @@ const Categories = [
     copy_mmCif_category('atom_sites'),
 
     _pdbx_nonpoly_scheme,
-    _pdbx_struct_mod_residue,
 
     // Atoms
     _atom_site

+ 0 - 5
src/mol-model/structure/model/model.ts

@@ -53,11 +53,6 @@ export interface Model extends Readonly<{
     atomicRanges: AtomicRanges,
 
     properties: {
-        /** maps modified residue name to its parent */
-        readonly modifiedResidues: Readonly<{
-            parentId: ReadonlyMap<string, string>,
-            details: ReadonlyMap<string, string>
-        }>,
         /** map that holds details about unobserved or zero occurrence residues */
         readonly missingResidues: MissingResidues,
         /** maps residue name to `ChemicalComponent` data */

+ 4 - 4
src/mol-model/structure/model/properties/sequence.ts

@@ -37,13 +37,13 @@ namespace StructureSequence {
         return { sequences, byEntityKey }
     }
 
-    export function fromHierarchy(entities: Entities, atomicHierarchy: AtomicHierarchy, coarseHierarchy: CoarseHierarchy, modResMap?: ReadonlyMap<string, string>): StructureSequence {
-        const atomic = fromAtomicHierarchy(entities, atomicHierarchy, modResMap)
+    export function fromHierarchy(entities: Entities, atomicHierarchy: AtomicHierarchy, coarseHierarchy: CoarseHierarchy): StructureSequence {
+        const atomic = fromAtomicHierarchy(entities, atomicHierarchy)
         const coarse = coarseHierarchy.isDefined ? fromCoarseHierarchy(entities, coarseHierarchy) : Empty
         return merge(atomic, coarse)
     }
 
-    export function fromAtomicHierarchy(entities: Entities, hierarchy: AtomicHierarchy, modResMap?: ReadonlyMap<string, string>): StructureSequence {
+    export function fromAtomicHierarchy(entities: Entities, hierarchy: AtomicHierarchy): StructureSequence {
         const { label_comp_id, label_seq_id } = hierarchy.residues
         const { chainAtomSegments, residueAtomSegments } = hierarchy
         const { count, offsets } = chainAtomSegments
@@ -75,7 +75,7 @@ namespace StructureSequence {
             const num = Column.window(label_seq_id, rStart, rEnd);
             byEntityKey[entityKey] = {
                 entityId: entities.data.id.value(entityKey),
-                sequence: Sequence.ofResidueNames(compId, num, modResMap)
+                sequence: Sequence.ofResidueNames(compId, num)
             };
 
             sequences.push(byEntityKey[entityKey]);

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

@@ -96,12 +96,6 @@ const residue = {
     pdbx_PDB_ins_code: p(l => !Unit.isAtomic(l.unit) ? notAtomic() : l.unit.model.atomicHierarchy.residues.pdbx_PDB_ins_code.value(l.unit.residueIndex[l.element])),
 
     // Properties
-    isModified: p(l => !Unit.isAtomic(l.unit) ? notAtomic() : l.unit.model.properties.modifiedResidues.parentId.has(compId(l))),
-    modifiedParentName: p(l => {
-        if (!Unit.isAtomic(l.unit)) notAtomic()
-        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),

+ 1 - 1
src/mol-plugin/state/representation/structure/preset.ts

@@ -52,7 +52,7 @@ const defaultPreset = StructureRepresentationProvider({
         const ligandRepr = ligand.applyOrUpdateTagged(reprTags, StateTransforms.Representation.StructureRepresentation3D,
             StructureRepresentation3DHelpers.getDefaultParams(plugin, 'ball-and-stick', structure));
 
-        applyComplex(root, 'modified')
+        applyComplex(root, 'non-standard')
             .applyOrUpdateTagged(reprTags, StateTransforms.Representation.StructureRepresentation3D,
                 StructureRepresentation3DHelpers.getDefaultParamsWithTheme(plugin, 'ball-and-stick', 'polymer-id', structure, void 0));
 

+ 2 - 2
src/mol-plugin/state/transforms/model.ts

@@ -614,7 +614,7 @@ export const StructureComplexElementTypes = {
 
     'branched': 'branched', // = carbs
     'ligand': 'ligand',
-    'modified': 'modified',
+    'non-standard': 'non-standard',
 
     'coarse': 'coarse',
 
@@ -649,7 +649,7 @@ const StructureComplexElement = PluginStateTransform.BuiltIn({
             case 'branched': query = StructureSelectionQueries.branchedPlusConnected.query; label = 'Branched'; break;
             case 'ligand': query = StructureSelectionQueries.ligandPlusConnected.query; label = 'Ligand'; break;
 
-            case 'modified': query = StructureSelectionQueries.modified.query; label = 'Modified'; break;
+            case 'non-standard': query = StructureSelectionQueries.nonStandardPolymer.query; label = 'Non-standard'; break;
 
             case 'coarse': query = StructureSelectionQueries.coarse.query; label = 'Coarse'; break;
 

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

@@ -22,7 +22,7 @@ export function createDefaultStructureComplex(
         .apply(StateTransforms.Representation.StructureRepresentation3D,
             StructureRepresentation3DHelpers.getDefaultParamsStatic(ctx, 'ball-and-stick'));
 
-    root.apply(StateTransforms.Model.StructureComplexElement, { type: 'modified' }, { tags: StructureComplexElementTypes.modified })
+    root.apply(StateTransforms.Model.StructureComplexElement, { type: 'non-standard' }, { tags: StructureComplexElementTypes['non-standard'] })
         .apply(StateTransforms.Representation.StructureRepresentation3D,
             StructureRepresentation3DHelpers.getDefaultParamsStatic(ctx, 'ball-and-stick', void 0, 'polymer-id'));
 

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

@@ -271,13 +271,6 @@ const disulfideBridges = StructureSelectionQuery('Disulfide Bridges', MS.struct.
     ])
 ]))
 
-const modified = StructureSelectionQuery('Modified Residues', MS.struct.modifier.union([
-    MS.struct.generator.atomGroups({
-        'chain-test': MS.core.rel.eq([MS.ammp('objectPrimitive'), 'atomistic']),
-        'residue-test': MS.ammp('isModified')
-    })
-]))
-
 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']),
@@ -345,7 +338,6 @@ export const StructureSelectionQueries = {
     ligandConnectedOnly,
     connectedOnly,
     disulfideBridges,
-    modified,
     nonStandardPolymer,
     coarse,
     ring,

+ 1 - 4
src/mol-repr/structure/visual/nucleotide-block-mesh.ts

@@ -53,7 +53,6 @@ function createNucleotideBlockMesh(ctx: VisualContext, unit: Unit, structure: St
     const builderState = MeshBuilder.createState(vertexCount, vertexCount / 4, mesh)
 
     const { elements, model } = unit
-    const { modifiedResidues } = model.properties
     const { chainAtomSegments, residueAtomSegments, residues, index: atomicIndex } = model.atomicHierarchy
     const { moleculeType, traceElementIndex } = model.atomicHierarchy.derived.residue
     const { label_comp_id } = residues
@@ -72,9 +71,7 @@ function createNucleotideBlockMesh(ctx: VisualContext, unit: Unit, structure: St
             const { index: residueIndex } = residueIt.move();
 
             if (isNucleic(moleculeType[residueIndex])) {
-                let compId = label_comp_id.value(residueIndex)
-                const parentId = modifiedResidues.parentId.get(compId)
-                if (parentId !== undefined) compId = parentId
+                const compId = label_comp_id.value(residueIndex)
                 let idx1: ElementIndex | -1 = -1, idx2: ElementIndex | -1 = -1, idx3: ElementIndex | -1 = -1, idx4: ElementIndex | -1 = -1, idx5: ElementIndex | -1 = -1, idx6: ElementIndex | -1 = -1
                 let width = 4.5, height = 4.5, depth = 2.5 * sizeFactor
 

+ 1 - 4
src/mol-repr/structure/visual/nucleotide-ring-mesh.ts

@@ -72,7 +72,6 @@ function createNucleotideRingMesh(ctx: VisualContext, unit: Unit, structure: Str
     const builderState = MeshBuilder.createState(vertexCount, vertexCount / 4, mesh)
 
     const { elements, model } = unit
-    const { modifiedResidues } = model.properties
     const { chainAtomSegments, residueAtomSegments, residues, index: atomicIndex } = model.atomicHierarchy
     const { moleculeType, traceElementIndex } = model.atomicHierarchy.derived.residue
     const { label_comp_id } = residues
@@ -93,9 +92,7 @@ function createNucleotideRingMesh(ctx: VisualContext, unit: Unit, structure: Str
             const { index: residueIndex } = residueIt.move();
 
             if (isNucleic(moleculeType[residueIndex])) {
-                let compId = label_comp_id.value(residueIndex)
-                const parentId = modifiedResidues.parentId.get(compId)
-                if (parentId !== undefined) compId = parentId
+                const compId = label_comp_id.value(residueIndex)
 
                 let idxTrace: ElementIndex | -1 = -1, idxN1: ElementIndex | -1 = -1, idxC2: ElementIndex | -1 = -1, idxN3: ElementIndex | -1 = -1, idxC4: ElementIndex | -1 = -1, idxC5: ElementIndex | -1 = -1, idxC6: ElementIndex | -1 = -1, idxN7: ElementIndex | -1 = -1, idxC8: ElementIndex | -1 = -1, idxN9: ElementIndex | -1 = -1
 

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

@@ -325,8 +325,6 @@ const symbols = [
     D(MolScript.structureQuery.atomProperty.macromolecular.entitySubtype, atomProp(StructureProperties.entity.subtype)),
     D(MolScript.structureQuery.atomProperty.macromolecular.objectPrimitive, atomProp(StructureProperties.unit.object_primitive)),
 
-    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)),

+ 2 - 8
src/mol-theme/color/hydrophobicity.ts

@@ -32,22 +32,16 @@ export function hydrophobicity(compId: string, scaleIndex: number): number {
 }
 
 function getAtomicCompId(unit: Unit.Atomic, element: ElementIndex) {
-    const { modifiedResidues } = unit.model.properties
-    const compId = unit.model.atomicHierarchy.residues.label_comp_id.value(unit.residueIndex[element])
-    const parentId = modifiedResidues.parentId.get(compId)
-    return parentId === undefined ? compId : parentId
+    return unit.model.atomicHierarchy.residues.label_comp_id.value(unit.residueIndex[element])
 }
 
 function getCoarseCompId(unit: Unit.Spheres | Unit.Gaussians, element: ElementIndex) {
     const seqIdBegin = unit.coarseElements.seq_id_begin.value(element)
     const seqIdEnd = unit.coarseElements.seq_id_end.value(element)
     if (seqIdBegin === seqIdEnd) {
-        const { modifiedResidues } = unit.model.properties
         const entityKey = unit.coarseElements.entityKey[element]
         const seq = unit.model.sequence.byEntityKey[entityKey].sequence
-        let compId = seq.compId.value(seqIdBegin - 1) // 1-indexed
-        const parentId = modifiedResidues.parentId.get(compId)
-        return parentId === undefined ? compId : parentId
+        return seq.compId.value(seqIdBegin - 1) // 1-indexed
     }
 }
 

+ 2 - 8
src/mol-theme/color/residue-name.ts

@@ -74,22 +74,16 @@ export function getResidueNameColorThemeParams(ctx: ThemeDataContext) {
 }
 
 function getAtomicCompId(unit: Unit.Atomic, element: ElementIndex) {
-    const { modifiedResidues } = unit.model.properties
-    const compId = unit.model.atomicHierarchy.residues.label_comp_id.value(unit.residueIndex[element])
-    const parentId = modifiedResidues.parentId.get(compId)
-    return parentId === undefined ? compId : parentId
+    return unit.model.atomicHierarchy.residues.label_comp_id.value(unit.residueIndex[element])
 }
 
 function getCoarseCompId(unit: Unit.Spheres | Unit.Gaussians, element: ElementIndex) {
     const seqIdBegin = unit.coarseElements.seq_id_begin.value(element)
     const seqIdEnd = unit.coarseElements.seq_id_end.value(element)
     if (seqIdBegin === seqIdEnd) {
-        const { modifiedResidues } = unit.model.properties
         const entityKey = unit.coarseElements.entityKey[element]
         const seq = unit.model.sequence.byEntityKey[entityKey].sequence
-        let compId = seq.compId.value(seqIdBegin - 1) // 1-indexed
-        const parentId = modifiedResidues.parentId.get(compId)
-        return parentId === undefined ? compId : parentId
+        return seq.compId.value(seqIdBegin - 1) // 1-indexed
     }
 }