@datagrok-libraries/bio 5.9.11 → 5.9.13
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/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +3 -2
- package/index.ts +3 -1
- package/package.json +1 -1
- package/src/monomer-works/monomer-lib.d.ts +8 -6
- package/src/monomer-works/monomer-lib.d.ts.map +1 -1
- package/src/monomer-works/monomer-lib.js +15 -8
- package/src/{utils → monomer-works}/monomer-utils.d.ts +2 -1
- package/src/monomer-works/monomer-utils.d.ts.map +1 -0
- package/src/monomer-works/monomer-utils.js +181 -0
- package/src/monomer-works/monomer-works.d.ts +2 -2
- package/src/monomer-works/monomer-works.d.ts.map +1 -1
- package/src/monomer-works/monomer-works.js +5 -3
- package/src/types/index.d.ts +3 -6
- package/src/types/index.d.ts.map +1 -1
- package/src/types/index.js +1 -1
- package/src/utils/monomer-utils.d.ts.map +0 -1
- package/src/utils/monomer-utils.js +0 -123
package/index.d.ts
CHANGED
|
@@ -19,5 +19,6 @@ import { CanvasCallback, getPhylocanvasGlService, IPhylocanvasGlViewer, NodeStyl
|
|
|
19
19
|
import { IVdRegionsViewer } from './src/viewers/vd-regions-viewer';
|
|
20
20
|
import { PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer } from './src/viewers/web-logo-viewer';
|
|
21
21
|
import { MonomerLib } from './src/monomer-works/monomer-lib';
|
|
22
|
-
|
|
22
|
+
import { readLibrary } from './src/monomer-works/monomer-utils';
|
|
23
|
+
export { ALIGNMENT, ALPHABET, NOTATION, TAGS, NotationConverter, SplitterFunc, getStats, getAlphabetSimilarity, getSplitter, splitterAsFasta, splitterAsHelm, getSplitterForColumn, monomerToShort, splitAlignedSequences, SeqPalette, SeqPaletteBase, Aminoacids, AminoacidsPalettes, Nucleotides, NucleotidesPalettes, UnknownSeqPalettes, UnknownSeqPalette, pickUpPalette, getPaletteByType, PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer, UnitsHandler, DrawStyle, printLeftOrCentered, FastaFileHandler, VdRegionType, VdRegion, IVdRegionsViewer, NodeType, isLeaf, NodeCuttedType, PhylocanvasTreeNode, NodeStyleType, StylesType, IPhylocanvasGlViewer, TreeTypesNames, PhylocanvasGlServiceBase, CanvasCallback, PhylocanvasGlTask, getPhylocanvasGlService, PhylocanvasGL, Shapes, TreeTypes, Utils, Newick, INewickHelper, ITreeHelper, getTreeHelper, Monomer, IMonomerLib, MonomerWorks, MonomerLib, readLibrary };
|
|
23
24
|
//# sourceMappingURL=index.d.ts.map
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAElG,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAC,UAAU,EAAE,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAC,YAAY,EAAC,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC;AACnF,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACpE,OAAO,EAAC,SAAS,EAAE,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,SAAS,EACV,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAC,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAC,UAAU,EAAC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
package/index.js
CHANGED
|
@@ -19,5 +19,6 @@ import { VdRegion, VdRegionType } from './src/vd-regions';
|
|
|
19
19
|
import { getPhylocanvasGlService, PhylocanvasGlServiceBase, TreeTypesNames } from './src/viewers/phylocanvas-gl-viewer';
|
|
20
20
|
import { PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer } from './src/viewers/web-logo-viewer';
|
|
21
21
|
import { MonomerLib } from './src/monomer-works/monomer-lib';
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
import { readLibrary } from './src/monomer-works/monomer-utils';
|
|
23
|
+
export { NotationConverter, getStats, getAlphabetSimilarity, getSplitter, splitterAsFasta, splitterAsHelm, getSplitterForColumn, monomerToShort, splitAlignedSequences, SeqPaletteBase, Aminoacids, AminoacidsPalettes, Nucleotides, NucleotidesPalettes, UnknownSeqPalettes, UnknownSeqPalette, pickUpPalette, getPaletteByType, PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer, UnitsHandler, DrawStyle, printLeftOrCentered, FastaFileHandler, VdRegionType, VdRegion, isLeaf, TreeTypesNames, PhylocanvasGlServiceBase, getPhylocanvasGlService, PhylocanvasGL, Shapes, TreeTypes, Utils, Newick, getTreeHelper, MonomerWorks, MonomerLib, readLibrary };
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBQ1osT0FBTyxFQUFzQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRyxZQUFZO0FBQ1osT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBYSxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQWlDLE1BQU0sRUFBaUIsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUFDLGlCQUFpQixFQUFFLGtCQUFrQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixvQkFBb0IsRUFFcEIsY0FBYyxFQUNkLGNBQWMsRUFDZCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixxQkFBcUIsRUFLdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsYUFBYSxFQUFjLE1BQU0seUJBQXlCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUVMLHVCQUF1QixFQUd2Qix3QkFBd0IsRUFHeEIsY0FBYyxFQUNmLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDL0csT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RCxPQUFPLEVBS0wsaUJBQWlCLEVBRWpCLFFBQVEsRUFDUixxQkFBcUIsRUFDckIsV0FBVyxFQUNYLGVBQWUsRUFDZixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxxQkFBcUIsRUFFckIsY0FBYyxFQUNkLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLFlBQVksRUFDWixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osUUFBUSxFQUdFLE1BQU0sRUFLaEIsY0FBYyxFQUNkLHdCQUF3QixFQUd4Qix1QkFBdUIsRUFFdkIsYUFBYSxFQUNiLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLEtBQUssRUFDTCxNQUFNLEVBR04sYUFBYSxFQUtiLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL0B0cy1pZ25vcmVcbmltcG9ydCB7UGh5bG9jYW52YXNUcmVlTm9kZSwgTmV3aWNrLCBVdGlscywgU2hhcGVzLCBUcmVlVHlwZXN9IGZyb20gJ0BwaHlsb2NhbnZhcy9waHlsb2NhbnZhcy5nbCc7XG4vL0B0cy1pZ25vcmVcbmltcG9ydCB7UGh5bG9jYW52YXNHTH0gZnJvbSAnQHBoeWxvY2FudmFzL3BoeWxvY2FudmFzLmdsJztcblxuaW1wb3J0IHtBbWlub2FjaWRzLCBBbWlub2FjaWRzUGFsZXR0ZXN9IGZyb20gJy4vc3JjL2FtaW5vYWNpZHMnO1xuaW1wb3J0IHtNb25vbWVyV29ya3N9IGZyb20gJy4vc3JjL21vbm9tZXItd29ya3MvbW9ub21lci13b3Jrcyc7XG5pbXBvcnQge051Y2xlb3RpZGVzLCBOdWNsZW90aWRlc1BhbGV0dGVzfSBmcm9tICcuL3NyYy9udWNsZW90aWRlcyc7XG5pbXBvcnQge1NlcVBhbGV0dGUsIFNlcVBhbGV0dGVCYXNlfSBmcm9tICcuL3NyYy9zZXEtcGFsZXR0ZXMnO1xuaW1wb3J0IHtJTW9ub21lckxpYiwgTW9ub21lciwgTm9kZVR5cGUsIGlzTGVhZiwgTm9kZUN1dHRlZFR5cGV9IGZyb20gJy4vc3JjL3R5cGVzJztcbmltcG9ydCB7VW5rbm93blNlcVBhbGV0dGUsIFVua25vd25TZXFQYWxldHRlc30gZnJvbSAnLi9zcmMvdW5rbm93bic7XG5pbXBvcnQge0RyYXdTdHlsZSwgcHJpbnRMZWZ0T3JDZW50ZXJlZH0gZnJvbSAnLi9zcmMvdXRpbHMvY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQge0Zhc3RhRmlsZUhhbmRsZXJ9IGZyb20gJy4vc3JjL3V0aWxzL2Zhc3RhLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgZ2V0U3BsaXR0ZXIsXG4gIHNwbGl0dGVyQXNGYXN0YSxcbiAgZ2V0U3BsaXR0ZXJGb3JDb2x1bW4sXG4gIFNwbGl0dGVyRnVuYyxcbiAgbW9ub21lclRvU2hvcnQsXG4gIHNwbGl0dGVyQXNIZWxtLFxuICBnZXRTdGF0cyxcbiAgcGlja1VwUGFsZXR0ZSxcbiAgZ2V0UGFsZXR0ZUJ5VHlwZSxcbiAgZ2V0QWxwaGFiZXRTaW1pbGFyaXR5LFxuICBBTFBIQUJFVCxcbiAgTk9UQVRJT04sXG4gIFRBR1MsXG4gIEFMSUdOTUVOVFxufSBmcm9tICcuL3NyYy91dGlscy9tYWNyb21vbGVjdWxlJztcbmltcG9ydCB7SU5ld2lja0hlbHBlcn0gZnJvbSAnLi9zcmMvdXRpbHMvbmV3aWNrLWhlbHBlcic7XG5pbXBvcnQge05vdGF0aW9uQ29udmVydGVyfSBmcm9tICcuL3NyYy91dGlscy9ub3RhdGlvbi1jb252ZXJ0ZXInO1xuaW1wb3J0IHtzcGxpdEFsaWduZWRTZXF1ZW5jZXN9IGZyb20gJy4vc3JjL3V0aWxzL3NwbGl0dGVyJztcbmltcG9ydCB7Z2V0VHJlZUhlbHBlciwgSVRyZWVIZWxwZXJ9IGZyb20gJy4vc3JjL3V0aWxzL3RyZWUtaGVscGVyJztcbmltcG9ydCB7VW5pdHNIYW5kbGVyfSBmcm9tICcuL3NyYy91dGlscy91bml0cy1oYW5kbGVyJztcbmltcG9ydCB7VmRSZWdpb24sIFZkUmVnaW9uVHlwZX0gZnJvbSAnLi9zcmMvdmQtcmVnaW9ucyc7XG5pbXBvcnQge1xuICBDYW52YXNDYWxsYmFjayxcbiAgZ2V0UGh5bG9jYW52YXNHbFNlcnZpY2UsXG4gIElQaHlsb2NhbnZhc0dsVmlld2VyLFxuICBOb2RlU3R5bGVUeXBlLFxuICBQaHlsb2NhbnZhc0dsU2VydmljZUJhc2UsXG4gIFBoeWxvY2FudmFzR2xUYXNrLFxuICBTdHlsZXNUeXBlLFxuICBUcmVlVHlwZXNOYW1lc1xufSBmcm9tICcuL3NyYy92aWV3ZXJzL3BoeWxvY2FudmFzLWdsLXZpZXdlcic7XG5pbXBvcnQge0lWZFJlZ2lvbnNWaWV3ZXJ9IGZyb20gJy4vc3JjL3ZpZXdlcnMvdmQtcmVnaW9ucy12aWV3ZXInO1xuaW1wb3J0IHtQb3NpdGlvbkhlaWdodCwgUG9zaXRpb25JbmZvLCBQb3NpdGlvbk1vbm9tZXJJbmZvLCBXZWJMb2dvVmlld2VyfSBmcm9tICcuL3NyYy92aWV3ZXJzL3dlYi1sb2dvLXZpZXdlcic7XG5pbXBvcnQge01vbm9tZXJMaWJ9IGZyb20gJy4vc3JjL21vbm9tZXItd29ya3MvbW9ub21lci1saWInO1xuaW1wb3J0IHtyZWFkTGlicmFyeX0gZnJvbSAnLi9zcmMvbW9ub21lci13b3Jrcy9tb25vbWVyLXV0aWxzJztcblxuZXhwb3J0IHtcbiAgQUxJR05NRU5ULFxuICBBTFBIQUJFVCxcbiAgTk9UQVRJT04sXG4gIFRBR1MsXG4gIE5vdGF0aW9uQ29udmVydGVyLFxuICBTcGxpdHRlckZ1bmMsXG4gIGdldFN0YXRzLFxuICBnZXRBbHBoYWJldFNpbWlsYXJpdHksXG4gIGdldFNwbGl0dGVyLFxuICBzcGxpdHRlckFzRmFzdGEsXG4gIHNwbGl0dGVyQXNIZWxtLFxuICBnZXRTcGxpdHRlckZvckNvbHVtbixcbiAgbW9ub21lclRvU2hvcnQsXG4gIHNwbGl0QWxpZ25lZFNlcXVlbmNlcyxcbiAgU2VxUGFsZXR0ZSxcbiAgU2VxUGFsZXR0ZUJhc2UsXG4gIEFtaW5vYWNpZHMsXG4gIEFtaW5vYWNpZHNQYWxldHRlcyxcbiAgTnVjbGVvdGlkZXMsXG4gIE51Y2xlb3RpZGVzUGFsZXR0ZXMsXG4gIFVua25vd25TZXFQYWxldHRlcyxcbiAgVW5rbm93blNlcVBhbGV0dGUsXG4gIHBpY2tVcFBhbGV0dGUsXG4gIGdldFBhbGV0dGVCeVR5cGUsXG4gIFBvc2l0aW9uSGVpZ2h0LFxuICBQb3NpdGlvbkluZm8sXG4gIFBvc2l0aW9uTW9ub21lckluZm8sXG4gIFdlYkxvZ29WaWV3ZXIsXG4gIFVuaXRzSGFuZGxlcixcbiAgRHJhd1N0eWxlLFxuICBwcmludExlZnRPckNlbnRlcmVkLFxuICBGYXN0YUZpbGVIYW5kbGVyLFxuICBWZFJlZ2lvblR5cGUsXG4gIFZkUmVnaW9uLFxuICBJVmRSZWdpb25zVmlld2VyLFxuXG4gIE5vZGVUeXBlLCBpc0xlYWYsIE5vZGVDdXR0ZWRUeXBlLFxuICBQaHlsb2NhbnZhc1RyZWVOb2RlLFxuICBOb2RlU3R5bGVUeXBlLCBTdHlsZXNUeXBlLFxuXG4gIElQaHlsb2NhbnZhc0dsVmlld2VyLFxuICBUcmVlVHlwZXNOYW1lcyxcbiAgUGh5bG9jYW52YXNHbFNlcnZpY2VCYXNlLFxuICBDYW52YXNDYWxsYmFjayxcbiAgUGh5bG9jYW52YXNHbFRhc2ssXG4gIGdldFBoeWxvY2FudmFzR2xTZXJ2aWNlLFxuXG4gIFBoeWxvY2FudmFzR0wsXG4gIFNoYXBlcywgVHJlZVR5cGVzLFxuICBVdGlscyxcbiAgTmV3aWNrLFxuICBJTmV3aWNrSGVscGVyLFxuICBJVHJlZUhlbHBlcixcbiAgZ2V0VHJlZUhlbHBlcixcblxuICAvL01vbm9tZXIgbGliIGFuZCBmZWF0dXJlc1xuICBNb25vbWVyLFxuICBJTW9ub21lckxpYixcbiAgTW9ub21lcldvcmtzLFxuICBNb25vbWVyTGliLFxuICByZWFkTGlicmFyeVxufTtcbiJdfQ==
|
package/index.ts
CHANGED
|
@@ -46,6 +46,7 @@ import {
|
|
|
46
46
|
import {IVdRegionsViewer} from './src/viewers/vd-regions-viewer';
|
|
47
47
|
import {PositionHeight, PositionInfo, PositionMonomerInfo, WebLogoViewer} from './src/viewers/web-logo-viewer';
|
|
48
48
|
import {MonomerLib} from './src/monomer-works/monomer-lib';
|
|
49
|
+
import {readLibrary} from './src/monomer-works/monomer-utils';
|
|
49
50
|
|
|
50
51
|
export {
|
|
51
52
|
ALIGNMENT,
|
|
@@ -107,5 +108,6 @@ export {
|
|
|
107
108
|
Monomer,
|
|
108
109
|
IMonomerLib,
|
|
109
110
|
MonomerWorks,
|
|
110
|
-
MonomerLib
|
|
111
|
+
MonomerLib,
|
|
112
|
+
readLibrary
|
|
111
113
|
};
|
package/package.json
CHANGED
|
@@ -3,16 +3,18 @@ import { IMonomerLib, Monomer } from '../types/index';
|
|
|
3
3
|
export declare class MonomerLib implements IMonomerLib {
|
|
4
4
|
private _monomers;
|
|
5
5
|
private _onChanged;
|
|
6
|
+
constructor(monomers: {
|
|
7
|
+
[type: string]: {
|
|
8
|
+
[name: string]: Monomer;
|
|
9
|
+
};
|
|
10
|
+
});
|
|
6
11
|
getMonomer(monomerType: string, monomerName: string): Monomer | null;
|
|
7
12
|
getTypes(): string[];
|
|
8
|
-
|
|
13
|
+
getMonomerMolsByType(type: string): {
|
|
9
14
|
[symbol: string]: string;
|
|
10
15
|
};
|
|
16
|
+
getMonomerNamesByType(type: string): string[];
|
|
11
17
|
get onChanged(): Observable<any>;
|
|
12
|
-
update(
|
|
13
|
-
[type: string]: {
|
|
14
|
-
[name: string]: Monomer;
|
|
15
|
-
};
|
|
16
|
-
}): void;
|
|
18
|
+
update(lib: IMonomerLib): void;
|
|
17
19
|
}
|
|
18
20
|
//# sourceMappingURL=monomer-lib.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monomer-lib.d.ts","sourceRoot":"","sources":["monomer-lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAU,MAAM,MAAM,CAAC;AACzC,OAAO,EAAC,WAAW,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAEpD,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,SAAS,CAAuD;IACxE,OAAO,CAAC,UAAU,CAAsB;
|
|
1
|
+
{"version":3,"file":"monomer-lib.d.ts","sourceRoot":"","sources":["monomer-lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,UAAU,EAAU,MAAM,MAAM,CAAC;AACzC,OAAO,EAAC,WAAW,EAAE,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAEpD,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,SAAS,CAAuD;IACxE,OAAO,CAAC,UAAU,CAAsB;gBAE5B,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAA;KAAE;IAIrE,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAOpE,QAAQ,IAAI,MAAM,EAAE;IAIpB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC;IAU9D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAI7C,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,CAE/B;IAEM,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;CAkBtC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Subject } from 'rxjs';
|
|
2
2
|
export class MonomerLib {
|
|
3
|
-
constructor() {
|
|
3
|
+
constructor(monomers) {
|
|
4
4
|
this._monomers = {};
|
|
5
5
|
this._onChanged = new Subject();
|
|
6
|
+
this._monomers = monomers;
|
|
6
7
|
}
|
|
7
8
|
getMonomer(monomerType, monomerName) {
|
|
8
9
|
if (monomerType in this._monomers && monomerName in this._monomers[monomerType])
|
|
@@ -13,26 +14,32 @@ export class MonomerLib {
|
|
|
13
14
|
getTypes() {
|
|
14
15
|
return Object.keys(this._monomers);
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
+
getMonomerMolsByType(type) {
|
|
17
18
|
let res = {};
|
|
18
19
|
Object.keys(this._monomers[type]).forEach(monomerSymbol => {
|
|
19
20
|
res[monomerSymbol] = this._monomers[type][monomerSymbol].molfile;
|
|
20
21
|
});
|
|
21
22
|
return res;
|
|
22
23
|
}
|
|
24
|
+
getMonomerNamesByType(type) {
|
|
25
|
+
return Object.keys(this._monomers[type]);
|
|
26
|
+
}
|
|
23
27
|
get onChanged() {
|
|
24
28
|
return this._onChanged;
|
|
25
29
|
}
|
|
26
|
-
update(
|
|
27
|
-
|
|
30
|
+
update(lib) {
|
|
31
|
+
const typesNew = lib.getTypes();
|
|
32
|
+
const types = this.getTypes();
|
|
33
|
+
typesNew.forEach(type => {
|
|
28
34
|
//could possibly rewrite -> TODO: check duplicated monomer symbol
|
|
29
|
-
if (!
|
|
35
|
+
if (!types.includes(type))
|
|
30
36
|
this._monomers[type] = {};
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
const monomers = lib.getMonomerNamesByType(type);
|
|
38
|
+
Object.keys(monomers).forEach(monomerName => {
|
|
39
|
+
this._monomers[type][monomerName] = lib.getMonomer(type, monomerName);
|
|
33
40
|
});
|
|
34
41
|
});
|
|
35
42
|
this._onChanged.next();
|
|
36
43
|
}
|
|
37
44
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb25vbWVyLWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3pDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksUUFBeUQ7UUFIN0QsY0FBUyxHQUFvRCxFQUFFLENBQUM7UUFDaEUsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFHdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFtQixFQUFFLFdBQW1CO1FBQ2pELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFVLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVyxDQUFDO1lBQy9FLE9BQU8sSUFBSSxDQUFDLFNBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7WUFFakQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFZO1FBQy9CLElBQUksR0FBRyxHQUErQixFQUFFLENBQUM7UUFFekMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVk7UUFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBZ0I7UUFDNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU5QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLGlFQUFpRTtZQUVqRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTdCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUUsQ0FBQztZQUN6RSxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0lNb25vbWVyTGliLCBNb25vbWVyfSBmcm9tICcuLi90eXBlcy9pbmRleCc7XG5cbmV4cG9ydCBjbGFzcyBNb25vbWVyTGliIGltcGxlbWVudHMgSU1vbm9tZXJMaWIge1xuICBwcml2YXRlIF9tb25vbWVyczogeyBbdHlwZTogc3RyaW5nXTogeyBbbmFtZTogc3RyaW5nXTogTW9ub21lciB9IH0gPSB7fTtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKG1vbm9tZXJzOiB7IFt0eXBlOiBzdHJpbmddOiB7IFtuYW1lOiBzdHJpbmddOiBNb25vbWVyIH0gfSkge1xuICAgIHRoaXMuX21vbm9tZXJzID0gbW9ub21lcnM7XG4gIH1cblxuICBnZXRNb25vbWVyKG1vbm9tZXJUeXBlOiBzdHJpbmcsIG1vbm9tZXJOYW1lOiBzdHJpbmcpOiBNb25vbWVyIHwgbnVsbCB7XG4gICAgaWYgKG1vbm9tZXJUeXBlIGluIHRoaXMuX21vbm9tZXJzISAmJiBtb25vbWVyTmFtZSBpbiB0aGlzLl9tb25vbWVycyFbbW9ub21lclR5cGVdKVxuICAgICAgcmV0dXJuIHRoaXMuX21vbm9tZXJzIVttb25vbWVyVHlwZV1bbW9ub21lck5hbWVdO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0VHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb25vbWVycyk7XG4gIH1cblxuICBnZXRNb25vbWVyTW9sc0J5VHlwZSh0eXBlOiBzdHJpbmcpOiB7W3N5bWJvbDogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgbGV0IHJlczoge1tzeW1ib2w6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMuX21vbm9tZXJzW3R5cGVdKS5mb3JFYWNoKG1vbm9tZXJTeW1ib2wgPT4ge1xuICAgICAgcmVzW21vbm9tZXJTeW1ib2xdID0gdGhpcy5fbW9ub21lcnNbdHlwZV1bbW9ub21lclN5bWJvbF0ubW9sZmlsZTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBnZXRNb25vbWVyTmFtZXNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb25vbWVyc1t0eXBlXSk7XG4gIH1cblxuICBnZXQgb25DaGFuZ2VkKCk6IE9ic2VydmFibGU8YW55PiB7IFxuICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZWQ7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlKGxpYjogSU1vbm9tZXJMaWIpOiB2b2lkIHtcbiAgICBjb25zdCB0eXBlc05ldyA9IGxpYi5nZXRUeXBlcygpO1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5nZXRUeXBlcygpO1xuXG4gICAgdHlwZXNOZXcuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgIC8vY291bGQgcG9zc2libHkgcmV3cml0ZSAtPiBUT0RPOiBjaGVjayBkdXBsaWNhdGVkIG1vbm9tZXIgc3ltYm9sXG5cbiAgICAgIGlmICghdHlwZXMuaW5jbHVkZXModHlwZSkpXG4gICAgICAgIHRoaXMuX21vbm9tZXJzIVt0eXBlXSA9IHt9O1xuXG4gICAgICBjb25zdCBtb25vbWVycyA9IGxpYi5nZXRNb25vbWVyTmFtZXNCeVR5cGUodHlwZSk7XG4gICAgICBPYmplY3Qua2V5cyhtb25vbWVycykuZm9yRWFjaChtb25vbWVyTmFtZSA9PntcbiAgICAgICAgdGhpcy5fbW9ub21lcnNbdHlwZV1bbW9ub21lck5hbWVdID0gbGliLmdldE1vbm9tZXIodHlwZSwgbW9ub21lck5hbWUpITtcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICB0aGlzLl9vbkNoYW5nZWQubmV4dCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
|
-
|
|
2
|
+
import { MonomerLib } from './monomer-lib';
|
|
3
|
+
export declare function readLibrary(path: string, fileName: string): Promise<MonomerLib>;
|
|
3
4
|
export declare function encodeMonomers(col: DG.Column): DG.Column | null;
|
|
4
5
|
export declare function getMolfilesFromSeq(col: DG.Column, monomersLibObject: any[]): any[][] | null;
|
|
5
6
|
export declare function getMolfilesFromSingleSeq(cell: DG.Cell, monomersLibObject: any[]): any[][] | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monomer-utils.d.ts","sourceRoot":"","sources":["monomer-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAStC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiDrF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAwB/D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAuB3F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAoBhG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAA;CAAE,CAYjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,GAAG,CA8BpE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
// import * as ui from 'datagrok-api/ui';
|
|
11
|
+
import * as DG from 'datagrok-api/dg';
|
|
12
|
+
import * as grok from 'datagrok-api/grok';
|
|
13
|
+
import { HELM_CORE_FIELDS, jsonSdfMonomerLibDict, MONOMER_ENCODE_MAX, MONOMER_ENCODE_MIN, SDF_MONOMER_NAME } from '../utils/const';
|
|
14
|
+
import { getSplitter } from '../utils/macromolecule';
|
|
15
|
+
import { MonomerLib } from './monomer-lib';
|
|
16
|
+
const expectedMonomerData = ['symbol', 'name', 'molfile', 'rgroups', 'polymerType', 'monomerType'];
|
|
17
|
+
export function readLibrary(path, fileName) {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
let data = [];
|
|
20
|
+
let file;
|
|
21
|
+
let dfSdf;
|
|
22
|
+
let fileSource = new DG.FileSource(path);
|
|
23
|
+
if (fileName.endsWith('.sdf')) {
|
|
24
|
+
const funcList = DG.Func.find({ package: 'Chem', name: 'importSdf' });
|
|
25
|
+
if (funcList.length === 1) {
|
|
26
|
+
file = yield fileSource.readAsBytes(fileName);
|
|
27
|
+
dfSdf = yield grok.functions.call('Chem:importSdf', { bytes: file });
|
|
28
|
+
data = createJsonMonomerLibFromSdf(dfSdf[0]);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
grok.shell.warning('Chem package is not installed');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const file = yield fileSource.readAsText(fileName);
|
|
36
|
+
data = JSON.parse(file);
|
|
37
|
+
}
|
|
38
|
+
let monomers = {};
|
|
39
|
+
const types = [];
|
|
40
|
+
//group monomers by their type
|
|
41
|
+
data.forEach(monomer => {
|
|
42
|
+
let monomerAdd = {
|
|
43
|
+
'symbol': monomer['symbol'],
|
|
44
|
+
'name': monomer['name'],
|
|
45
|
+
'naturalAnalog': monomer['naturalAnalog'],
|
|
46
|
+
'molfile': monomer['molfile'],
|
|
47
|
+
'rgroups': monomer['rgroups'],
|
|
48
|
+
'polymerType': monomer['polymerType'],
|
|
49
|
+
'monomerType': monomer['monomerType'],
|
|
50
|
+
'data': {}
|
|
51
|
+
};
|
|
52
|
+
Object.keys(monomer).forEach(prop => {
|
|
53
|
+
if (!expectedMonomerData.includes(prop))
|
|
54
|
+
monomerAdd.data[prop] = monomer[prop];
|
|
55
|
+
});
|
|
56
|
+
if (!types.includes(monomer['polymerType'])) {
|
|
57
|
+
monomers[monomer['polymerType']] = {};
|
|
58
|
+
types.push(monomer['polymerType']);
|
|
59
|
+
}
|
|
60
|
+
monomers[monomer['polymerType']][monomer['symbol']] = monomerAdd;
|
|
61
|
+
});
|
|
62
|
+
return new MonomerLib(monomers);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export function encodeMonomers(col) {
|
|
66
|
+
let encodeSymbol = MONOMER_ENCODE_MIN;
|
|
67
|
+
const monomerSymbolDict = {};
|
|
68
|
+
const units = col.tags[DG.TAGS.UNITS];
|
|
69
|
+
const sep = col.getTag("separator" /* TAGS.separator */);
|
|
70
|
+
const splitterFunc = getSplitter(units, sep);
|
|
71
|
+
const encodedStringArray = [];
|
|
72
|
+
for (let i = 0; i < col.length; ++i) {
|
|
73
|
+
let encodedMonomerStr = '';
|
|
74
|
+
const monomers = splitterFunc(col.get(i));
|
|
75
|
+
monomers.forEach((m) => {
|
|
76
|
+
if (!monomerSymbolDict[m]) {
|
|
77
|
+
if (encodeSymbol > MONOMER_ENCODE_MAX) {
|
|
78
|
+
grok.shell.error(`Not enough symbols to encode monomers`);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
monomerSymbolDict[m] = encodeSymbol;
|
|
82
|
+
encodeSymbol++;
|
|
83
|
+
}
|
|
84
|
+
encodedMonomerStr += String.fromCodePoint(monomerSymbolDict[m]);
|
|
85
|
+
});
|
|
86
|
+
encodedStringArray.push(encodedMonomerStr);
|
|
87
|
+
}
|
|
88
|
+
return DG.Column.fromStrings('encodedMolecules', encodedStringArray);
|
|
89
|
+
}
|
|
90
|
+
export function getMolfilesFromSeq(col, monomersLibObject) {
|
|
91
|
+
const units = col.tags[DG.TAGS.UNITS];
|
|
92
|
+
const sep = col.getTag('separator');
|
|
93
|
+
const splitterFunc = getSplitter(units, sep);
|
|
94
|
+
const monomersDict = createMomomersMolDict(monomersLibObject);
|
|
95
|
+
const molFiles = [];
|
|
96
|
+
for (let i = 0; i < col.length; ++i) {
|
|
97
|
+
const macroMolecule = col.get(i);
|
|
98
|
+
const monomers = splitterFunc(macroMolecule);
|
|
99
|
+
const molFilesForSeq = [];
|
|
100
|
+
for (let j = 0; j < monomers.length; ++j) {
|
|
101
|
+
if (monomers[j]) {
|
|
102
|
+
if (!monomersDict[monomers[j]]) {
|
|
103
|
+
grok.shell.warning(`Monomer ${monomers[j]} is missing in HELM library. Structure cannot be created`);
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
// what is the reason of double conversion?
|
|
107
|
+
molFilesForSeq.push(JSON.parse(JSON.stringify(monomersDict[monomers[j]])));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
molFiles.push(molFilesForSeq);
|
|
111
|
+
}
|
|
112
|
+
return molFiles;
|
|
113
|
+
}
|
|
114
|
+
export function getMolfilesFromSingleSeq(cell, monomersLibObject) {
|
|
115
|
+
const units = cell.column.tags[DG.TAGS.UNITS];
|
|
116
|
+
const sep = cell.column.getTag('separator');
|
|
117
|
+
const splitterFunc = getSplitter(units, sep);
|
|
118
|
+
const monomersDict = createMomomersMolDict(monomersLibObject);
|
|
119
|
+
const molFiles = [];
|
|
120
|
+
const macroMolecule = cell.value;
|
|
121
|
+
const monomers = splitterFunc(macroMolecule);
|
|
122
|
+
const molFilesForSeq = [];
|
|
123
|
+
for (let j = 0; j < monomers.length; ++j) {
|
|
124
|
+
if (monomers[j]) {
|
|
125
|
+
if (!monomersDict[monomers[j]]) {
|
|
126
|
+
grok.shell.warning(`Monomer ${monomers[j]} is missing in HELM library. Structure cannot be created`);
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
molFilesForSeq.push(JSON.parse(JSON.stringify(monomersDict[monomers[j]])));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
molFiles.push(molFilesForSeq);
|
|
133
|
+
return molFiles;
|
|
134
|
+
}
|
|
135
|
+
export function createMomomersMolDict(lib) {
|
|
136
|
+
const dict = {};
|
|
137
|
+
lib.forEach((it) => {
|
|
138
|
+
if (it['polymerType'] === 'PEPTIDE') {
|
|
139
|
+
const monomerObject = {};
|
|
140
|
+
HELM_CORE_FIELDS.forEach((field) => {
|
|
141
|
+
monomerObject[field] = it[field];
|
|
142
|
+
});
|
|
143
|
+
dict[it["symbol" /* HELM_FIELDS.SYMBOL */]] = monomerObject;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return dict;
|
|
147
|
+
}
|
|
148
|
+
export function createJsonMonomerLibFromSdf(table) {
|
|
149
|
+
const resultLib = [];
|
|
150
|
+
for (let i = 0; i < table.rowCount; i++) {
|
|
151
|
+
const monomer = {};
|
|
152
|
+
Object.keys(jsonSdfMonomerLibDict).forEach((key) => {
|
|
153
|
+
if (key === "symbol" /* HELM_FIELDS.SYMBOL */) {
|
|
154
|
+
const monomerSymbol = table.get(jsonSdfMonomerLibDict[key], i);
|
|
155
|
+
monomer[key] = monomerSymbol === '.' ? table.get(SDF_MONOMER_NAME, i) : monomerSymbol;
|
|
156
|
+
}
|
|
157
|
+
else if (key === "rgroups" /* HELM_FIELDS.RGROUPS */) {
|
|
158
|
+
const rgroups = table.get(jsonSdfMonomerLibDict[key], i).split('\n');
|
|
159
|
+
const jsonRgroups = [];
|
|
160
|
+
rgroups.forEach((g) => {
|
|
161
|
+
const rgroup = {};
|
|
162
|
+
const altAtom = g.substring(g.lastIndexOf(']') + 1);
|
|
163
|
+
const radicalNum = g.match(/\[R(\d+)\]/)[1];
|
|
164
|
+
rgroup["capGroupSmiles" /* RGROUP_FIELDS.CAP_GROUP_SMILES */] = altAtom === 'H' ? `[*:${radicalNum}][H]` : `O[*:${radicalNum}]`;
|
|
165
|
+
rgroup["alternateId" /* RGROUP_FIELDS.ALTER_ID */] = altAtom === 'H' ? `R${radicalNum}-H` : `R${radicalNum}-OH`;
|
|
166
|
+
rgroup["capGroupName" /* RGROUP_FIELDS.CAP_GROUP_NAME */] = altAtom === 'H' ? `H` : `OH`;
|
|
167
|
+
rgroup["label" /* RGROUP_FIELDS.LABEL */] = `R${radicalNum}`;
|
|
168
|
+
jsonRgroups.push(rgroup);
|
|
169
|
+
});
|
|
170
|
+
monomer[key] = jsonRgroups;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
if (jsonSdfMonomerLibDict[key])
|
|
174
|
+
monomer[key] = table.get(jsonSdfMonomerLibDict[key], i);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
resultLib.push(monomer);
|
|
178
|
+
}
|
|
179
|
+
return resultLib;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9tZXItdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxPQUFPLEVBQ1EsZ0JBQWdCLEVBQWlCLHFCQUFxQixFQUNuRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFDekQsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsV0FBVyxFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFFbkcsTUFBTSxVQUFnQixXQUFXLENBQUMsSUFBWSxFQUFFLFFBQWdCOztRQUM5RCxJQUFJLElBQUksR0FBVSxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksVUFBVSxHQUFHLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxRQUFRLEdBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO1lBQy9FLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBRXpCLElBQUksR0FBRyxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFD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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5cbmltcG9ydCB7XG4gIEhFTE1fRklFTERTLCBIRUxNX0NPUkVfRklFTERTLCBSR1JPVVBfRklFTERTLCBqc29uU2RmTW9ub21lckxpYkRpY3QsXG4gIE1PTk9NRVJfRU5DT0RFX01BWCwgTU9OT01FUl9FTkNPREVfTUlOLCBTREZfTU9OT01FUl9OQU1FXG59IGZyb20gJy4uL3V0aWxzL2NvbnN0JztcbmltcG9ydCB7Z2V0U3BsaXR0ZXIsIFNwbGl0dGVyRnVuYywgVEFHU30gZnJvbSAnLi4vdXRpbHMvbWFjcm9tb2xlY3VsZSc7XG5pbXBvcnQge01vbm9tZXJ9IGZyb20gJy4uL3R5cGVzL2luZGV4JztcbmltcG9ydCB7IE1vbm9tZXJMaWIgfSBmcm9tICcuL21vbm9tZXItbGliJztcblxuY29uc3QgZXhwZWN0ZWRNb25vbWVyRGF0YSA9IFsnc3ltYm9sJywgJ25hbWUnLCAnbW9sZmlsZScsICdyZ3JvdXBzJywgJ3BvbHltZXJUeXBlJywgJ21vbm9tZXJUeXBlJ107XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTGlicmFyeShwYXRoOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPE1vbm9tZXJMaWI+IHtcbiAgbGV0IGRhdGE6IGFueVtdID0gW107XG4gIGxldCBmaWxlO1xuICBsZXQgZGZTZGY7XG4gIGxldCBmaWxlU291cmNlID0gbmV3IERHLkZpbGVTb3VyY2UocGF0aCk7XG4gIGlmIChmaWxlTmFtZS5lbmRzV2l0aCgnLnNkZicpKSB7XG4gICAgY29uc3QgZnVuY0xpc3Q6IERHLkZ1bmNbXSA9IERHLkZ1bmMuZmluZCh7cGFja2FnZTogJ0NoZW0nLCBuYW1lOiAnaW1wb3J0U2RmJ30pO1xuICAgIGlmIChmdW5jTGlzdC5sZW5ndGggPT09IDEpIHtcblxuICAgICAgZmlsZSA9IGF3YWl0IGZpbGVTb3VyY2UucmVhZEFzQnl0ZXMoZmlsZU5hbWUpO1xuICAgICAgZGZTZGYgPSBhd2FpdCBncm9rLmZ1bmN0aW9ucy5jYWxsKCdDaGVtOmltcG9ydFNkZicsIHtieXRlczogZmlsZX0pO1xuICAgICAgZGF0YSA9IGNyZWF0ZUpzb25Nb25vbWVyTGliRnJvbVNkZihkZlNkZlswXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyb2suc2hlbGwud2FybmluZygnQ2hlbSBwYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpbGVTb3VyY2UucmVhZEFzVGV4dChmaWxlTmFtZSk7XG4gICAgZGF0YSA9IEpTT04ucGFyc2UoZmlsZSk7XG4gIH1cblxuICBsZXQgbW9ub21lcnM6IHsgW3R5cGU6IHN0cmluZ106IHsgW25hbWU6IHN0cmluZ106IE1vbm9tZXIgfSB9ID0ge307XG4gIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICAvL2dyb3VwIG1vbm9tZXJzIGJ5IHRoZWlyIHR5cGVcbiAgZGF0YS5mb3JFYWNoKG1vbm9tZXIgPT4ge1xuICAgIGxldCBtb25vbWVyQWRkOiBNb25vbWVyID0ge1xuICAgICAgJ3N5bWJvbCc6IG1vbm9tZXJbJ3N5bWJvbCddLFxuICAgICAgJ25hbWUnOiBtb25vbWVyWyduYW1lJ10sXG4gICAgICAnbmF0dXJhbEFuYWxvZyc6IG1vbm9tZXJbJ25hdHVyYWxBbmFsb2cnXSxcbiAgICAgICdtb2xmaWxlJzogbW9ub21lclsnbW9sZmlsZSddLFxuICAgICAgJ3Jncm91cHMnOiBtb25vbWVyWydyZ3JvdXBzJ10sXG4gICAgICAncG9seW1lclR5cGUnOiBtb25vbWVyWydwb2x5bWVyVHlwZSddLFxuICAgICAgJ21vbm9tZXJUeXBlJzogbW9ub21lclsnbW9ub21lclR5cGUnXSxcbiAgICAgICdkYXRhJzoge31cbiAgICB9O1xuXG4gICAgT2JqZWN0LmtleXMobW9ub21lcikuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGlmICghZXhwZWN0ZWRNb25vbWVyRGF0YS5pbmNsdWRlcyhwcm9wKSlcbiAgICAgICAgbW9ub21lckFkZC5kYXRhW3Byb3BdID0gbW9ub21lcltwcm9wXTtcbiAgICB9KTtcbiAgICBcbiAgICBpZiAoIXR5cGVzLmluY2x1ZGVzKG1vbm9tZXJbJ3BvbHltZXJUeXBlJ10pKSB7XG4gICAgICBtb25vbWVyc1ttb25vbWVyWydwb2x5bWVyVHlwZSddXSA9IHt9O1xuICAgICAgdHlwZXMucHVzaChtb25vbWVyWydwb2x5bWVyVHlwZSddKTtcbiAgICB9IFxuXG4gICAgbW9ub21lcnNbbW9ub21lclsncG9seW1lclR5cGUnXV1bbW9ub21lclsnc3ltYm9sJ11dID0gbW9ub21lckFkZDtcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBNb25vbWVyTGliKG1vbm9tZXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU1vbm9tZXJzKGNvbDogREcuQ29sdW1uKTogREcuQ29sdW1uIHwgbnVsbCB7XG4gIGxldCBlbmNvZGVTeW1ib2wgPSBNT05PTUVSX0VOQ09ERV9NSU47XG4gIGNvbnN0IG1vbm9tZXJTeW1ib2xEaWN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIGNvbnN0IHVuaXRzID0gY29sLnRhZ3NbREcuVEFHUy5VTklUU107XG4gIGNvbnN0IHNlcCA9IGNvbC5nZXRUYWcoVEFHUy5zZXBhcmF0b3IpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyKHVuaXRzLCBzZXApO1xuICBjb25zdCBlbmNvZGVkU3RyaW5nQXJyYXkgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgZW5jb2RlZE1vbm9tZXJTdHIgPSAnJztcbiAgICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhjb2wuZ2V0KGkpKTtcbiAgICBtb25vbWVycy5mb3JFYWNoKChtKSA9PiB7XG4gICAgICBpZiAoIW1vbm9tZXJTeW1ib2xEaWN0W21dKSB7XG4gICAgICAgIGlmIChlbmNvZGVTeW1ib2wgPiBNT05PTUVSX0VOQ09ERV9NQVgpIHtcbiAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKGBOb3QgZW5vdWdoIHN5bWJvbHMgdG8gZW5jb2RlIG1vbm9tZXJzYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbW9ub21lclN5bWJvbERpY3RbbV0gPSBlbmNvZGVTeW1ib2w7XG4gICAgICAgIGVuY29kZVN5bWJvbCsrO1xuICAgICAgfVxuICAgICAgZW5jb2RlZE1vbm9tZXJTdHIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQobW9ub21lclN5bWJvbERpY3RbbV0pO1xuICAgIH0pO1xuICAgIGVuY29kZWRTdHJpbmdBcnJheS5wdXNoKGVuY29kZWRNb25vbWVyU3RyKTtcbiAgfVxuICByZXR1cm4gREcuQ29sdW1uLmZyb21TdHJpbmdzKCdlbmNvZGVkTW9sZWN1bGVzJywgZW5jb2RlZFN0cmluZ0FycmF5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbGZpbGVzRnJvbVNlcShjb2w6IERHLkNvbHVtbiwgbW9ub21lcnNMaWJPYmplY3Q6IGFueVtdKTogYW55W11bXSB8IG51bGwge1xuICBjb25zdCB1bml0cyA9IGNvbC50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICBjb25zdCBzZXAgPSBjb2wuZ2V0VGFnKCdzZXBhcmF0b3InKTtcbiAgY29uc3Qgc3BsaXR0ZXJGdW5jOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlcih1bml0cywgc2VwKTtcbiAgY29uc3QgbW9ub21lcnNEaWN0ID0gY3JlYXRlTW9tb21lcnNNb2xEaWN0KG1vbm9tZXJzTGliT2JqZWN0KTtcbiAgY29uc3QgbW9sRmlsZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBtYWNyb01vbGVjdWxlID0gY29sLmdldChpKTtcbiAgICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhtYWNyb01vbGVjdWxlKTtcbiAgICBjb25zdCBtb2xGaWxlc0ZvclNlcSA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lcnMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChtb25vbWVyc1tqXSkge1xuICAgICAgICBpZiAoIW1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pIHtcbiAgICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoYE1vbm9tZXIgJHttb25vbWVyc1tqXX0gaXMgbWlzc2luZyBpbiBIRUxNIGxpYnJhcnkuIFN0cnVjdHVyZSBjYW5ub3QgYmUgY3JlYXRlZGApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoYXQgaXMgdGhlIHJlYXNvbiBvZiBkb3VibGUgY29udmVyc2lvbj9cbiAgICAgICAgbW9sRmlsZXNGb3JTZXEucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pKSk7XG4gICAgICB9XG4gICAgfVxuICAgIG1vbEZpbGVzLnB1c2gobW9sRmlsZXNGb3JTZXEpO1xuICB9XG4gIHJldHVybiBtb2xGaWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbGZpbGVzRnJvbVNpbmdsZVNlcShjZWxsOiBERy5DZWxsLCBtb25vbWVyc0xpYk9iamVjdDogYW55W10pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGNvbnN0IHVuaXRzID0gY2VsbC5jb2x1bW4udGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgY29uc3Qgc2VwID0gY2VsbC5jb2x1bW4hLmdldFRhZygnc2VwYXJhdG9yJyk7XG4gIGNvbnN0IHNwbGl0dGVyRnVuYzogU3BsaXR0ZXJGdW5jID0gZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gIGNvbnN0IG1vbEZpbGVzID0gW107XG4gIGNvbnN0IG1hY3JvTW9sZWN1bGUgPSBjZWxsLnZhbHVlO1xuICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhtYWNyb01vbGVjdWxlKTtcbiAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtb25vbWVycy5sZW5ndGg7ICsraikge1xuICAgIGlmIChtb25vbWVyc1tqXSkge1xuICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhgTW9ub21lciAke21vbm9tZXJzW2pdfSBpcyBtaXNzaW5nIGluIEhFTE0gbGlicmFyeS4gU3RydWN0dXJlIGNhbm5vdCBiZSBjcmVhdGVkYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbW9sRmlsZXNGb3JTZXEucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pKSk7XG4gICAgfVxuICB9XG4gIG1vbEZpbGVzLnB1c2gobW9sRmlsZXNGb3JTZXEpO1xuICByZXR1cm4gbW9sRmlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb21vbWVyc01vbERpY3QobGliOiBhbnlbXSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0ge1xuICBjb25zdCBkaWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gIGxpYi5mb3JFYWNoKChpdCkgPT4ge1xuICAgIGlmIChpdFsncG9seW1lclR5cGUnXSA9PT0gJ1BFUFRJREUnKSB7XG4gICAgICBjb25zdCBtb25vbWVyT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICBIRUxNX0NPUkVfRklFTERTLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIG1vbm9tZXJPYmplY3RbZmllbGRdID0gaXRbZmllbGRdO1xuICAgICAgfSk7XG4gICAgICBkaWN0W2l0W0hFTE1fRklFTERTLlNZTUJPTF1dID0gbW9ub21lck9iamVjdDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGljdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUpzb25Nb25vbWVyTGliRnJvbVNkZih0YWJsZTogREcuRGF0YUZyYW1lKTogYW55IHtcbiAgY29uc3QgcmVzdWx0TGliID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUucm93Q291bnQ7IGkrKykge1xuICAgIGNvbnN0IG1vbm9tZXI6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhqc29uU2RmTW9ub21lckxpYkRpY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gSEVMTV9GSUVMRFMuU1lNQk9MKSB7XG4gICAgICAgIGNvbnN0IG1vbm9tZXJTeW1ib2wgPSB0YWJsZS5nZXQoanNvblNkZk1vbm9tZXJMaWJEaWN0W2tleV0sIGkpO1xuICAgICAgICBtb25vbWVyW2tleV0gPSBtb25vbWVyU3ltYm9sID09PSAnLicgPyB0YWJsZS5nZXQoU0RGX01PTk9NRVJfTkFNRSwgaSkgOiBtb25vbWVyU3ltYm9sO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEhFTE1fRklFTERTLlJHUk9VUFMpIHtcbiAgICAgICAgY29uc3Qgcmdyb3VwcyA9IHRhYmxlLmdldChqc29uU2RmTW9ub21lckxpYkRpY3Rba2V5XSwgaSkuc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBqc29uUmdyb3VwczogYW55W10gPSBbXTtcbiAgICAgICAgcmdyb3Vwcy5mb3JFYWNoKChnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCByZ3JvdXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0gPSB7fTtcbiAgICAgICAgICBjb25zdCBhbHRBdG9tID0gZy5zdWJzdHJpbmcoZy5sYXN0SW5kZXhPZignXScpICsgMSk7XG4gICAgICAgICAgY29uc3QgcmFkaWNhbE51bSA9IGcubWF0Y2goL1xcW1IoXFxkKylcXF0vKSFbMV07XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQ0FQX0dST1VQX1NNSUxFU10gPSBhbHRBdG9tID09PSAnSCcgPyBgWyo6JHtyYWRpY2FsTnVtfV1bSF1gIDogYE9bKjoke3JhZGljYWxOdW19XWA7XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQUxURVJfSURdID0gYWx0QXRvbSA9PT0gJ0gnID8gYFIke3JhZGljYWxOdW19LUhgIDogYFIke3JhZGljYWxOdW19LU9IYDtcbiAgICAgICAgICByZ3JvdXBbUkdST1VQX0ZJRUxEUy5DQVBfR1JPVVBfTkFNRV0gPSBhbHRBdG9tID09PSAnSCcgPyBgSGAgOiBgT0hgO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkxBQkVMXSA9IGBSJHtyYWRpY2FsTnVtfWA7XG4gICAgICAgICAganNvblJncm91cHMucHVzaChyZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9ub21lcltrZXldID0ganNvblJncm91cHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKGpzb25TZGZNb25vbWVyTGliRGljdCBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9KVtrZXldKVxuICAgICAgICAgIG1vbm9tZXJba2V5XSA9IHRhYmxlLmdldCgoanNvblNkZk1vbm9tZXJMaWJEaWN0IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0pW2tleV0sIGkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdExpYi5wdXNoKG1vbm9tZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHRMaWI7XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { IMonomerLib
|
|
1
|
+
import { IMonomerLib } from '../types';
|
|
2
2
|
export declare class MonomerWorks {
|
|
3
3
|
monomerLib: IMonomerLib;
|
|
4
4
|
constructor(monomerLib: IMonomerLib);
|
|
5
|
-
getCappedRotatedMonomer(monomerType: string, monomerName: string):
|
|
5
|
+
getCappedRotatedMonomer(monomerType: string, monomerName: string): string | null;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=monomer-works.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monomer-works.d.ts","sourceRoot":"","sources":["monomer-works.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"monomer-works.d.ts","sourceRoot":"","sources":["monomer-works.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,WAAW,EAAU,MAAM,UAAU,CAAC;AAI9C,qBAAa,YAAY;IACvB,UAAU,EAAE,WAAW,CAAC;gBAEZ,UAAU,EAAE,WAAW;IAK5B,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAOxF"}
|
|
@@ -4,8 +4,10 @@ export class MonomerWorks {
|
|
|
4
4
|
}
|
|
5
5
|
//types according to Monomer possible
|
|
6
6
|
getCappedRotatedMonomer(monomerType, monomerName) {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const monomer = this.monomerLib.getMonomer(monomerType, monomerName);
|
|
8
|
+
if (monomer)
|
|
9
|
+
return monomer.molfile; //TODO cap
|
|
10
|
+
return null;
|
|
9
11
|
}
|
|
10
12
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci13b3Jrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9tZXItd29ya3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxPQUFPLFlBQVk7SUFHdkIsWUFBWSxVQUF1QjtRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQscUNBQXFDO0lBQzlCLHVCQUF1QixDQUFDLFdBQW1CLEVBQUUsV0FBbUI7UUFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JFLElBQUksT0FBTztZQUNULE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVc7UUFFckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge0lNb25vbWVyTGliLCBNb25vbWVyfSBmcm9tICcuLi90eXBlcyc7XG5cblxuXG5leHBvcnQgY2xhc3MgTW9ub21lcldvcmtzIHtcbiAgbW9ub21lckxpYjogSU1vbm9tZXJMaWI7XG5cbiAgY29uc3RydWN0b3IobW9ub21lckxpYjogSU1vbm9tZXJMaWIpIHtcbiAgICB0aGlzLm1vbm9tZXJMaWIgPSBtb25vbWVyTGliO1xuICB9XG5cbiAgLy90eXBlcyBhY2NvcmRpbmcgdG8gTW9ub21lciBwb3NzaWJsZVxuICBwdWJsaWMgZ2V0Q2FwcGVkUm90YXRlZE1vbm9tZXIobW9ub21lclR5cGU6IHN0cmluZywgbW9ub21lck5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG1vbm9tZXIgPSB0aGlzLm1vbm9tZXJMaWIuZ2V0TW9ub21lcihtb25vbWVyVHlwZSwgbW9ub21lck5hbWUpO1xuICAgIGlmIChtb25vbWVyKVxuICAgICAgcmV0dXJuIG1vbm9tZXIubW9sZmlsZTsgLy9UT0RPIGNhcCBcblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|
package/src/types/index.d.ts
CHANGED
|
@@ -28,15 +28,12 @@ export declare type Monomer = {
|
|
|
28
28
|
};
|
|
29
29
|
export interface IMonomerLib {
|
|
30
30
|
getMonomer(monomerType: string, monomerName: string): Monomer | null;
|
|
31
|
-
|
|
31
|
+
getMonomerMolsByType(type: string): {
|
|
32
32
|
[symbol: string]: string;
|
|
33
33
|
} | null;
|
|
34
|
+
getMonomerNamesByType(type: string): string[];
|
|
34
35
|
getTypes(): string[];
|
|
35
|
-
update(
|
|
36
|
-
[type: string]: {
|
|
37
|
-
[name: string]: Monomer;
|
|
38
|
-
};
|
|
39
|
-
}): void;
|
|
36
|
+
update(lib: IMonomerLib): void;
|
|
40
37
|
get onChanged(): Observable<any>;
|
|
41
38
|
}
|
|
42
39
|
//# sourceMappingURL=index.d.ts.map
|
package/src/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAC,MAAM,MAAM,CAAC;AAIhC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,WAEpC;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC7B;AAED,oBAAY,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/F,IAAI,EAAE;QAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAA;CAChC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACrE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAC,MAAM,MAAM,CAAC;AAIhC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,WAEpC;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC7B;AAED,oBAAY,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/F,IAAI,EAAE;QAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAA;CAChC,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACrE,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IACtE,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C,QAAQ,IAAI,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;CAClC"}
|
package/src/types/index.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
export function isLeaf(node) {
|
|
3
3
|
return !node.children || node.children.length == 0;
|
|
4
4
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFZeEQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFjO0lBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHtOb2RlVHlwZX0gZnJvbSAnQHBoeWxvY2FudmFzL3BoeWxvY2FudmFzLmdsJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuXG4vKiBJbnRlcmZhY2UgZm9yIGhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZSByZXR1cm5lZCBieSBOZXdpY2sucGFyc2VfbmV3aWNrICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVUeXBlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBicmFuY2hfbGVuZ3RoPzogbnVtYmVyO1xuICBjaGlsZHJlbj86IE5vZGVUeXBlW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlYWYobm9kZTogTm9kZVR5cGUpIHtcbiAgcmV0dXJuICFub2RlLmNoaWxkcmVuIHx8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09IDA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUN1dHRlZFR5cGUgZXh0ZW5kcyBOb2RlVHlwZSB7XG4gIGN1dHRlZExlYWZOYW1lTGlzdDogc3RyaW5nW107XG4gIGN1dHRlZENoaWxkcmVuPzogTm9kZVR5cGVbXTtcbn1cblxuZXhwb3J0IHR5cGUgTW9ub21lciA9IHtcbiAgc3ltYm9sOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgbmF0dXJhbEFuYWxvZzogc3RyaW5nLFxuICBtb2xmaWxlOiBzdHJpbmcsXG4gIHBvbHltZXJUeXBlOiBzdHJpbmcsXG4gIG1vbm9tZXJUeXBlOiBzdHJpbmcsXG4gIHJncm91cHM6IHtjYXBHcm91cFNtaWxlczogc3RyaW5nLCBhbHRlcm5hdGVJZDogc3RyaW5nLCBjYXBHcm91cE5hbWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyB9W10sXG4gIGRhdGE6IHtbcHJvcGVydHk6IHN0cmluZ106IGFueX1cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1vbm9tZXJMaWIge1xuICBnZXRNb25vbWVyKG1vbm9tZXJUeXBlOiBzdHJpbmcsIG1vbm9tZXJOYW1lOiBzdHJpbmcpOiBNb25vbWVyIHwgbnVsbDtcbiAgZ2V0TW9ub21lck1vbHNCeVR5cGUodHlwZTogc3RyaW5nKToge1tzeW1ib2w6IHN0cmluZ106IHN0cmluZ30gfCBudWxsO1xuICBnZXRNb25vbWVyTmFtZXNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nW107XG4gIGdldFR5cGVzKCk6IHN0cmluZ1tdO1xuICB1cGRhdGUobGliOiBJTW9ub21lckxpYik6IHZvaWQ7XG4gIGdldCBvbkNoYW5nZWQoKTogT2JzZXJ2YWJsZTxhbnk+O1xufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"monomer-utils.d.ts","sourceRoot":"","sources":["monomer-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAStC,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAEnE,wBAAgB,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAwB/D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAuB3F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAoBhG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAA;CAAE,CAYjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,GAAG,CA8BpE"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
// import * as ui from 'datagrok-api/ui';
|
|
2
|
-
import * as DG from 'datagrok-api/dg';
|
|
3
|
-
import * as grok from 'datagrok-api/grok';
|
|
4
|
-
import { HELM_CORE_FIELDS, jsonSdfMonomerLibDict, MONOMER_ENCODE_MAX, MONOMER_ENCODE_MIN, SDF_MONOMER_NAME } from './const';
|
|
5
|
-
import { getSplitter } from './macromolecule';
|
|
6
|
-
export const HELM_CORE_LIB_FILENAME = '/data/HELMCoreLibrary.json';
|
|
7
|
-
export function encodeMonomers(col) {
|
|
8
|
-
let encodeSymbol = MONOMER_ENCODE_MIN;
|
|
9
|
-
const monomerSymbolDict = {};
|
|
10
|
-
const units = col.tags[DG.TAGS.UNITS];
|
|
11
|
-
const sep = col.getTag("separator" /* TAGS.separator */);
|
|
12
|
-
const splitterFunc = getSplitter(units, sep);
|
|
13
|
-
const encodedStringArray = [];
|
|
14
|
-
for (let i = 0; i < col.length; ++i) {
|
|
15
|
-
let encodedMonomerStr = '';
|
|
16
|
-
const monomers = splitterFunc(col.get(i));
|
|
17
|
-
monomers.forEach((m) => {
|
|
18
|
-
if (!monomerSymbolDict[m]) {
|
|
19
|
-
if (encodeSymbol > MONOMER_ENCODE_MAX) {
|
|
20
|
-
grok.shell.error(`Not enough symbols to encode monomers`);
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
monomerSymbolDict[m] = encodeSymbol;
|
|
24
|
-
encodeSymbol++;
|
|
25
|
-
}
|
|
26
|
-
encodedMonomerStr += String.fromCodePoint(monomerSymbolDict[m]);
|
|
27
|
-
});
|
|
28
|
-
encodedStringArray.push(encodedMonomerStr);
|
|
29
|
-
}
|
|
30
|
-
return DG.Column.fromStrings('encodedMolecules', encodedStringArray);
|
|
31
|
-
}
|
|
32
|
-
export function getMolfilesFromSeq(col, monomersLibObject) {
|
|
33
|
-
const units = col.tags[DG.TAGS.UNITS];
|
|
34
|
-
const sep = col.getTag('separator');
|
|
35
|
-
const splitterFunc = getSplitter(units, sep);
|
|
36
|
-
const monomersDict = createMomomersMolDict(monomersLibObject);
|
|
37
|
-
const molFiles = [];
|
|
38
|
-
for (let i = 0; i < col.length; ++i) {
|
|
39
|
-
const macroMolecule = col.get(i);
|
|
40
|
-
const monomers = splitterFunc(macroMolecule);
|
|
41
|
-
const molFilesForSeq = [];
|
|
42
|
-
for (let j = 0; j < monomers.length; ++j) {
|
|
43
|
-
if (monomers[j]) {
|
|
44
|
-
if (!monomersDict[monomers[j]]) {
|
|
45
|
-
grok.shell.warning(`Monomer ${monomers[j]} is missing in HELM library. Structure cannot be created`);
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
// what is the reason of double conversion?
|
|
49
|
-
molFilesForSeq.push(JSON.parse(JSON.stringify(monomersDict[monomers[j]])));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
molFiles.push(molFilesForSeq);
|
|
53
|
-
}
|
|
54
|
-
return molFiles;
|
|
55
|
-
}
|
|
56
|
-
export function getMolfilesFromSingleSeq(cell, monomersLibObject) {
|
|
57
|
-
const units = cell.column.tags[DG.TAGS.UNITS];
|
|
58
|
-
const sep = cell.column.getTag('separator');
|
|
59
|
-
const splitterFunc = getSplitter(units, sep);
|
|
60
|
-
const monomersDict = createMomomersMolDict(monomersLibObject);
|
|
61
|
-
const molFiles = [];
|
|
62
|
-
const macroMolecule = cell.value;
|
|
63
|
-
const monomers = splitterFunc(macroMolecule);
|
|
64
|
-
const molFilesForSeq = [];
|
|
65
|
-
for (let j = 0; j < monomers.length; ++j) {
|
|
66
|
-
if (monomers[j]) {
|
|
67
|
-
if (!monomersDict[monomers[j]]) {
|
|
68
|
-
grok.shell.warning(`Monomer ${monomers[j]} is missing in HELM library. Structure cannot be created`);
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
molFilesForSeq.push(JSON.parse(JSON.stringify(monomersDict[monomers[j]])));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
molFiles.push(molFilesForSeq);
|
|
75
|
-
return molFiles;
|
|
76
|
-
}
|
|
77
|
-
export function createMomomersMolDict(lib) {
|
|
78
|
-
const dict = {};
|
|
79
|
-
lib.forEach((it) => {
|
|
80
|
-
if (it['polymerType'] === 'PEPTIDE') {
|
|
81
|
-
const monomerObject = {};
|
|
82
|
-
HELM_CORE_FIELDS.forEach((field) => {
|
|
83
|
-
monomerObject[field] = it[field];
|
|
84
|
-
});
|
|
85
|
-
dict[it["symbol" /* HELM_FIELDS.SYMBOL */]] = monomerObject;
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
return dict;
|
|
89
|
-
}
|
|
90
|
-
export function createJsonMonomerLibFromSdf(table) {
|
|
91
|
-
const resultLib = [];
|
|
92
|
-
for (let i = 0; i < table.rowCount; i++) {
|
|
93
|
-
const monomer = {};
|
|
94
|
-
Object.keys(jsonSdfMonomerLibDict).forEach((key) => {
|
|
95
|
-
if (key === "symbol" /* HELM_FIELDS.SYMBOL */) {
|
|
96
|
-
const monomerSymbol = table.get(jsonSdfMonomerLibDict[key], i);
|
|
97
|
-
monomer[key] = monomerSymbol === '.' ? table.get(SDF_MONOMER_NAME, i) : monomerSymbol;
|
|
98
|
-
}
|
|
99
|
-
else if (key === "rgroups" /* HELM_FIELDS.RGROUPS */) {
|
|
100
|
-
const rgroups = table.get(jsonSdfMonomerLibDict[key], i).split('\n');
|
|
101
|
-
const jsonRgroups = [];
|
|
102
|
-
rgroups.forEach((g) => {
|
|
103
|
-
const rgroup = {};
|
|
104
|
-
const altAtom = g.substring(g.lastIndexOf(']') + 1);
|
|
105
|
-
const radicalNum = g.match(/\[R(\d+)\]/)[1];
|
|
106
|
-
rgroup["capGroupSmiles" /* RGROUP_FIELDS.CAP_GROUP_SMILES */] = altAtom === 'H' ? `[*:${radicalNum}][H]` : `O[*:${radicalNum}]`;
|
|
107
|
-
rgroup["alternateId" /* RGROUP_FIELDS.ALTER_ID */] = altAtom === 'H' ? `R${radicalNum}-H` : `R${radicalNum}-OH`;
|
|
108
|
-
rgroup["capGroupName" /* RGROUP_FIELDS.CAP_GROUP_NAME */] = altAtom === 'H' ? `H` : `OH`;
|
|
109
|
-
rgroup["label" /* RGROUP_FIELDS.LABEL */] = `R${radicalNum}`;
|
|
110
|
-
jsonRgroups.push(rgroup);
|
|
111
|
-
});
|
|
112
|
-
monomer[key] = jsonRgroups;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
if (jsonSdfMonomerLibDict[key])
|
|
116
|
-
monomer[key] = table.get(jsonSdfMonomerLibDict[key], i);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
resultLib.push(monomer);
|
|
120
|
-
}
|
|
121
|
-
return resultLib;
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub21lci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1vbm9tZXItdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseUNBQXlDO0FBQ3pDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxPQUFPLEVBQ1EsZ0JBQWdCLEVBQWlCLHFCQUFxQixFQUNuRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFDekQsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFDLFdBQVcsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQWM7SUFDM0MsSUFBSSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7SUFDdEMsTUFBTSxpQkFBaUIsR0FBOEIsRUFBRSxDQUFDO0lBQ3hELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxrQ0FBZ0IsQ0FBQztJQUN2QyxNQUFNLFlBQVksR0FBaUIsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUNuQyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxPQUFPLENB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YXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcblxuaW1wb3J0IHtcbiAgSEVMTV9GSUVMRFMsIEhFTE1fQ09SRV9GSUVMRFMsIFJHUk9VUF9GSUVMRFMsIGpzb25TZGZNb25vbWVyTGliRGljdCxcbiAgTU9OT01FUl9FTkNPREVfTUFYLCBNT05PTUVSX0VOQ09ERV9NSU4sIFNERl9NT05PTUVSX05BTUVcbn0gZnJvbSAnLi9jb25zdCc7XG5pbXBvcnQge2dldFNwbGl0dGVyLCBTcGxpdHRlckZ1bmMsIFRBR1N9IGZyb20gJy4vbWFjcm9tb2xlY3VsZSc7XG5cbmV4cG9ydCBjb25zdCBIRUxNX0NPUkVfTElCX0ZJTEVOQU1FID0gJy9kYXRhL0hFTE1Db3JlTGlicmFyeS5qc29uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZU1vbm9tZXJzKGNvbDogREcuQ29sdW1uKTogREcuQ29sdW1uIHwgbnVsbCB7XG4gIGxldCBlbmNvZGVTeW1ib2wgPSBNT05PTUVSX0VOQ09ERV9NSU47XG4gIGNvbnN0IG1vbm9tZXJTeW1ib2xEaWN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gIGNvbnN0IHVuaXRzID0gY29sLnRhZ3NbREcuVEFHUy5VTklUU107XG4gIGNvbnN0IHNlcCA9IGNvbC5nZXRUYWcoVEFHUy5zZXBhcmF0b3IpO1xuICBjb25zdCBzcGxpdHRlckZ1bmM6IFNwbGl0dGVyRnVuYyA9IGdldFNwbGl0dGVyKHVuaXRzLCBzZXApO1xuICBjb25zdCBlbmNvZGVkU3RyaW5nQXJyYXkgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgZW5jb2RlZE1vbm9tZXJTdHIgPSAnJztcbiAgICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhjb2wuZ2V0KGkpKTtcbiAgICBtb25vbWVycy5mb3JFYWNoKChtKSA9PiB7XG4gICAgICBpZiAoIW1vbm9tZXJTeW1ib2xEaWN0W21dKSB7XG4gICAgICAgIGlmIChlbmNvZGVTeW1ib2wgPiBNT05PTUVSX0VOQ09ERV9NQVgpIHtcbiAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKGBOb3QgZW5vdWdoIHN5bWJvbHMgdG8gZW5jb2RlIG1vbm9tZXJzYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbW9ub21lclN5bWJvbERpY3RbbV0gPSBlbmNvZGVTeW1ib2w7XG4gICAgICAgIGVuY29kZVN5bWJvbCsrO1xuICAgICAgfVxuICAgICAgZW5jb2RlZE1vbm9tZXJTdHIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQobW9ub21lclN5bWJvbERpY3RbbV0pO1xuICAgIH0pO1xuICAgIGVuY29kZWRTdHJpbmdBcnJheS5wdXNoKGVuY29kZWRNb25vbWVyU3RyKTtcbiAgfVxuICByZXR1cm4gREcuQ29sdW1uLmZyb21TdHJpbmdzKCdlbmNvZGVkTW9sZWN1bGVzJywgZW5jb2RlZFN0cmluZ0FycmF5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbGZpbGVzRnJvbVNlcShjb2w6IERHLkNvbHVtbiwgbW9ub21lcnNMaWJPYmplY3Q6IGFueVtdKTogYW55W11bXSB8IG51bGwge1xuICBjb25zdCB1bml0cyA9IGNvbC50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICBjb25zdCBzZXAgPSBjb2wuZ2V0VGFnKCdzZXBhcmF0b3InKTtcbiAgY29uc3Qgc3BsaXR0ZXJGdW5jOiBTcGxpdHRlckZ1bmMgPSBnZXRTcGxpdHRlcih1bml0cywgc2VwKTtcbiAgY29uc3QgbW9ub21lcnNEaWN0ID0gY3JlYXRlTW9tb21lcnNNb2xEaWN0KG1vbm9tZXJzTGliT2JqZWN0KTtcbiAgY29uc3QgbW9sRmlsZXMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2wubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBtYWNyb01vbGVjdWxlID0gY29sLmdldChpKTtcbiAgICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhtYWNyb01vbGVjdWxlKTtcbiAgICBjb25zdCBtb2xGaWxlc0ZvclNlcSA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbW9ub21lcnMubGVuZ3RoOyArK2opIHtcbiAgICAgIGlmIChtb25vbWVyc1tqXSkge1xuICAgICAgICBpZiAoIW1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pIHtcbiAgICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoYE1vbm9tZXIgJHttb25vbWVyc1tqXX0gaXMgbWlzc2luZyBpbiBIRUxNIGxpYnJhcnkuIFN0cnVjdHVyZSBjYW5ub3QgYmUgY3JlYXRlZGApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoYXQgaXMgdGhlIHJlYXNvbiBvZiBkb3VibGUgY29udmVyc2lvbj9cbiAgICAgICAgbW9sRmlsZXNGb3JTZXEucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pKSk7XG4gICAgICB9XG4gICAgfVxuICAgIG1vbEZpbGVzLnB1c2gobW9sRmlsZXNGb3JTZXEpO1xuICB9XG4gIHJldHVybiBtb2xGaWxlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbGZpbGVzRnJvbVNpbmdsZVNlcShjZWxsOiBERy5DZWxsLCBtb25vbWVyc0xpYk9iamVjdDogYW55W10pOiBhbnlbXVtdIHwgbnVsbCB7XG4gIGNvbnN0IHVuaXRzID0gY2VsbC5jb2x1bW4udGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgY29uc3Qgc2VwID0gY2VsbC5jb2x1bW4hLmdldFRhZygnc2VwYXJhdG9yJyk7XG4gIGNvbnN0IHNwbGl0dGVyRnVuYzogU3BsaXR0ZXJGdW5jID0gZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gIGNvbnN0IG1vbEZpbGVzID0gW107XG4gIGNvbnN0IG1hY3JvTW9sZWN1bGUgPSBjZWxsLnZhbHVlO1xuICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhtYWNyb01vbGVjdWxlKTtcbiAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtb25vbWVycy5sZW5ndGg7ICsraikge1xuICAgIGlmIChtb25vbWVyc1tqXSkge1xuICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhgTW9ub21lciAke21vbm9tZXJzW2pdfSBpcyBtaXNzaW5nIGluIEhFTE0gbGlicmFyeS4gU3RydWN0dXJlIGNhbm5vdCBiZSBjcmVhdGVkYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgbW9sRmlsZXNGb3JTZXEucHVzaChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pKSk7XG4gICAgfVxuICB9XG4gIG1vbEZpbGVzLnB1c2gobW9sRmlsZXNGb3JTZXEpO1xuICByZXR1cm4gbW9sRmlsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb21vbWVyc01vbERpY3QobGliOiBhbnlbXSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0ge1xuICBjb25zdCBkaWN0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9ID0ge307XG4gIGxpYi5mb3JFYWNoKChpdCkgPT4ge1xuICAgIGlmIChpdFsncG9seW1lclR5cGUnXSA9PT0gJ1BFUFRJREUnKSB7XG4gICAgICBjb25zdCBtb25vbWVyT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICBIRUxNX0NPUkVfRklFTERTLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIG1vbm9tZXJPYmplY3RbZmllbGRdID0gaXRbZmllbGRdO1xuICAgICAgfSk7XG4gICAgICBkaWN0W2l0W0hFTE1fRklFTERTLlNZTUJPTF1dID0gbW9ub21lck9iamVjdDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGljdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUpzb25Nb25vbWVyTGliRnJvbVNkZih0YWJsZTogREcuRGF0YUZyYW1lKTogYW55IHtcbiAgY29uc3QgcmVzdWx0TGliID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUucm93Q291bnQ7IGkrKykge1xuICAgIGNvbnN0IG1vbm9tZXI6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhqc29uU2RmTW9ub21lckxpYkRpY3QpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gSEVMTV9GSUVMRFMuU1lNQk9MKSB7XG4gICAgICAgIGNvbnN0IG1vbm9tZXJTeW1ib2wgPSB0YWJsZS5nZXQoanNvblNkZk1vbm9tZXJMaWJEaWN0W2tleV0sIGkpO1xuICAgICAgICBtb25vbWVyW2tleV0gPSBtb25vbWVyU3ltYm9sID09PSAnLicgPyB0YWJsZS5nZXQoU0RGX01PTk9NRVJfTkFNRSwgaSkgOiBtb25vbWVyU3ltYm9sO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEhFTE1fRklFTERTLlJHUk9VUFMpIHtcbiAgICAgICAgY29uc3Qgcmdyb3VwcyA9IHRhYmxlLmdldChqc29uU2RmTW9ub21lckxpYkRpY3Rba2V5XSwgaSkuc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBqc29uUmdyb3VwczogYW55W10gPSBbXTtcbiAgICAgICAgcmdyb3Vwcy5mb3JFYWNoKChnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCByZ3JvdXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0gPSB7fTtcbiAgICAgICAgICBjb25zdCBhbHRBdG9tID0gZy5zdWJzdHJpbmcoZy5sYXN0SW5kZXhPZignXScpICsgMSk7XG4gICAgICAgICAgY29uc3QgcmFkaWNhbE51bSA9IGcubWF0Y2goL1xcW1IoXFxkKylcXF0vKSFbMV07XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQ0FQX0dST1VQX1NNSUxFU10gPSBhbHRBdG9tID09PSAnSCcgPyBgWyo6JHtyYWRpY2FsTnVtfV1bSF1gIDogYE9bKjoke3JhZGljYWxOdW19XWA7XG4gICAgICAgICAgcmdyb3VwW1JHUk9VUF9GSUVMRFMuQUxURVJfSURdID0gYWx0QXRvbSA9PT0gJ0gnID8gYFIke3JhZGljYWxOdW19LUhgIDogYFIke3JhZGljYWxOdW19LU9IYDtcbiAgICAgICAgICByZ3JvdXBbUkdST1VQX0ZJRUxEUy5DQVBfR1JPVVBfTkFNRV0gPSBhbHRBdG9tID09PSAnSCcgPyBgSGAgOiBgT0hgO1xuICAgICAgICAgIHJncm91cFtSR1JPVVBfRklFTERTLkxBQkVMXSA9IGBSJHtyYWRpY2FsTnVtfWA7XG4gICAgICAgICAganNvblJncm91cHMucHVzaChyZ3JvdXApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9ub21lcltrZXldID0ganNvblJncm91cHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoKGpzb25TZGZNb25vbWVyTGliRGljdCBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGFueSB9KVtrZXldKVxuICAgICAgICAgIG1vbm9tZXJba2V5XSA9IHRhYmxlLmdldCgoanNvblNkZk1vbm9tZXJMaWJEaWN0IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH0pW2tleV0sIGkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdExpYi5wdXNoKG1vbm9tZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHRMaWI7XG59XG4iXX0=
|