--- title: "HELM Rules for Peptide Import" slug: "reference-helm-rules" status: "new" updated: 2026-10-14T09:25:29Z published: 2026-10-14T09:25:29Z canonical: "docs.discngine.com/reference-helm-rules" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.discngine.com/llms.txt > Use this file to discover all available pages before exploring further. # HELM Rules for Peptide Import This page lists the rules a HELM string must follow to import into a Peptide dataset and display correctly in the peptide viewer. HELM (Hierarchical Editing Language for Macromolecules) is an open standard maintained by the [Pistoia Alliance](https://pistoiaalliance.org/); this page covers the subset of the [HELM notation](https://pistoiaalliance.atlassian.net/wiki/spaces/HELM/overview) that Ideation supports, and how Ideation reads each part of it. For the import steps themselves, see [How to Create a Peptide Dataset](/public/docs/how-to-create-peptide-dataset). Where HELM is read HELM is read only from **CSV and Excel** files, from the column chosen as **HELM Column**. Only the first worksheet of an Excel file is read. An **SDF** import never reads HELM: the peptide comes from its V3000 structure, and its HELM is generated by Ideation. Monomers in the examples The examples below use public peptides only: the sample peptides of the HELM specification, oxytocin and gramicidin S. Their non-natural monomers come from the public [Pistoia Alliance HELM monomer sets](https://github.com/PistoiaHELM/HELMMonomerSets) (`Aib`, `dK`, `dF`, `meA`, `Orn`, `am`, `SMCC`, `PEG2`), plus `mXylene`, the m-xylene linker that bridges two cysteines. A non-natural monomer imports only if it is registered on your organization's Biotoolkit Monomer Service or supplied in your monomer library. ## Layout of a HELM string A HELM string has five sections separated by `$`: `<chains>$<connections>$<groups>$<annotations>$<version>` What each section holds in Ideation: | Section | Content in Ideation | | --- | --- | | Chains | One or more chains separated by `\|`, each written `TYPE<n>{monomer.monomer.…}`. | | Connections | The bonds between chains, or inside a chain, separated by `\|`. Empty when the peptide is a single linear chain. | | Groups | Not supported. Leave empty. | | Annotations | Not supported. Leave empty. | | Version | `V2.0`, or empty. | A HELM string always contains exactly **four** `$` signs, whether or not the version is written. The first three rows use the sample peptide of the HELM specification, the last one gramicidin S: | HELM | Valid | | --- | --- | | `PEPTIDE1{A.R.G.[dF].C.K.[meA].E.D.A}$$$$` | yes | | `PEPTIDE1{A.R.G.[dF].C.K.[meA].E.D.A}$$$$V2.0` | yes | | `PEPTIDE1{A.R.G.[dF].C.K.[meA].E.D.A}$$$V2.0` | no — three `$` signs only | | `PEPTIDE1{V.[Orn].L.[dF].P.V.[Orn].L.[dF].P}$PEPTIDE1,PEPTIDE1,10:R2-1:R1$$$V2.0` | yes — the connection fills the second section | ## The HELM cell Rules for the CSV or Excel cell that holds the HELM string: | Rule | Detail | | --- | --- | | One HELM string per cell | The cell holds the HELM string and nothing else. | | No spaces, no line breaks | The cell is read exactly as written. A leading space, a trailing space or a line break inside the string makes the peptide fail validation or conversion. | | Quoted in comma-separated CSV | HELM contains commas in its connections. In a comma-separated CSV file the HELM value is enclosed in double quotes: `"PEPTIDE1{A.R.C.D.K.A}\|PEPTIDE2{G.A.K.A}$PEPTIDE1,PEPTIDE2,4:R3-1:R1$$$V2.0"`. Semicolon- and tab-separated files need no quotes. | | Empty cell | The row is not imported, with the reason *Missing HELM notation*. | ## Chain types The chain types Ideation reads, and what each one is used for: | Chain type | Use | | --- | --- | | `PEPTIDE` | Amino acid chains: the backbone and its branches. | | `CHEM` | A single non-peptide chemical object: a linker, a cap, a lipid, a tag. One monomer per `CHEM` chain. | `RNA` and `BLOB` chains are not supported. The type is written in upper case, followed by a number: `PEPTIDE1`, `PEPTIDE2`, `CHEM1`. ## Monomer symbols Rules for writing and resolving the monomer symbols inside a chain: | Rule | Detail | | --- | --- | | Separator | Monomers inside a chain are separated by `.`. | | Brackets | A one-letter symbol is written as is (`A`). A symbol of two characters or more is written in square brackets (`[Aib]`, `[dK]`). `A` and `[A]` are the same monomer. | | Case-sensitive | `[Aib]` and `[aib]` are two different symbols. A symbol in the wrong case is not found and is reported as a missing monomer. | | Length and characters | 1 to 50 characters, with no spaces. | | Registered under the chain's type | A symbol is looked up under the type of the chain it appears in. A monomer registered only as `PEPTIDE` is reported missing when used in a `CHEM` chain, and the other way round. | | Known to the Biotoolkit Monomer Service | Every symbol is either already registered on the Biotoolkit Monomer Service or supplied in the monomer library uploaded with the dataset. Otherwise it is reported missing — see [How to Resolve Missing Monomers](/public/docs/how-to-resolve-missing-monomers). | | Registered definition wins | When a symbol is already registered, its registered structure and attachment points are used, even if the uploaded monomer library describes it differently. | ## Attachment points Each monomer bonds through numbered attachment points: `R1` and `R2` on the backbone, `R3` (and higher) on the side chain. Rules for using attachment points: | Rule | Detail | | --- | --- | | Chain direction | A `PEPTIDE` chain is written from the N-terminus to the C-terminus. Each monomer's `R2` bonds to the next monomer's `R1`. | | Terminal-only monomers | A monomer with an `R1` but no `R2` is the last monomer of its chain. A monomer with an `R2` but no `R1` is the first. | | Side-chain bonds need an `R3` | A connection on `R3` is valid only if the monomer has one. Among the natural amino acids, `C`, `D`, `E` and `K` have an `R3`. `PEPTIDE1,CHEM1,2:R3-1:R1` on a glycine fails with *Attachment point R3 for monomer source G doesn't exists*. | ## Connections A connection is written `SOURCE,TARGET,position:Rn-position:Rn`. Positions are the 1-based index of the monomer in its chain. Rules for writing a connection: | Rule | Detail | | --- | --- | | Numeric positions and attachment points | Both ends name an explicit position and attachment point (`4:R3`). Ambiguous forms — a monomer symbol instead of a position (`C:R3`), a list of positions (`(2,5):R3`), an unknown attachment point (`?`) — are not supported. | | Chain identifiers | The source and target are chain identifiers declared in the chains section (`PEPTIDE1`, `CHEM2`). | ## Backbone and chain order Rules that decide which chain is the backbone, and how chains are numbered: | Rule | Detail | | --- | --- | | The first `PEPTIDE` chain is the backbone | The backbone is the **first `PEPTIDE` chain written** in the string, whatever its number and whatever its length. Every other `PEPTIDE` chain is a branch. | | Chain numbers are reassigned at import | On import, the chains are renumbered in the order they are written: the first `PEPTIDE` chain becomes `PEPTIDE1`, the next `PEPTIDE2`, and so on, and the connections are updated to match. The **HELM** column shows the renumbered string when the conversion succeeds and no monomer had to be inlined; otherwise it shows the HELM as written. | | `CHEM` chains are not sequence positions | `CHEM` chains are never part of the backbone or of a branch, and take no position in the sequence or in the alignment. | | A peptide needs a `PEPTIDE` chain | A HELM made of `CHEM` chains only has no sequence. It is excluded from alignments and is not shown in the peptide viewer. | Two ways of writing the branched example of the HELM specification, and the backbone each one gives: | Written | Stored after import | Backbone | | --- | --- | --- | | `PEPTIDE2{A.R.C.D.K.A}\|PEPTIDE1{G.A.K.A}$PEPTIDE2,PEPTIDE1,4:R3-1:R1$$$V2.0` | `PEPTIDE1{A.R.C.D.K.A}\|PEPTIDE2{G.A.K.A}$PEPTIDE1,PEPTIDE2,4:R3-1:R1$$$V2.0` | `A.R.C.D.K.A` | | `PEPTIDE1{G.A.K.A}\|PEPTIDE2{A.R.C.D.K.A}$PEPTIDE2,PEPTIDE1,4:R3-1:R1$$$V2.0` | unchanged | `G.A.K.A` | In the second writing, the intended branch `G.A.K.A` becomes the backbone, and `A.R.C.D.K.A` becomes a branch bonded through the side chain of its residue 4 to the backbone's `R1`. That is not a branch shape the viewer supports (see **Branches** below), so always write the intended backbone first. ## Branches A branch is a `PEPTIDE` chain, other than the first, bonded to a side chain of the backbone. Rules for branches: | Rule | Detail | | --- | --- | | Attached to the backbone | A branch is connected directly to a backbone residue's side chain. Its position is the backbone position named in that connection. | | Bonding end | The branch bonds through its first residue (`…-1:R1`) or its last residue (`…-n:R2`). See [How to Explore the Peptide Viewer](/public/docs/how-to-explore-peptide-viewer) for how each is drawn. | | Several branches on one residue | Supported. | | Branch on a branch | Not supported. A branch bonded to another branch, or with no connection to the backbone, is placed at backbone position 1. | | Bridge between backbone and branch | Not drawn. A bond between a backbone residue and a residue inside a branch — for example a second disulfide between the two chains of a dimer — is kept in the structure but is not shown as a bridge. | | Bridge inside a branch | Not drawn. A side-chain bond between two residues of a branch, or of two different branches, is kept in the structure but is not shown as a bridge. A `CHEM` linker bonded to a branch residue and to a second residue, in a branch or on the backbone, is drawn as a chemical object on one of the two residues, without its second bond. | Example from the HELM specification — a branch bonded to the side chain of `D4`: `PEPTIDE1{A.R.C.D.K.A}|PEPTIDE2{G.A.K.A}$PEPTIDE1,PEPTIDE2,4:R3-1:R1$$$V2.0` ## Cyclization and bridges How each cyclic or bridged structure is written: | Structure | HELM | | --- | --- | | Head-to-tail macrocycle | A connection from the chain to itself, last residue's `R2` to first residue's `R1`: `PEPTIDE1{V.[Orn].L.[dF].P.V.[Orn].L.[dF].P}$PEPTIDE1,PEPTIDE1,10:R2-1:R1$$$V2.0` (gramicidin S) | | Side-chain bridge | A connection between the side chains of two backbone residues: `PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}$PEPTIDE1,PEPTIDE1,1:R3-6:R3$$$V2.0` (oxytocin, disulfide C1–C6) | | Bridge through a linker | A `CHEM` monomer with two attachment points, each bonded to one backbone residue: `PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}\|CHEM1{[mXylene]}$PEPTIDE1,CHEM1,1:R3-1:R1\|PEPTIDE1,CHEM1,6:R3-1:R2$$$V2.0` (oxytocin with its disulfide replaced by an m-xylene bis-thioether) | Rules for bridges and bridge linkers: | Rule | Detail | | --- | --- | | No bridge between neighbours | A side-chain bridge between two adjacent residues (`2:R3-3:R3`) cannot be converted: the residues are already bonded through the backbone. Residues `i` and `i+2` or further apart are supported. | | Linker bridges two residues | A `CHEM` monomer counts as a bridge linker only when it bonds to exactly two different backbone residues. Bonded to one residue, it is drawn as a chemical object on that residue. Bonded to three or more backbone residues, it is not a bridge either: it is drawn as a chemical object on one of those residues, and its other bonds are not drawn. | | A linker is a `CHEM` chain | A `PEPTIDE` chain is never a bridge linker. A `PEPTIDE` chain bonded to two backbone residues is read as a branch (see **Branches** above), attached at the backbone residue of its first connection written. Its second bond to the backbone is kept in the structure, but the branch is not reconnected to the backbone in the viewer. | | One `CHEM` monomer per linker | Not supported: a bridge running through several `CHEM` monomers bonded to each other (residue – `CHEM1` – `CHEM2` – residue). Such a bridge is not drawn. | | No chemical objects on a linker | Not supported: a chemical object, or a chain of objects, bonded to a bridge linker's free attachment point. The bridge is drawn, but the objects on its linker are not. | ## Chemical objects A chemical object is a `CHEM` chain bonded to a residue's side chain, or to another chemical object. Rules for chemical objects: | Rule | Detail | | --- | --- | | On a residue | Bonded to the residue's `R3`: `PEPTIDE1,CHEM1,6:R3-1:R1`. Chemical objects can also be bonded to the N-terminal residue's `R1` or the C-terminal residue's `R2`, which is how caps are attached. | | Chains of objects | An object bonds to another object through a free attachment point: `CHEM1,CHEM2,1:R2-1:R1`. Chains and trees of objects are supported. | | Not bonded to a residue | An object bonded to no residue, directly or through other objects, is not drawn. | Example — `K6` of the HELM specification's sample peptide carrying an `SMCC` linker, which carries a `PEG2` spacer: `PEPTIDE1{A.R.G.[dF].C.K.[meA].E.D.A}|CHEM1{[SMCC]}|CHEM2{[PEG2]}$PEPTIDE1,CHEM1,6:R3-1:R1|CHEM1,CHEM2,1:R2-1:R1$$$V2.0` ## Unsupported HELM features The following parts of the HELM 2 notation are not supported in Ideation. A peptide that uses them is imported with missing data or not converted. | Feature | Example | | --- | --- | | Monomer lists and mixtures | `(K,R)`, `(K+R)`, `(K:0.7,R:0.3)` | | Repeated monomers | `K'3'`, `(A.G)'2-4'` | | Inline annotations | `K"labelled"` | | Unknown monomers | `*`, `_` | | Inline SMILES monomers | `[[R1]CC[R2]]` | | Ambiguous connections | `C:R3`, `(2,5):R3`, `?` | | Polymer groups | `G1(PEPTIDE1+PEPTIDE2)` | | `RNA` and `BLOB` chains | `RNA1{R(A)P}`, `BLOB1{Bead}` | A non-standard monomer is written by its symbol and registered on the Biotoolkit Monomer Service, or supplied in the monomer library — see [How to Create a Peptide Dataset](/public/docs/how-to-create-peptide-dataset). ## Unsupported in the SAR Slide The following structures import, and the peptide keeps its full structure and calculated properties, but the SAR Slide does not show them as written. Each one is described in its section above. | Structure | What the SAR Slide shows | Workaround | | --- | --- | --- | | A branch bonded to several backbone residues, or a `PEPTIDE` bridge linker | The branch, attached at its first connection only. | None | | A branch bonded to another branch, or not bonded to the backbone | The branch, placed at backbone position 1. | None | | A bond between a backbone residue and a residue inside a branch | The branch, without that bond. | None | | A bridge linker bonded to three or more backbone residues | No bridge. The linker is drawn as a chemical object on one of those residues, without its other bonds. | None | | A bridge inside a branch, or a `CHEM` linker bonded to a branch residue | No bridge. A `CHEM` linker is drawn as a chemical object on one of the two residues. | None | | A bridge through several `CHEM` monomers bonded to each other | No bridge. The `CHEM` monomers are drawn as a chemical chain on the residue bonded to the first `CHEM` chain written in the HELM, without the bond to the other residue. | Merge the `CHEM` monomers into one linker (see below) | | A chemical object, or a chain of objects, on a bridge linker | The bridge, without the objects on its linker. | Merge the linker and its objects into one linker (see below) | | A peptide made of `CHEM` chains only | Nothing: the peptide has no sequence and is left out of alignments and of the viewer. | None | | A chemical object bonded to no residue | Nothing for that object. | None | Both workarounds replace several `CHEM` monomers with a single `CHEM` monomer whose structure is their concatenation, with an `R1` and an `R2` for the two bridged residues. Register the merged monomer on the Biotoolkit Monomer Service or supply it in the monomer library before importing — see [How to Resolve Missing Monomers](/public/docs/how-to-resolve-missing-monomers). The SAR Slide then draws the bridge, with the merged monomer as one linker: its parts are no longer compared separately. ### Workaround: bridge through several CHEM monomers Before — oxytocin bridged from `C1` to `C6` through `SMCC` then `PEG2`. No bridge is drawn: `PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}|CHEM1{[SMCC]}|CHEM2{[PEG2]}$PEPTIDE1,CHEM1,1:R3-1:R1|CHEM1,CHEM2,1:R2-1:R1|CHEM2,PEPTIDE1,1:R2-6:R3$$$V2.0` After — `SMCC` and `PEG2` merged into one monomer, here called `SMCC-PEG2`, drawn as a bridge linker: `PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}|CHEM1{[SMCC-PEG2]}$PEPTIDE1,CHEM1,1:R3-1:R1|PEPTIDE1,CHEM1,6:R3-1:R2$$$V2.0` ### Workaround: chemical objects on a bridge linker Before — a linker with three attachment points, here called `Lnk3`, bridges `C1` and `C6` and carries a `PEG2` on its `R3`. The bridge is drawn without the `PEG2`: `PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}|CHEM1{[Lnk3]}|CHEM2{[PEG2]}$PEPTIDE1,CHEM1,1:R3-1:R1|PEPTIDE1,CHEM1,6:R3-1:R2|CHEM1,CHEM2,1:R3-1:R1$$$V2.0` After — `Lnk3` and `PEG2` merged into one monomer, here called `Lnk3-PEG2`, drawn as a bridge linker: `PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}|CHEM1{[Lnk3-PEG2]}$PEPTIDE1,CHEM1,1:R3-1:R1|PEPTIDE1,CHEM1,6:R3-1:R2$$$V2.0` ## Related pages - [How to Create a Peptide Dataset](/public/docs/how-to-create-peptide-dataset) - [How to Resolve Missing Monomers](/public/docs/how-to-resolve-missing-monomers) - [Understanding Peptides in Ideation](/public/docs/explanation-understanding-peptides)