@datagrok-libraries/bio 6.0.0 → 6.0.2

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 CHANGED
@@ -1,5 +1,10 @@
1
1
  # bio changelog
2
2
 
3
+ ## 6.0.2 (2026-07-06)
4
+
5
+ * To atomic level (linear path): support multi-chain HELM (e.g. `RNA1{...}|RNA2{...}`) — each disjoint chain is assembled independently and stacked vertically into a single molfile instead of being fused into one continuous chain.
6
+ * Monomer hover (linear path): fix the HELM monomer→atom map — infer polymer type from the parsed HELM graph (not the alphabet, which mis-detects modified RNA as UN) and build the map with per-position RNA roles and multi-chain stacking so it matches the rendered molfile.
7
+
3
8
  ## 5.61.2 (2025-11-03)
4
9
 
5
10
  * Split User settings for duplicate monomer preferences into separate entries to avoid length limits.
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "access": "public"
9
9
  },
10
10
  "friendlyName": "Datagrok bio library",
11
- "version": "6.0.0",
11
+ "version": "6.0.2",
12
12
  "description": "Bio utilities, types supporting Macromolecule, Molecule3D data",
13
13
  "dependencies": {
14
14
  "@datagrok-libraries/chem-meta": "^1.2.7",
@@ -1 +1 @@
1
- {"version":3,"file":"lib-settings.d.ts","sourceRoot":"","sources":["lib-settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AA+CxC,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAwBnE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9E"}
1
+ {"version":3,"file":"lib-settings.d.ts","sourceRoot":"","sources":["lib-settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AA0DxC,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAwBnE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9E"}
@@ -14,12 +14,23 @@ async function getDuplicatePrefsFull() {
14
14
  if (!resStr)
15
15
  return {};
16
16
  // chunk will end with special suffix and just before it will have the number of the next chunk key
17
+ let iter = 1;
17
18
  while (resStr.endsWith(CHUNK_KEY_SUFFIX)) {
18
- const nextChunkKey = `${DUPLICATE_MONOMER_PREFERENCES_KEY}${resStr.charAt(resStr.length - CHUNK_KEY_SUFFIX.length - 1)}`;
19
+ const nextChunkKeysCount = iter.toString().length;
20
+ const nextChunkIndex = new Array(nextChunkKeysCount).fill(0)
21
+ .reduce((acc, _, i) => acc + resStr.charAt(resStr.length - nextChunkKeysCount + i - CHUNK_KEY_SUFFIX.length), '');
22
+ const nextChunkKey = `${DUPLICATE_MONOMER_PREFERENCES_KEY}${nextChunkIndex}`;
19
23
  const nextChunkStr = (await grok.userSettings.getValue(LIB_STORAGE_NAME, nextChunkKey, true)) ?? '';
20
- resStr = resStr.slice(0, resStr.length - CHUNK_KEY_SUFFIX.length - 1) + nextChunkStr;
24
+ resStr = resStr.slice(0, resStr.length - CHUNK_KEY_SUFFIX.length - nextChunkIndex.length) + nextChunkStr;
25
+ iter++;
26
+ }
27
+ try {
28
+ return JSON.parse(resStr);
29
+ }
30
+ catch (err) {
31
+ console.error(`Failed to parse duplicateMonomerPreferences from user settings: ${err}`);
32
+ return {};
21
33
  }
22
- return JSON.parse(resStr);
23
34
  }
24
35
  async function setDuplicatePrefsFull(value) {
25
36
  const valueStr = JSON.stringify(value);
@@ -73,7 +84,6 @@ export async function setUserLibSettings(value) {
73
84
  }
74
85
  await setDuplicatePrefsFull(duplicatePrefsShortHand);
75
86
  //await grok.userSettings.add(LIB_STORAGE_NAME, DUPLICATE_MONOMER_PREFERENCES_KEY, JSON.stringify(duplicatePrefsShortHand), true);
76
- value.duplicateMonomerPreferences = {}; // clear to reduce size
77
87
  await grok.userSettings.add(LIB_STORAGE_NAME, LIB_SETTINGS_KEY, JSON.stringify(value), true);
78
88
  });
79
89
  await userLibSettingsPromise;
@@ -1 +1 @@
1
- {"version":3,"file":"lib-settings.js","sourceRoot":"","sources":["lib-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib-settings.js","sourceRoot":"","sources":["lib-settings.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"monomer-hover.d.ts","sourceRoot":"","sources":["monomer-hover.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMtC,OAAO,EAAC,QAAQ,EAAC,MAAM,6CAA6C,CAAC;AAIrE,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAK1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAGzC,OAAO,EAA0B,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAExE,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,QAM7E;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EACpD,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,GAAE,OAAe,GACrG,OAAO,CAAC,gBAAgB,CAAC,CAyH3B;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,GAAG,IAAI,GACvD,IAAI,CAkBN;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAElF"}
1
+ {"version":3,"file":"monomer-hover.d.ts","sourceRoot":"","sources":["monomer-hover.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMtC,OAAO,EAAC,QAAQ,EAAC,MAAM,6CAA6C,CAAC;AAIrE,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAW,WAAW,EAAc,MAAM,eAAe,CAAC;AAKjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAGzC,OAAO,EAA0B,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAExE,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,QAM7E;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EACpD,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,GAAE,OAAe,GACrG,OAAO,CAAC,gBAAgB,CAAC,CAyJ3B;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,GAAG,IAAI,GACvD,IAAI,CAkBN;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAElF"}
@@ -1,9 +1,9 @@
1
1
  import wu from 'wu';
2
2
  import { LRUCache } from 'lru-cache';
3
3
  import { addSubstructProvider, getMonomerHover, setMonomerHover } from '@datagrok-libraries/chem-meta/src/types';
4
- import { PolymerTypes } from '../helm/consts';
4
+ import { HelmTypes, PolymerTypes } from '../helm/consts';
5
5
  import { ALPHABET } from '../utils/macromolecule';
6
- import { getMonomersDictFromLib } from './to-atomic-level';
6
+ import { buildRolesForHelmRna, getMonomersDictFromLib } from './to-atomic-level';
7
7
  import { monomerSeqToMolfile } from './to-atomic-level-utils';
8
8
  import { getMolHighlight } from './seq-to-molfile';
9
9
  export const MonomerHoverLinksTemp = 'MonomerHoverLinks';
@@ -28,10 +28,15 @@ export async function buildMonomerHoverLink(seqCol, molCol, monomerLib, seqHelpe
28
28
  const getSeqMonomerCorrectedPosition = (pos) => {
29
29
  if (pos == undefined)
30
30
  return null;
31
- // if its dna or rna, we need to correct position as it will contain sugar and phosphate
32
- // toAtomicLevel returns 15 monomers for 15 nucleotides (r(n)p is one monmer), while helm converter returns 45
31
+ // HELM RNA is split into per-position sugar/base/phosphate monomers, so the
32
+ // renderer reports a flat monomer index and the monomer map is keyed by that
33
+ // same flat index — both for the POM converter and (since the map is now
34
+ // built with roles) for the linear path. No division needed in either case.
33
35
  if (isNucleotideHelmSequence)
34
- return throughPOM ? pos : Math.floor(pos / 3);
36
+ return pos;
37
+ // Non-HELM DNA/RNA: the linear map keys by base position; the POM converter
38
+ // expands each base into a sugar/base/phosphate triple, so map the base to
39
+ // its base entry (the middle of its triple).
35
40
  if (isNucleotideNonHelmSequence)
36
41
  return throughPOM ? pos * 3 + 1 : pos;
37
42
  return pos;
@@ -41,15 +46,38 @@ export async function buildMonomerHoverLink(seqCol, molCol, monomerLib, seqHelpe
41
46
  const seqSH = seqHelper.getSeqHandler(seqCol);
42
47
  if (!throughPOM) {
43
48
  const seqSS = seqSH.getSplitted(tableRowIdx);
44
- const biotype = seqSH.defaultBiotype;
49
+ const gi = seqSS.graphInfo;
50
+ // Polymer type: for HELM read it from the parsed graph rather than the
51
+ // alphabet — modified RNA can mis-detect as ALPHABET.UN. The whole row is
52
+ // assumed to be the first chain's type. Non-HELM falls back to the alphabet.
53
+ let polymerType;
54
+ if (seqSH.isHelm() && gi?.polymerTypes && gi.polymerTypes.length > 0)
55
+ polymerType = gi.polymerTypes[0];
56
+ else {
57
+ const a = seqSH.alphabet;
58
+ polymerType = (a === ALPHABET.RNA || a === ALPHABET.DNA) ? PolymerTypes.RNA : PolymerTypes.PEPTIDE;
59
+ }
60
+ // Coerce a UN alphabet to RNA for the RNA polymer path (only used for the
61
+ // bases-only default sugar/phosphate selection; irrelevant in triples mode).
62
+ let alphabet = seqSH.alphabet;
63
+ if (polymerType === PolymerTypes.RNA && alphabet !== ALPHABET.RNA && alphabet !== ALPHABET.DNA)
64
+ alphabet = ALPHABET.RNA;
65
+ // HELM RNA is assembled from per-position sugar/base/phosphate triples;
66
+ // the monomer map must be built with the same roles (and multi-chain
67
+ // stacking) the real conversion uses, otherwise every monomer is treated
68
+ // as a base and the atom map does not match the rendered molfile.
69
+ const isHelmRna = seqSH.isHelm() && polymerType === PolymerTypes.RNA;
70
+ const biotype = isHelmRna ? HelmTypes.NUCLEOTIDE : seqSH.defaultBiotype;
45
71
  const seqMList = wu.count(0).take(seqSS.length)
46
72
  .map((posIdx) => { return { position: posIdx, symbol: seqSS.getCanonical(posIdx), biotype: biotype }; })
47
73
  .toArray();
48
- const alphabet = seqSH.alphabet;
49
- const polymerType = alphabet == ALPHABET.RNA || alphabet == ALPHABET.DNA ? PolymerTypes.RNA : PolymerTypes.PEPTIDE;
50
- const monomersDict = getMonomersDictFromLib([seqMList], [undefined], polymerType, alphabet, monomerLib, rdKitModule);
74
+ const chainStarts = (gi?.disjointSeqStarts && gi.disjointSeqStarts.length > 0) ?
75
+ gi.disjointSeqStarts.slice() : [0];
76
+ const roles = isHelmRna ?
77
+ buildRolesForHelmRna([seqMList], monomerLib, polymerType, [chainStarts])[0] : undefined;
78
+ const monomersDict = getMonomersDictFromLib([seqMList], [roles], polymerType, alphabet, monomerLib, rdKitModule);
51
79
  // Call seq-to-molfile worker core directly
52
- const molWM = monomerSeqToMolfile(seqMList, monomersDict, alphabet, polymerType);
80
+ const molWM = monomerSeqToMolfile(seqMList, monomersDict, alphabet, polymerType, roles, chainStarts);
53
81
  return molWM.monomers;
54
82
  }
55
83
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"monomer-hover.js","sourceRoot":"","sources":["monomer-hover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"monomer-hover.js","sourceRoot":"","sources":["monomer-hover.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
1
  import { monomerSeqToMolfile } from './to-atomic-level-utils';
2
2
  onmessage = (event) => {
3
- const { seqList, rolesList, monomersDict, alphabet, polymerType, start, end } = event.data;
3
+ const { seqList, rolesList, chainStartsList, monomersDict, alphabet, polymerType, start, end } = event.data;
4
4
  const resMolList = new Array(end - start);
5
5
  const molfileWarningList = new Array(0);
6
6
  for (let rowI = start; rowI < end; ++rowI) {
7
7
  try {
8
8
  const seq = seqList[rowI];
9
9
  const roles = rolesList ? rolesList[rowI] : undefined;
10
- resMolList[rowI - start] = monomerSeqToMolfile(seq, monomersDict, alphabet, polymerType, roles);
10
+ const chainStarts = chainStartsList ? chainStartsList[rowI] : undefined;
11
+ resMolList[rowI - start] = monomerSeqToMolfile(seq, monomersDict, alphabet, polymerType, roles, chainStarts);
11
12
  }
12
13
  catch (err) {
13
14
  const errMsg = err instanceof Error ? err.message : err.toString();
@@ -1 +1 @@
1
- {"version":3,"file":"seq-to-molfile-worker.js","sourceRoot":"","sources":["seq-to-molfile-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAG5D,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;IACpB,MAAM,EAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC,GAA2B,KAAK,CAAC,IAAI,CAAC;IACjH,MAAM,UAAU,GAAqB,IAAI,KAAK,CAAiB,GAAG,GAAG,KAAK,CAAC,CAAC;IAC5E,MAAM,kBAAkB,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAClG,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,MAAM,GAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC3E,MAAM,GAAG,GAAW,8BAA8B,IAAI,KAAK,MAAM,GAAG,CAAC;YACrE,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,WAAW,CAAC,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAA0B,CAAC,CAAC;AAC7F,CAAC,CAAC"}
1
+ {"version":3,"file":"seq-to-molfile-worker.js","sourceRoot":"","sources":["seq-to-molfile-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAG5D,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;IACpB,MAAM,EAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAC,GACjE,KAAK,CAAC,IAAI,CAAC;IACtC,MAAM,UAAU,GAAqB,IAAI,KAAK,CAAiB,GAAG,GAAG,KAAK,CAAC,CAAC;IAC5E,MAAM,kBAAkB,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/G,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,MAAM,GAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC3E,MAAM,GAAG,GAAW,8BAA8B,IAAI,KAAK,MAAM,GAAG,CAAC;YACrE,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,WAAW,CAAC,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAA0B,CAAC,CAAC;AAC7F,CAAC,CAAC"}
@@ -13,6 +13,6 @@ export type SeqToMolfileResult = {
13
13
  }[];
14
14
  warnings: string[];
15
15
  };
16
- export declare function seqToMolFileWorker(seqCol: DG.Column<string>, monomersDict: MonomerMolGraphMap, alphabet: ALPHABET, polymerType: PolymerType, monomerLib: IMonomerLib, seqHelper: ISeqHelper, rdKitModule: RDModule, rolesList?: (NucleotideRole[] | undefined)[]): Promise<ToAtomicLevelRes>;
16
+ export declare function seqToMolFileWorker(seqCol: DG.Column<string>, monomersDict: MonomerMolGraphMap, alphabet: ALPHABET, polymerType: PolymerType, monomerLib: IMonomerLib, seqHelper: ISeqHelper, rdKitModule: RDModule, rolesList?: (NucleotideRole[] | undefined)[], chainStartsList?: number[][]): Promise<ToAtomicLevelRes>;
17
17
  export declare function getMolHighlight(monomerMaps: Iterable<MonomerMapValue>, monomerLib: IMonomerLibBase): ISubstruct;
18
18
  //# sourceMappingURL=seq-to-molfile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"seq-to-molfile.d.ts","sourceRoot":"","sources":["seq-to-molfile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAItC,OAAO,EAAC,QAAQ,EAAC,MAAM,6CAA6C,CAAC;AAGrE,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACqB,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAE1F,MAAM,SAAS,CAAC;AACjB,OAAO,EAAC,UAAU,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAc,WAAW,EAAC,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAC,UAAU,EAAC,MAAM,yCAAyC,CAAC;AAGnE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,UAAU,CAAA;KACrB,EAAE,CAAC;IACJ,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAClG,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAC5C,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EACrE,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,EAAE,GAC3C,OAAO,CAAC,gBAAgB,CAAC,CAsD3B;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,eAAe,GAAG,UAAU,CAuB/G"}
1
+ {"version":3,"file":"seq-to-molfile.d.ts","sourceRoot":"","sources":["seq-to-molfile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAItC,OAAO,EAAC,QAAQ,EAAC,MAAM,6CAA6C,CAAC;AAGrE,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACqB,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAE1F,MAAM,SAAS,CAAC;AACjB,OAAO,EAAC,UAAU,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAC,WAAW,EAAE,eAAe,EAAC,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAc,WAAW,EAAC,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAC,UAAU,EAAC,MAAM,yCAAyC,CAAC;AAGnE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,UAAU,CAAA;KACrB,EAAE,CAAC;IACJ,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAClG,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAC5C,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EACrE,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,SAAS,CAAC,EAAE,EAC5C,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAuD3B;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,eAAe,GAAG,UAAU,CAuB/G"}
@@ -2,7 +2,7 @@ import * as DG from 'datagrok-api/dg';
2
2
  import wu from 'wu';
3
3
  import { getMolColName, hexToPercentRgb } from './utils';
4
4
  import { HelmTypes, PolymerTypes } from '../helm/consts';
5
- export async function seqToMolFileWorker(seqCol, monomersDict, alphabet, polymerType, monomerLib, seqHelper, rdKitModule, rolesList) {
5
+ export async function seqToMolFileWorker(seqCol, monomersDict, alphabet, polymerType, monomerLib, seqHelper, rdKitModule, rolesList, chainStartsList) {
6
6
  const srcColLength = seqCol.length;
7
7
  const df = seqCol.dataFrame;
8
8
  const threadCount = Math.max(navigator.hardwareConcurrency - 2, 1);
@@ -29,7 +29,7 @@ export async function seqToMolFileWorker(seqCol, monomersDict, alphabet, polymer
29
29
  resolve(res.data);
30
30
  };
31
31
  });
32
- worker.postMessage({ seqList, rolesList, monomersDict, alphabet, polymerType, start, end });
32
+ worker.postMessage({ seqList, rolesList, chainStartsList, monomersDict, alphabet, polymerType, start, end });
33
33
  }
34
34
  const molList = [];
35
35
  const warnings = [];
@@ -1 +1 @@
1
- {"version":3,"file":"seq-to-molfile.js","sourceRoot":"","sources":["seq-to-molfile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,MAAM,IAAI,CAAC;AAWpB,OAAO,EAAC,aAAa,EAAE,eAAe,EAAC,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAC,SAAS,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAYvD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAyB,EAAE,YAAgC,EAClG,QAAkB,EAAE,WAAwB,EAC5C,UAAuB,EAAE,SAAqB,EAAE,WAAqB,EACrE,SAA4C;IAE5C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,GAA6B,MAAM,CAAC,SAAS,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9C,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAiC,WAAW,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;IACtF,MAAM,OAAO,GAAoB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;aAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACd,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAgB,CAAC;QACjG,CAAC,CAAC;aACD,OAAO,EAAE,CAAC;IACf,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACrF,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE;YAC3D,MAAM,CAAC,SAAS,GAAG,CAAC,GAAoC,EAAQ,EAAE;gBAChE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,EAAC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAA2B,CAAC,CAAC;IACtH,CAAC;IAED,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAiC,EAAE,EAAE;QACrE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,+GAA+G;IAE/G,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,CAAC,CAAC;IACN,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;SAChF,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC/C,MAAM,CAAC,MAAM,sDAA4B,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtD,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAsC,EAAE,UAA2B;IACjG,MAAM,OAAO,GAAgC,EAAE,CAAC;IAChD,MAAM,OAAO,GAAgC,EAAE,CAAC;IAEhD,KAAK,MAAM,eAAe,IAAI,WAAW,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,mBAAmB,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAE,CAAC;QAC7F,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC;QACtC,mDAAmD;QACnD,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7G,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,KAAK;YACvC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,KAAK;YACvC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;IAC7B,CAAC;IAED,MAAM,YAAY,GAAe;QAC/B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnD,mBAAmB,EAAE,OAAO;QAC5B,mBAAmB,EAAE,OAAO;KAC7B,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"seq-to-molfile.js","sourceRoot":"","sources":["seq-to-molfile.ts"],"names":[],"mappings":"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"}
@@ -15,11 +15,25 @@ export declare function getFormattedMonomerLib(monomerLib: IMonomerLibBase, poly
15
15
  * @param {PolymerType} polymerType - Polymer type
16
16
  * @param {Array} roles - Optional per-position NucleotideRole tags. When set, RNA assembly
17
17
  * uses per-position sugars/phosphates from monomerSeq directly (HELM triples mode).
18
+ * @param {number[]} chainStarts - Optional 0-based start positions of disjoint HELM chains.
19
+ * When more than one chain is present each chain is assembled independently and the
20
+ * chains are stacked vertically into a single molfile (multi-strand HELM support).
18
21
  * @return {MolfileWithMap} - Molfile V3000 + per-position monomer index map */
19
- export declare function monomerSeqToMolfile(monomerSeq: ISeqMonomer[], monomersDict: MonomerMolGraphMap, alphabet: ALPHABET, polymerType: PolymerType, roles?: NucleotideRole[]): MolfileWithMap;
22
+ export declare function monomerSeqToMolfile(monomerSeq: ISeqMonomer[], monomersDict: MonomerMolGraphMap, alphabet: ALPHABET, polymerType: PolymerType, roles?: NucleotideRole[], chainStarts?: number[]): MolfileWithMap;
20
23
  /** Keep precision upon floating point operations over atom coordinates
21
24
  * @param {number}x - the floating point number
22
25
  * @return {number} - the floating point number with the same precision
23
26
  */
24
27
  export declare function keepPrecision(x: number): number;
28
+ /** Combine several already-assembled single-chain molfiles into one molfile,
29
+ * stacking them vertically: the first chain keeps its coordinates, every
30
+ * subsequent chain is shifted straight down so its top-most atom sits just
31
+ * below the running bottom of everything placed so far. Atom / bond indices
32
+ * and per-monomer maps are re-based, STEABS collections merged, and the
33
+ * monomer-map keys offset by each chain's start position so the combined map
34
+ * still keys by original flat HELM position.
35
+ * @param {MolfileWithMap[]} parts - per-chain assembled molfiles (chain order)
36
+ * @param {number[]} chainStarts - flat start position of each chain
37
+ * @return {MolfileWithMap} - single combined molfile + merged monomer map */
38
+ export declare function combineMolfilesVertically(parts: MolfileWithMap[], chainStarts: number[]): MolfileWithMap;
25
39
  //# sourceMappingURL=to-atomic-level-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"to-atomic-level-utils.d.ts","sourceRoot":"","sources":["to-atomic-level-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4C,cAAc,EAAwB,kBAAkB,EACzG,cAAc,EAAC,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAC,QAAQ,EAAa,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAC,eAAe,EAAU,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAC,WAAW,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAIvD;;;;iHAIiH;AACjH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GACxE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAqBlB;AAED;;;;;;;+EAO+E;AAC/E,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAC3D,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAC5C,KAAK,CAAC,EAAE,cAAc,EAAE,GACvB,cAAc,CA6HhB;AAmWD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C"}
1
+ {"version":3,"file":"to-atomic-level-utils.d.ts","sourceRoot":"","sources":["to-atomic-level-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4C,cAAc,EAAwB,kBAAkB,EACzG,cAAc,EAAC,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAC,QAAQ,EAAa,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAC,eAAe,EAAU,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAC,WAAW,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAIvD;;;;iHAIiH;AACjH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GACxE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAqBlB;AAED;;;;;;;;;;+EAU+E;AAC/E,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAC3D,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAC5C,KAAK,CAAC,EAAE,cAAc,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAC/C,cAAc,CA8IhB;AAmWD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/C;AAmFD;;;;;;;;;6EAS6E;AAC7E,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,cAAc,CAkFxG"}
@@ -36,12 +36,31 @@ export function getFormattedMonomerLib(monomerLib, polymerType, alphabet) {
36
36
  * @param {PolymerType} polymerType - Polymer type
37
37
  * @param {Array} roles - Optional per-position NucleotideRole tags. When set, RNA assembly
38
38
  * uses per-position sugars/phosphates from monomerSeq directly (HELM triples mode).
39
+ * @param {number[]} chainStarts - Optional 0-based start positions of disjoint HELM chains.
40
+ * When more than one chain is present each chain is assembled independently and the
41
+ * chains are stacked vertically into a single molfile (multi-strand HELM support).
39
42
  * @return {MolfileWithMap} - Molfile V3000 + per-position monomer index map */
40
- export function monomerSeqToMolfile(monomerSeq, monomersDict, alphabet, polymerType, roles) {
43
+ export function monomerSeqToMolfile(monomerSeq, monomersDict, alphabet, polymerType, roles, chainStarts) {
41
44
  if (monomerSeq.length === 0) {
42
45
  // throw new Error('monomerSeq is empty');
43
46
  return MolfileWithMap.createEmpty();
44
47
  }
48
+ // Multi-chain HELM (e.g. RNA1{...}|RNA2{...}): assemble each disjoint chain
49
+ // on its own, then stack them vertically into a single molfile. Each chain
50
+ // reuses the exact single-chain assembly below, so its geometry, capping and
51
+ // per-monomer atom/bond map are unchanged; combineMolfilesVertically shifts
52
+ // the coordinates and re-bases the atom/bond indices and monomer-map keys.
53
+ if (chainStarts && chainStarts.length > 1) {
54
+ const parts = new Array(chainStarts.length);
55
+ for (let c = 0; c < chainStarts.length; ++c) {
56
+ const s = chainStarts[c];
57
+ const e = c + 1 < chainStarts.length ? chainStarts[c + 1] : monomerSeq.length;
58
+ const subSeq = monomerSeq.slice(s, e);
59
+ const subRoles = roles ? roles.slice(s, e) : undefined;
60
+ parts[c] = monomerSeqToMolfile(subSeq, monomersDict, alphabet, polymerType, subRoles);
61
+ }
62
+ return combineMolfilesVertically(parts, chainStarts);
63
+ }
45
64
  // Triples mode is on only when the caller flagged the row with roles
46
65
  // (built and validated by `buildRolesForHelmRna` in to-atomic-level.ts).
47
66
  // The roles array carries the per-position semantics — including
@@ -451,4 +470,163 @@ function runTriplesAssembly(monomerSeq, roles, monomersDict, molfileAtomBlock, m
451
470
  export function keepPrecision(x) {
452
471
  return Math.round(C.PRECISION_FACTOR * x) / C.PRECISION_FACTOR;
453
472
  }
473
+ // Vertical gap (in molfile coordinate units) inserted between stacked chains
474
+ // of a multi-strand HELM. Roughly two bond lengths — enough to read the strands
475
+ // as separate without pushing them far apart.
476
+ const CHAIN_VERTICAL_GAP = 3.0;
477
+ const STEABS_MARKER = 'M V30 MDLV30/STEABS ATOMS=(';
478
+ /** Split `body` into its first `n` space-separated tokens plus a trailing
479
+ * remainder token (so the result has n+1 entries). The remainder keeps any
480
+ * embedded spaces of the tail verbatim.
481
+ * @param {string} body - the line body to split
482
+ * @param {number} n - number of leading tokens to peel off
483
+ * @return {string[]} - the n tokens followed by the remainder */
484
+ function splitLeadingTokens(body, n) {
485
+ const out = [];
486
+ let s = body;
487
+ for (let i = 0; i < n; ++i) {
488
+ const sp = s.indexOf(' ');
489
+ if (sp === -1) {
490
+ out.push(s);
491
+ s = '';
492
+ continue;
493
+ }
494
+ out.push(s.substring(0, sp));
495
+ s = s.substring(sp + 1);
496
+ }
497
+ out.push(s);
498
+ return out;
499
+ }
500
+ /** Extract the data lines (`M V30 ...`) between a BEGIN/END marker pair.
501
+ * @param {string} molfile - the V3000 molfile
502
+ * @param {string} beginMarker - the block BEGIN marker line
503
+ * @param {string} endMarker - the block END marker line
504
+ * @return {string[]} - the data lines of the block, newline stripped */
505
+ function extractBlockDataLines(molfile, beginMarker, endMarker) {
506
+ const begin = molfile.indexOf(beginMarker);
507
+ if (begin === -1)
508
+ return [];
509
+ const start = molfile.indexOf('\n', begin) + 1;
510
+ const end = molfile.indexOf(endMarker, start);
511
+ return molfile.substring(start, end === -1 ? molfile.length : end)
512
+ .split('\n')
513
+ .filter((l) => l.startsWith(C.V3K_BEGIN_DATA_LINE))
514
+ .map((l) => l.substring(C.V3K_BEGIN_DATA_LINE.length));
515
+ }
516
+ /** Parse a molfile produced by monomerSeqToMolfile back into atoms / bonds /
517
+ * stereo-atom indices. Robust because we control the exact serialization
518
+ * format; only the fields we need to renumber (indices) and shift (y) are
519
+ * parsed, everything past them is preserved verbatim as an opaque tail.
520
+ * @param {string} molfile - the V3000 molfile
521
+ * @return {ParsedMol} - parsed atoms, bonds and STEABS atom indices */
522
+ function parseGeneratedMolfile(molfile) {
523
+ const atoms = [];
524
+ for (const body of extractBlockDataLines(molfile, C.V3K_BEGIN_ATOM_BLOCK, C.V3K_END_ATOM_BLOCK)) {
525
+ // body: "<idx> <type> <x> <y> <z> <...kwargs>"
526
+ const t = splitLeadingTokens(body, 4); // [idx, type, x, y, tail]
527
+ atoms.push({ type: t[1], xStr: t[2], y: parseFloat(t[3]), tail: t[4] });
528
+ }
529
+ const bonds = [];
530
+ for (const body of extractBlockDataLines(molfile, C.V3K_BEGIN_BOND_BLOCK, C.V3K_END_BOND_BLOCK)) {
531
+ // body: "<idx> <btype> <a1> <a2> <...cfg/kwargs>"
532
+ const t = splitLeadingTokens(body, 4); // [idx, btype, a1, a2, tail]
533
+ bonds.push({ btype: t[1], a1: parseInt(t[2]), a2: parseInt(t[3]), tail: t[4] });
534
+ }
535
+ const steabs = [];
536
+ let idx = molfile.indexOf(STEABS_MARKER);
537
+ while (idx !== -1) {
538
+ idx += STEABS_MARKER.length;
539
+ const closeIdx = molfile.indexOf(')', idx);
540
+ // first entry inside the parens is the atom count, not an atom index
541
+ steabs.push(...molfile.substring(idx, closeIdx).split(' ').slice(1)
542
+ .map((s) => parseInt(s)).filter((n) => !Number.isNaN(n)));
543
+ idx = molfile.indexOf(STEABS_MARKER, closeIdx);
544
+ }
545
+ return { atoms, bonds, steabs };
546
+ }
547
+ /** Combine several already-assembled single-chain molfiles into one molfile,
548
+ * stacking them vertically: the first chain keeps its coordinates, every
549
+ * subsequent chain is shifted straight down so its top-most atom sits just
550
+ * below the running bottom of everything placed so far. Atom / bond indices
551
+ * and per-monomer maps are re-based, STEABS collections merged, and the
552
+ * monomer-map keys offset by each chain's start position so the combined map
553
+ * still keys by original flat HELM position.
554
+ * @param {MolfileWithMap[]} parts - per-chain assembled molfiles (chain order)
555
+ * @param {number[]} chainStarts - flat start position of each chain
556
+ * @return {MolfileWithMap} - single combined molfile + merged monomer map */
557
+ export function combineMolfilesVertically(parts, chainStarts) {
558
+ const combinedAtomLines = [];
559
+ const combinedBondLines = [];
560
+ const combinedSteabs = [];
561
+ const combinedMap = new MonomerMap();
562
+ let atomOffset = 0;
563
+ let bondOffset = 0;
564
+ let runningBottom = Number.POSITIVE_INFINITY; // lowest y placed so far
565
+ let anyPlaced = false;
566
+ for (let c = 0; c < parts.length; ++c) {
567
+ const part = parts[c];
568
+ if (!part || !part.molfile)
569
+ continue;
570
+ const pm = parseGeneratedMolfile(part.molfile);
571
+ if (pm.atoms.length === 0)
572
+ continue;
573
+ let minY = Number.POSITIVE_INFINITY;
574
+ let maxY = Number.NEGATIVE_INFINITY;
575
+ for (const a of pm.atoms) {
576
+ if (a.y < minY)
577
+ minY = a.y;
578
+ if (a.y > maxY)
579
+ maxY = a.y;
580
+ }
581
+ // First placed chain keeps its coordinates; later chains drop below the
582
+ // current bottom, leaving CHAIN_VERTICAL_GAP between the strands.
583
+ const yShift = anyPlaced ? keepPrecision(runningBottom - CHAIN_VERTICAL_GAP - maxY) : 0;
584
+ for (let ai = 0; ai < pm.atoms.length; ++ai) {
585
+ const a = pm.atoms[ai];
586
+ const newIdx = atomOffset + ai + 1;
587
+ const newY = keepPrecision(a.y + yShift);
588
+ combinedAtomLines.push(C.V3K_BEGIN_DATA_LINE + newIdx + ' ' + a.type + ' ' + a.xStr + ' ' + newY + ' ' + a.tail + '\n');
589
+ }
590
+ for (let bi = 0; bi < pm.bonds.length; ++bi) {
591
+ const b = pm.bonds[bi];
592
+ const newIdx = bondOffset + bi + 1;
593
+ const tail = b.tail ? ' ' + b.tail : '';
594
+ combinedBondLines.push(C.V3K_BEGIN_DATA_LINE + newIdx + ' ' + b.btype + ' ' + (b.a1 + atomOffset) + ' ' + (b.a2 + atomOffset) + tail + '\n');
595
+ }
596
+ for (const s of pm.steabs)
597
+ combinedSteabs.push(s + atomOffset);
598
+ const posOffset = chainStarts[c] ?? 0;
599
+ for (const [pos, val] of part.monomers) {
600
+ combinedMap.set(posOffset + pos, {
601
+ biotype: val.biotype,
602
+ symbol: val.symbol,
603
+ atoms: val.atoms.map((x) => x + atomOffset),
604
+ bonds: val.bonds.map((x) => x + bondOffset),
605
+ });
606
+ }
607
+ const newBottom = keepPrecision(minY + yShift);
608
+ runningBottom = anyPlaced ? Math.min(runningBottom, newBottom) : newBottom;
609
+ anyPlaced = true;
610
+ atomOffset += pm.atoms.length;
611
+ bondOffset += pm.bonds.length;
612
+ }
613
+ if (!anyPlaced)
614
+ return MolfileWithMap.createEmpty();
615
+ let result = '';
616
+ result += C.V3K_HEADER_FIRST_LINE;
617
+ result += C.V3K_HEADER_SECOND_LINE;
618
+ result += C.V3K_BEGIN_CTAB_BLOCK;
619
+ result += C.V3K_BEGIN_COUNTS_LINE + atomOffset + ' ' + bondOffset + C.V3K_COUNTS_LINE_ENDING;
620
+ result += C.V3K_BEGIN_ATOM_BLOCK;
621
+ result += combinedAtomLines.join('');
622
+ result += C.V3K_END_ATOM_BLOCK;
623
+ result += C.V3K_BEGIN_BOND_BLOCK;
624
+ result += combinedBondLines.join('');
625
+ result += C.V3K_END_BOND_BLOCK;
626
+ if (combinedSteabs.length > 0)
627
+ result += getCollectionBlock(combinedSteabs);
628
+ result += C.V3K_END_CTAB_BLOCK;
629
+ result += C.V3K_END;
630
+ return { molfile: result, monomers: combinedMap };
631
+ }
454
632
  //# sourceMappingURL=to-atomic-level-utils.js.map