From 0606eddff74409fa191ac88f4f9748939bacc47b Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Wed, 10 Jan 2024 13:59:08 +0100 Subject: [PATCH 01/11] - added MonomerClass for monomers --- .../src/application/render/renderers/RenderersManager.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts b/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts index 1d969c9928..e5a698ab4c 100644 --- a/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts +++ b/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts @@ -54,6 +54,12 @@ export class RenderersManager { public addMonomer(monomer: BaseMonomer, callback?: () => void) { const [, MonomerRenderer] = monomerFactory(monomer.monomerItem); const monomerRenderer = new MonomerRenderer(monomer); + + monomer.monomerItem.props = { + ...monomer.monomerItem.props, + MonomerClass: monomer.constructor.name, + }; + this.monomers.set(monomer.id, monomerRenderer); monomerRenderer.show(this.theme); this.markForReEnumeration(); From 3a632bd167b6534ae0d1f401be820c41acff0282 Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Wed, 10 Jan 2024 17:57:59 +0100 Subject: [PATCH 02/11] - moved logic into ketSerializer --- .../src/application/render/renderers/RenderersManager.ts | 5 ----- .../ketcher-core/src/domain/serializers/ket/ketSerializer.ts | 5 +++++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts b/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts index e5a698ab4c..c1ec48f979 100644 --- a/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts +++ b/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts @@ -55,11 +55,6 @@ export class RenderersManager { const [, MonomerRenderer] = monomerFactory(monomer.monomerItem); const monomerRenderer = new MonomerRenderer(monomer); - monomer.monomerItem.props = { - ...monomer.monomerItem.props, - MonomerClass: monomer.constructor.name, - }; - this.monomers.set(monomer.id, monomerRenderer); monomerRenderer.show(this.theme); this.markForReEnumeration(); diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index a884d542ed..505af6a985 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -441,6 +441,11 @@ export class KetSerializer implements Serializer { }; drawingEntitiesManager.monomers.forEach((monomer) => { + monomer.monomerItem.props = { + ...monomer.monomerItem.props, + MonomerClass: monomer.constructor.name, + }; + if ( monomer instanceof Chem && monomer.monomerItem.props.isMicromoleculeFragment From fa9121feab1b0ca4339ba26973e76627d08e1245 Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Wed, 10 Jan 2024 17:59:17 +0100 Subject: [PATCH 03/11] - removed line --- .../src/application/render/renderers/RenderersManager.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts b/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts index c1ec48f979..1d969c9928 100644 --- a/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts +++ b/packages/ketcher-core/src/application/render/renderers/RenderersManager.ts @@ -54,7 +54,6 @@ export class RenderersManager { public addMonomer(monomer: BaseMonomer, callback?: () => void) { const [, MonomerRenderer] = monomerFactory(monomer.monomerItem); const monomerRenderer = new MonomerRenderer(monomer); - this.monomers.set(monomer.id, monomerRenderer); monomerRenderer.show(this.theme); this.markForReEnumeration(); From 12f8e7000e450fedff4232cf033eb9d91c8c4b38 Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Thu, 11 Jan 2024 13:21:28 +0100 Subject: [PATCH 04/11] - updated solution / - fixed tests, snapshots --- .../monomers-connected-with-bonds-expected.ket | 3 +++ .../Molfiles-V3000/monomers-and-chem.mol | 18 +++++++++--------- .../domain/serializers/ket/ketSerializer.ts | 7 +------ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket b/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket index fbcb54d4de..234b774498 100644 --- a/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket +++ b/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket @@ -347,6 +347,7 @@ ] } ], + "class": "Q", "classHELM": "RNA", "id": "baA___N-benzyl-adenine", "fullName": "N-benzyl-adenine", @@ -532,6 +533,7 @@ ] } ], + "class": "Q", "classHELM": "RNA", "id": "12ddR___1',2'-Di-Deoxy-Ribose", "fullName": "2'-Di-Deoxy-Ribose", @@ -638,6 +640,7 @@ ] } ], + "class": "Q", "classHELM": "RNA", "id": "P___Phosphate", "fullName": "Phosphate", diff --git a/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol b/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol index 5b5d892f81..e721d49b04 100644 --- a/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol +++ b/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol @@ -5,9 +5,9 @@ M V30 BEGIN CTAB M V30 COUNTS 3 2 0 0 0 M V30 BEGIN ATOM -M V30 1 A 2.495 -1.66917 0.0 0 CLASS=AA ATTCHORD=(4 2 Br 3 Al) -M V30 2 Bal 3.85167 -1.65417 0.0 0 CLASS=AA ATTCHORD=(2 1 Al) -M V30 3 Az 2.52833 -2.78583 0.0 0 CLASS=CHEM ATTCHORD=(2 1 Al) +M V30 1 A 2.495 -1.66917 0.0 0 CLASS=Q ATTCHORD=(4 2 Br 3 Al) +M V30 2 Bal 3.85167 -1.65417 0.0 0 CLASS=Q ATTCHORD=(2 1 Al) +M V30 3 Az 2.52833 -2.78583 0.0 0 CLASS=Q ATTCHORD=(2 1 Al) M V30 END ATOM M V30 BEGIN BOND M V30 1 1 1 2 @@ -15,7 +15,7 @@ M V30 2 1 1 3 M V30 END BOND M V30 END CTAB M V30 BEGIN TEMPLATE -M V30 TEMPLATE 1 AA/Ala/A NATREPLACE=AA/A +M V30 TEMPLATE 1 Q/A/A NATREPLACE=Q/A M V30 BEGIN CTAB M V30 COUNTS 7 6 3 0 0 M V30 BEGIN ATOM @@ -47,10 +47,10 @@ M V30 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) LABEL=OH CLAS- M V30 S=LGRP M V30 3 SUP 3 ATOMS=(5 1 2 3 4 5) XBONDS=(2 6 5) BRKXYZ=(9 -0.421350 0.18850- M V30 4 0.000000 0.384040 0.256014 0.000000 0.000000 0.000000 0.000000) LABE- -M V30 L=A CLASS=AA SAP=(3 1 7 Al) SAP=(3 4 6 Br) NATREPLACE=AA/A +M V30 L=A CLASS=Q SAP=(3 1 7 Al) SAP=(3 4 6 Br) NATREPLACE=Q/A M V30 END SGROUP M V30 END CTAB -M V30 TEMPLATE 2 AA/Bal/Bal NATREPLACE=AA/A +M V30 TEMPLATE 2 Q/Bal/Bal NATREPLACE=Q/A M V30 BEGIN CTAB M V30 COUNTS 7 6 3 0 0 M V30 BEGIN ATOM @@ -79,10 +79,10 @@ M V30 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) LABEL=OH CLAS- M V30 S=LGRP M V30 3 SUP 3 ATOMS=(5 1 2 3 5 6) XBONDS=(2 3 6) BRKXYZ=(9 0.446400 0.386600- M V30 0.000000 -0.446400 -0.386600 0.000000 0.000000 0.000000 0.000000) LAB- -M V30 EL=Bal CLASS=AA SAP=(3 6 7 Al) SAP=(3 2 4 Br) NATREPLACE=AA/A +M V30 EL=Bal CLASS=Q SAP=(3 6 7 Al) SAP=(3 2 4 Br) NATREPLACE=Q/A M V30 END SGROUP M V30 END CTAB -M V30 TEMPLATE 3 CHEM/Az/Az +M V30 TEMPLATE 3 Q/Az/Az M V30 BEGIN CTAB M V30 COUNTS 9 8 2 0 0 M V30 BEGIN ATOM @@ -112,7 +112,7 @@ M V30 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) LABEL=OH CLASS=- M V30 LGRP M V30 2 SUP 2 ATOMS=(8 1 2 3 4 5 6 7 8) XBONDS=(1 8) BRKXYZ=(9 -0.432270 0.0- M V30 00000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) - -M V30 LABEL=Az CLASS=CHEM SAP=(3 2 9 Al) +M V30 LABEL=Az CLASS=Q SAP=(3 2 9 Al) M V30 END SGROUP M V30 END CTAB M V30 END TEMPLATE diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index 505af6a985..8e219e24f6 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -441,11 +441,6 @@ export class KetSerializer implements Serializer { }; drawingEntitiesManager.monomers.forEach((monomer) => { - monomer.monomerItem.props = { - ...monomer.monomerItem.props, - MonomerClass: monomer.constructor.name, - }; - if ( monomer instanceof Chem && monomer.monomerItem.props.isMicromoleculeFragment @@ -479,7 +474,7 @@ export class KetSerializer implements Serializer { this.serializeMicromolecules(monomer.monomerItem.struct, monomer), ).mol0, type: 'monomerTemplate', - class: monomer.monomerItem.props.MonomerClass, + class: monomer.constructor.name, classHELM: monomer.monomerItem.props.MonomerType, id: templateId, fullName: monomer.monomerItem.props.Name, From 3f1d183f58ed2517abbb2df852906f2c332ca7dd Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Thu, 11 Jan 2024 17:20:00 +0100 Subject: [PATCH 05/11] - created mapper returned back .mol / .ket files --- .../monomers-connected-with-bonds-expected.ket | 3 --- .../Molfiles-V3000/monomers-and-chem.mol | 18 +++++++++--------- .../domain/serializers/ket/ketSerializer.ts | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket b/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket index 234b774498..fbcb54d4de 100644 --- a/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket +++ b/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket @@ -347,7 +347,6 @@ ] } ], - "class": "Q", "classHELM": "RNA", "id": "baA___N-benzyl-adenine", "fullName": "N-benzyl-adenine", @@ -533,7 +532,6 @@ ] } ], - "class": "Q", "classHELM": "RNA", "id": "12ddR___1',2'-Di-Deoxy-Ribose", "fullName": "2'-Di-Deoxy-Ribose", @@ -640,7 +638,6 @@ ] } ], - "class": "Q", "classHELM": "RNA", "id": "P___Phosphate", "fullName": "Phosphate", diff --git a/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol b/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol index e721d49b04..5b5d892f81 100644 --- a/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol +++ b/ketcher-autotests/tests/test-data/Molfiles-V3000/monomers-and-chem.mol @@ -5,9 +5,9 @@ M V30 BEGIN CTAB M V30 COUNTS 3 2 0 0 0 M V30 BEGIN ATOM -M V30 1 A 2.495 -1.66917 0.0 0 CLASS=Q ATTCHORD=(4 2 Br 3 Al) -M V30 2 Bal 3.85167 -1.65417 0.0 0 CLASS=Q ATTCHORD=(2 1 Al) -M V30 3 Az 2.52833 -2.78583 0.0 0 CLASS=Q ATTCHORD=(2 1 Al) +M V30 1 A 2.495 -1.66917 0.0 0 CLASS=AA ATTCHORD=(4 2 Br 3 Al) +M V30 2 Bal 3.85167 -1.65417 0.0 0 CLASS=AA ATTCHORD=(2 1 Al) +M V30 3 Az 2.52833 -2.78583 0.0 0 CLASS=CHEM ATTCHORD=(2 1 Al) M V30 END ATOM M V30 BEGIN BOND M V30 1 1 1 2 @@ -15,7 +15,7 @@ M V30 2 1 1 3 M V30 END BOND M V30 END CTAB M V30 BEGIN TEMPLATE -M V30 TEMPLATE 1 Q/A/A NATREPLACE=Q/A +M V30 TEMPLATE 1 AA/Ala/A NATREPLACE=AA/A M V30 BEGIN CTAB M V30 COUNTS 7 6 3 0 0 M V30 BEGIN ATOM @@ -47,10 +47,10 @@ M V30 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) LABEL=OH CLAS- M V30 S=LGRP M V30 3 SUP 3 ATOMS=(5 1 2 3 4 5) XBONDS=(2 6 5) BRKXYZ=(9 -0.421350 0.18850- M V30 4 0.000000 0.384040 0.256014 0.000000 0.000000 0.000000 0.000000) LABE- -M V30 L=A CLASS=Q SAP=(3 1 7 Al) SAP=(3 4 6 Br) NATREPLACE=Q/A +M V30 L=A CLASS=AA SAP=(3 1 7 Al) SAP=(3 4 6 Br) NATREPLACE=AA/A M V30 END SGROUP M V30 END CTAB -M V30 TEMPLATE 2 Q/Bal/Bal NATREPLACE=Q/A +M V30 TEMPLATE 2 AA/Bal/Bal NATREPLACE=AA/A M V30 BEGIN CTAB M V30 COUNTS 7 6 3 0 0 M V30 BEGIN ATOM @@ -79,10 +79,10 @@ M V30 0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) LABEL=OH CLAS- M V30 S=LGRP M V30 3 SUP 3 ATOMS=(5 1 2 3 5 6) XBONDS=(2 3 6) BRKXYZ=(9 0.446400 0.386600- M V30 0.000000 -0.446400 -0.386600 0.000000 0.000000 0.000000 0.000000) LAB- -M V30 EL=Bal CLASS=Q SAP=(3 6 7 Al) SAP=(3 2 4 Br) NATREPLACE=Q/A +M V30 EL=Bal CLASS=AA SAP=(3 6 7 Al) SAP=(3 2 4 Br) NATREPLACE=AA/A M V30 END SGROUP M V30 END CTAB -M V30 TEMPLATE 3 Q/Az/Az +M V30 TEMPLATE 3 CHEM/Az/Az M V30 BEGIN CTAB M V30 COUNTS 9 8 2 0 0 M V30 BEGIN ATOM @@ -112,7 +112,7 @@ M V30 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) LABEL=OH CLASS=- M V30 LGRP M V30 2 SUP 2 ATOMS=(8 1 2 3 4 5 6 7 8) XBONDS=(1 8) BRKXYZ=(9 -0.432270 0.0- M V30 00000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000) - -M V30 LABEL=Az CLASS=Q SAP=(3 2 9 Al) +M V30 LABEL=Az CLASS=CHEM SAP=(3 2 9 Al) M V30 END SGROUP M V30 END CTAB M V30 END TEMPLATE diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index 8e219e24f6..97a2873ecd 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -424,6 +424,21 @@ export class KetSerializer implements Serializer { return { modelChanges: command, drawingEntitiesManager }; } + private monomerClassToKetClass(constructor) { + // This is done according to spec + // https://kb.epam.com/pages/viewpage.action?spaceKey=EPMLSOP&title=KET+specification+for+macromolecules# + switch (constructor.name) { + case 'Peptide': + return 'AminoAcid'; + case 'RNABase': + return 'Base'; + case 'Chem': + return 'CHEM'; + default: + return constructor.name; + } + } + deserialize(fileContent: string) { return this.deserializeToStruct(fileContent); } @@ -474,7 +489,7 @@ export class KetSerializer implements Serializer { this.serializeMicromolecules(monomer.monomerItem.struct, monomer), ).mol0, type: 'monomerTemplate', - class: monomer.constructor.name, + class: this.monomerClassToKetClass(monomer.constructor), classHELM: monomer.monomerItem.props.MonomerType, id: templateId, fullName: monomer.monomerItem.props.Name, From 0a7d2058b2c380aa20a30974af0beaab4f37a806 Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Thu, 11 Jan 2024 17:21:41 +0100 Subject: [PATCH 06/11] - changed name --- .../ketcher-core/src/domain/serializers/ket/ketSerializer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index 97a2873ecd..b11bdfaad8 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -424,7 +424,7 @@ export class KetSerializer implements Serializer { return { modelChanges: command, drawingEntitiesManager }; } - private monomerClassToKetClass(constructor) { + private mapMonomerClassToKetClass(constructor) { // This is done according to spec // https://kb.epam.com/pages/viewpage.action?spaceKey=EPMLSOP&title=KET+specification+for+macromolecules# switch (constructor.name) { @@ -489,7 +489,7 @@ export class KetSerializer implements Serializer { this.serializeMicromolecules(monomer.monomerItem.struct, monomer), ).mol0, type: 'monomerTemplate', - class: this.monomerClassToKetClass(monomer.constructor), + class: this.mapMonomerClassToKetClass(monomer.constructor), classHELM: monomer.monomerItem.props.MonomerType, id: templateId, fullName: monomer.monomerItem.props.Name, From 35c4b5f8ce0df54a262881332b22ce2303495c1b Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Thu, 11 Jan 2024 17:57:36 +0100 Subject: [PATCH 07/11] - changed function --- .../domain/serializers/ket/ketSerializer.ts | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index b11bdfaad8..6b48bb4af0 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -14,7 +14,14 @@ * limitations under the License. ***************************************************************************/ -import { Struct, Vec2 } from 'domain/entities'; +import { + Peptide, + Phosphate, + RNABase, + Struct, + Sugar, + Vec2, +} from 'domain/entities'; import { arrowToKet, plusToKet } from './toKet/rxnToKet'; import { Serializer } from '../serializers.types'; @@ -425,18 +432,15 @@ export class KetSerializer implements Serializer { } private mapMonomerClassToKetClass(constructor) { - // This is done according to spec - // https://kb.epam.com/pages/viewpage.action?spaceKey=EPMLSOP&title=KET+specification+for+macromolecules# - switch (constructor.name) { - case 'Peptide': - return 'AminoAcid'; - case 'RNABase': - return 'Base'; - case 'Chem': - return 'CHEM'; - default: - return constructor.name; - } + const mapping = { + [Peptide.name]: 'AminoAcid', + [RNABase.name]: 'Base', + [Chem.name]: 'CHEM', + [Sugar.name]: 'Sugar', + [Phosphate.name]: 'Phosphate', + }; + + return mapping[constructor.name]; } deserialize(fileContent: string) { From fced5abe136a7f94d817ff8f265e7b57e58f6b3f Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Fri, 12 Jan 2024 14:47:21 +0100 Subject: [PATCH 08/11] - added monomerFactory instead of custom function --- .../operations/monomer/monomerFactory.ts | 18 +++++++++--------- .../src/application/formatters/types/ket.ts | 10 ++++++++++ .../domain/serializers/ket/ketSerializer.ts | 9 ++++++--- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/ketcher-core/src/application/editor/operations/monomer/monomerFactory.ts b/packages/ketcher-core/src/application/editor/operations/monomer/monomerFactory.ts index 74d9e0ea33..0403969087 100644 --- a/packages/ketcher-core/src/application/editor/operations/monomer/monomerFactory.ts +++ b/packages/ketcher-core/src/application/editor/operations/monomer/monomerFactory.ts @@ -12,7 +12,7 @@ import { Chem } from 'domain/entities/Chem'; import { Sugar } from 'domain/entities/Sugar'; import { Phosphate } from 'domain/entities/Phosphate'; import { RNABase } from 'domain/entities/RNABase'; -import { monomerClass } from 'application/formatters/types/ket'; +import { ketMonomerClass } from 'application/formatters/types/ket'; type DerivedClass = new (...args: unknown[]) => T; export const MONOMER_CONST = { @@ -41,11 +41,11 @@ export const monomerFactory = ( ): [ Monomer: Monomer, MonomerRenderer: DerivedClass, - monomerClass: monomerClass, + ketMonomerClass: ketMonomerClass, ] => { let Monomer; let MonomerRenderer; - let monomerClass: monomerClass; + let ketMonomerClass: ketMonomerClass; if ( monomer.props.MonomerType === MONOMER_CONST.CHEM || @@ -55,26 +55,26 @@ export const monomerFactory = ( ) { Monomer = Chem; MonomerRenderer = ChemRenderer; - monomerClass = 'CHEM'; + ketMonomerClass = 'CHEM'; } else if (monomer.props.MonomerType === MONOMER_CONST.PEPTIDE) { Monomer = Peptide; MonomerRenderer = PeptideRenderer; - monomerClass = 'PEPTIDE'; + ketMonomerClass = 'AminoAcid'; } else { if (monomer.props.MonomerNaturalAnalogCode === MONOMER_CONST.R) { Monomer = Sugar; MonomerRenderer = SugarRenderer; - monomerClass = 'RNA'; + ketMonomerClass = 'Sugar'; } else if (monomer.props.MonomerNaturalAnalogCode === MONOMER_CONST.P) { Monomer = Phosphate; MonomerRenderer = PhosphateRenderer; - monomerClass = 'RNA'; + ketMonomerClass = 'Phosphate'; } else { Monomer = RNABase; MonomerRenderer = RNABaseRenderer; - monomerClass = 'RNA'; + ketMonomerClass = 'Base'; } } - return [Monomer, MonomerRenderer, monomerClass]; + return [Monomer, MonomerRenderer, ketMonomerClass]; }; diff --git a/packages/ketcher-core/src/application/formatters/types/ket.ts b/packages/ketcher-core/src/application/formatters/types/ket.ts index 69379db434..33672e38ad 100644 --- a/packages/ketcher-core/src/application/formatters/types/ket.ts +++ b/packages/ketcher-core/src/application/formatters/types/ket.ts @@ -38,6 +38,16 @@ export type monomerClass = | 'DNA' | 'MODDNA'; +export type ketMonomerClass = + | 'AminoAcid' + | 'Sugar' + | 'Phosphate' + | 'Base' + | 'Terminator' + | 'Linker' + | 'Unknown' + | 'CHEM'; + export type IKetAttachmentPointType = 'left' | 'right' | 'side'; export interface IKetAttachmentPoint { diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index 6b48bb4af0..dddb786f66 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -49,7 +49,10 @@ import { monomerToDrawingEntity } from 'domain/serializers/ket/fromKet/monomerTo import assert from 'assert'; import { polymerBondToDrawingEntity } from 'domain/serializers/ket/fromKet/polymerBondToDrawingEntity'; import { getMonomerUniqueKey } from 'domain/helpers/monomers'; -import { MONOMER_CONST } from 'application/editor/operations/monomer/monomerFactory'; +import { + MONOMER_CONST, + monomerFactory, +} from 'application/editor/operations/monomer/monomerFactory'; import { KetcherLogger } from 'utilities'; import { Chem } from 'domain/entities/Chem'; import { DrawingEntitiesManager } from 'domain/entities/DrawingEntitiesManager'; @@ -485,15 +488,15 @@ export class KetSerializer implements Serializer { seqid: monomer.monomerItem.seqId, }; fileContent.root.nodes.push(getKetRef(monomerName)); + const [, , monomerClass] = monomerFactory(monomer.monomerItem); const templateNameWithPrefix = setMonomerTemplatePrefix(templateId); - if (!fileContent[templateNameWithPrefix]) { fileContent[templateNameWithPrefix] = { ...JSON.parse( this.serializeMicromolecules(monomer.monomerItem.struct, monomer), ).mol0, type: 'monomerTemplate', - class: this.mapMonomerClassToKetClass(monomer.constructor), + class: monomer.monomerItem.props.MonomerClass || monomerClass, classHELM: monomer.monomerItem.props.MonomerType, id: templateId, fullName: monomer.monomerItem.props.Name, From c142f7325403bddc8b6d54f2f773dc6c37fd8a50 Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Fri, 12 Jan 2024 14:49:31 +0100 Subject: [PATCH 09/11] - removed old function --- .../src/domain/serializers/ket/ketSerializer.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index dddb786f66..6ac610b291 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -434,18 +434,6 @@ export class KetSerializer implements Serializer { return { modelChanges: command, drawingEntitiesManager }; } - private mapMonomerClassToKetClass(constructor) { - const mapping = { - [Peptide.name]: 'AminoAcid', - [RNABase.name]: 'Base', - [Chem.name]: 'CHEM', - [Sugar.name]: 'Sugar', - [Phosphate.name]: 'Phosphate', - }; - - return mapping[constructor.name]; - } - deserialize(fileContent: string) { return this.deserializeToStruct(fileContent); } From a0c6c16ef5efdb2dd29a1c3e3799fbeaba1214bc Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Fri, 12 Jan 2024 14:53:03 +0100 Subject: [PATCH 10/11] - removed extra types --- .../src/domain/serializers/ket/ketSerializer.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts index 6ac610b291..0d309a2671 100644 --- a/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts +++ b/packages/ketcher-core/src/domain/serializers/ket/ketSerializer.ts @@ -14,14 +14,7 @@ * limitations under the License. ***************************************************************************/ -import { - Peptide, - Phosphate, - RNABase, - Struct, - Sugar, - Vec2, -} from 'domain/entities'; +import { Struct, Vec2 } from 'domain/entities'; import { arrowToKet, plusToKet } from './toKet/rxnToKet'; import { Serializer } from '../serializers.types'; From ab145d9ab60aa26042e0c3cc9bc493de0fd55fdd Mon Sep 17 00:00:00 2001 From: Konstantin Zharich Date: Fri, 12 Jan 2024 15:15:20 +0100 Subject: [PATCH 11/11] - updated snapshots --- .../test-data/KET/monomers-connected-with-bonds-expected.ket | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket b/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket index fbcb54d4de..22844c143a 100644 --- a/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket +++ b/ketcher-autotests/tests/test-data/KET/monomers-connected-with-bonds-expected.ket @@ -347,6 +347,7 @@ ] } ], + "class": "Base", "classHELM": "RNA", "id": "baA___N-benzyl-adenine", "fullName": "N-benzyl-adenine", @@ -532,6 +533,7 @@ ] } ], + "class": "Sugar", "classHELM": "RNA", "id": "12ddR___1',2'-Di-Deoxy-Ribose", "fullName": "2'-Di-Deoxy-Ribose", @@ -638,6 +640,7 @@ ] } ], + "class": "Phosphate", "classHELM": "RNA", "id": "P___Phosphate", "fullName": "Phosphate",