@datagrok/bio 2.11.40 → 2.11.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/package-test.js +5 -5
- package/dist/package-test.js.LICENSE.txt +8 -0
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +5 -5
- package/dist/package.js.LICENSE.txt +8 -0
- package/dist/package.js.map +1 -1
- package/package.json +1 -1
- package/src/utils/helm-to-molfile.ts +30 -6
- package/src/utils/poly-tool/transformation.ts +2 -2
- package/src/utils/poly-tool/ui.ts +3 -1
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"name": "Leonid Stolbov",
|
|
6
6
|
"email": "lstolbov@datagrok.ai"
|
|
7
7
|
},
|
|
8
|
-
"version": "2.11.
|
|
8
|
+
"version": "2.11.41",
|
|
9
9
|
"description": "Bioinformatics support (import/export of sequences, conversion, visualization, analysis). [See more](https://github.com/datagrok-ai/public/blob/master/packages/Bio/README.md) for details.",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* Do not change these import lines to match external modules in webpack configuration */
|
|
2
2
|
import * as grok from 'datagrok-api/grok';
|
|
3
|
-
import * as ui from 'datagrok-api/ui';
|
|
4
3
|
import * as DG from 'datagrok-api/dg';
|
|
4
|
+
import * as OCL from 'openchemlib/full';
|
|
5
5
|
|
|
6
6
|
import {MolfileHandler} from '@datagrok-libraries/chem-meta/src/parsing-utils/molfile-handler';
|
|
7
7
|
import {MolfileHandlerBase} from '@datagrok-libraries/chem-meta/src/parsing-utils/molfile-handler-base';
|
|
8
|
-
import {RDModule} from '@datagrok-libraries/chem-meta/src/rdkit-api';
|
|
8
|
+
import {RDModule, RDMol} from '@datagrok-libraries/chem-meta/src/rdkit-api';
|
|
9
9
|
import {HELM_POLYMER_TYPE, HELM_RGROUP_FIELDS} from '@datagrok-libraries/bio/src/utils/const';
|
|
10
10
|
import {errInfo} from '@datagrok-libraries/bio/src/utils/err-info';
|
|
11
11
|
|
|
@@ -51,10 +51,10 @@ export async function helm2mol(df: DG.DataFrame, helmCol: DG.Column<string>): Pr
|
|
|
51
51
|
|
|
52
52
|
/** Translate HELM column into molfile column and append to the dataframe */
|
|
53
53
|
export async function getMolColumnFromHelm(
|
|
54
|
-
df: DG.DataFrame, helmCol: DG.Column<string
|
|
54
|
+
df: DG.DataFrame, helmCol: DG.Column<string>, chiralityEngine?: boolean
|
|
55
55
|
): Promise<DG.Column<string>> {
|
|
56
56
|
const converter = new HelmToMolfileConverter(helmCol, df);
|
|
57
|
-
const molCol = await converter.convertToRdKitBeautifiedMolfileColumn();
|
|
57
|
+
const molCol = await converter.convertToRdKitBeautifiedMolfileColumn(chiralityEngine);
|
|
58
58
|
molCol.semType = DG.SEMTYPE.MOLECULE;
|
|
59
59
|
return molCol;
|
|
60
60
|
}
|
|
@@ -89,7 +89,28 @@ export class HelmToMolfileConverter {
|
|
|
89
89
|
return smiles;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
async
|
|
92
|
+
async getMolV3000ViaOCL(beautifiedMols: (RDMol | null)[], columnName: string) {
|
|
93
|
+
const beautifiedMolV2000 = beautifiedMols.map((mol) => {
|
|
94
|
+
if (mol === null)
|
|
95
|
+
return '';
|
|
96
|
+
const molBlock = mol.get_molblock();
|
|
97
|
+
mol!.delete();
|
|
98
|
+
return molBlock;
|
|
99
|
+
});
|
|
100
|
+
const molv3000Arr = new Array<string>(beautifiedMolV2000.length);
|
|
101
|
+
const chiralityPb = DG.TaskBarProgressIndicator.create(`Handling chirality...`);
|
|
102
|
+
for (let i = 0; i < beautifiedMolV2000.length; i++) {
|
|
103
|
+
const oclMolecule = OCL.Molecule.fromMolfile(beautifiedMolV2000[i]);
|
|
104
|
+
const molV3000 = oclMolecule.toMolfileV3();
|
|
105
|
+
molv3000Arr[i] = molV3000.replace('STERAC1', 'STEABS');
|
|
106
|
+
const progress = i/beautifiedMolV2000.length*100;
|
|
107
|
+
chiralityPb.update(progress, `${progress?.toFixed(2)}% of molecules completed`);
|
|
108
|
+
}
|
|
109
|
+
chiralityPb.close();
|
|
110
|
+
return DG.Column.fromStrings(columnName, molv3000Arr);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async convertToRdKitBeautifiedMolfileColumn(chiralityEngine?: boolean): Promise<DG.Column<string>> {
|
|
93
114
|
const smiles = await this.getSmilesList();
|
|
94
115
|
const rdKitModule: RDModule = await grok.functions.call('Chem:getRdKitModule');
|
|
95
116
|
const beautifiedMols = smiles.map((item) =>{
|
|
@@ -103,13 +124,16 @@ export class HelmToMolfileConverter {
|
|
|
103
124
|
return mol;
|
|
104
125
|
});
|
|
105
126
|
const columnName = this.df.columns.getUnusedName(`molfile(${this.helmColumn.name})`);
|
|
127
|
+
|
|
128
|
+
if (chiralityEngine)
|
|
129
|
+
return await this.getMolV3000ViaOCL(beautifiedMols, columnName);
|
|
106
130
|
return DG.Column.fromStrings(columnName, beautifiedMols.map((mol) => {
|
|
107
131
|
if (mol === null)
|
|
108
132
|
return '';
|
|
109
133
|
const molBlock = mol.get_v3Kmolblock();
|
|
110
134
|
mol!.delete();
|
|
111
135
|
return molBlock;
|
|
112
|
-
}));
|
|
136
|
+
}));
|
|
113
137
|
}
|
|
114
138
|
|
|
115
139
|
async convertToMolfileV2KColumn(): Promise<DG.Column<string>> {
|
|
@@ -221,7 +221,7 @@ function getHelmCycle(helm: string, source: ConnectionData): string {
|
|
|
221
221
|
}
|
|
222
222
|
|
|
223
223
|
export async function addTransformedColumn(
|
|
224
|
-
molColumn: DG.Column<string>, addHelm: boolean, ruleFiles: string[]
|
|
224
|
+
molColumn: DG.Column<string>, addHelm: boolean, ruleFiles: string[], chiralityEngine?: boolean
|
|
225
225
|
): Promise<void> {
|
|
226
226
|
const df = molColumn.dataFrame;
|
|
227
227
|
const uh = UnitsHandler.getOrCreate(molColumn);
|
|
@@ -243,7 +243,7 @@ export async function addTransformedColumn(
|
|
|
243
243
|
addCommonTags(targetHelmCol);
|
|
244
244
|
targetHelmCol.setTag('units', NOTATION.HELM);
|
|
245
245
|
|
|
246
|
-
const molCol = await getMolColumnFromHelm(df, targetHelmCol);
|
|
246
|
+
const molCol = await getMolColumnFromHelm(df, targetHelmCol, chiralityEngine);
|
|
247
247
|
molCol.name = df.columns.getUnusedName('molfile(' + molColumn.name + ')');
|
|
248
248
|
|
|
249
249
|
if (addHelm) {
|
|
@@ -121,10 +121,12 @@ export class PolyTool {
|
|
|
121
121
|
const addButton = this.getAddButton();
|
|
122
122
|
this.ruleFilesInputs = ui.div(await this.getRuleFilesBlock());
|
|
123
123
|
//const rulesFiles = ui.div(this.ruleFilesInputs);
|
|
124
|
+
const chiralityEngineInput = ui.boolInput('Chirality engine', false);
|
|
124
125
|
|
|
125
126
|
const div = ui.div([
|
|
126
127
|
targetColumnInput,
|
|
127
128
|
generateHelmChoiceInput,
|
|
129
|
+
chiralityEngineInput,
|
|
128
130
|
'Rules used',
|
|
129
131
|
this.ruleFilesInputs,
|
|
130
132
|
addButton
|
|
@@ -138,7 +140,7 @@ export class PolyTool {
|
|
|
138
140
|
grok.shell.warning('No marcomolecule column chosen!');
|
|
139
141
|
return;
|
|
140
142
|
}
|
|
141
|
-
addTransformedColumn(molCol!, generateHelmChoiceInput.value!, this.userRuleSettings.included);
|
|
143
|
+
addTransformedColumn(molCol!, generateHelmChoiceInput.value!, this.userRuleSettings.included, chiralityEngineInput.value!);
|
|
142
144
|
});
|
|
143
145
|
|
|
144
146
|
return this.dialog;
|