PTM specification syntax¶
Every isoform row (in Option 1) and the FASTA translation (in Option 2) has a PTM spec text box. This page is the full grammar.
Grammar¶
133_S_Phospho; 210_T_Phospho,215_Y_Sulfo
- Semicolon (
;) separates independent proteoforms derived from this isoform — each group becomes its own row in the proteoform table, alongside the unmodified form (which is always included regardless of what you type here). - Comma (
,) combines multiple PTMs onto the same proteoform (one co-modified form), up to 5 PTMs per group. - Each single PTM is
<1-based residue position>_<amino acid code>_<Unimod name>.
So the example above produces two extra proteoform rows: one with a single phospho at residue 133, and one with both a phospho at 210 and a sulfation at 215 together.
Amino acid code¶
Single-letter codes (S, T, Y, ...) are the primary, documented form — they match the
single-letter sequence shown when you hover a transcript ID in the isoform catalog, so a residue you
read off there can be typed in directly with no translation step. Three-letter codes (Ser, Thr,
Tyr, ...) are also accepted, for anyone used to that convention.
Supported modification names¶
See Supported PTMs for the full table (name, Unimod ID, mass
deltas). Common ones: Phospho, Acetyl, Methyl, Oxidation, GG (ubiquitin/SUMO remnant).
What happens when a spec is invalid¶
Invalid groups are dropped with a human-readable warning, shown above the isoform catalog — they don't block the other, valid groups in the same text box, and they don't block the unmodified form. Reasons a group gets dropped:
| Problem | Example warning |
|---|---|
Wrong format (not exactly 3 _-separated parts) |
"133S_Phospho" does not match residue_AA_PTM format |
| Residue position out of range | residue 900 out of range (1-743) |
| Unknown amino acid code | unknown residue code "X" |
| The stated residue doesn't match the actual sequence | residue 211 is W in this isoform, not S |
| Unknown PTM name | unknown PTM "Phosphoo" |
| More than 5 PTMs in one group | 6 PTMs exceeds the limit of 5 |
The sequence-mismatch case is the one worth double-checking carefully: a modification site is isoform-specific, since different isoforms of the same gene often have shifted residue numbering around alternatively-spliced exons. A spec copied from one isoform's numbering may point at a completely different (or absent) residue in another. Always verify against that specific row's hover-popover sequence before trusting a spec across isoforms.
Worked example¶
For BCL2L1 transcript ENST00000941693, residue 14 is genuinely Serine. Typing:
14_S_Phospho
produces an additional proteoform row ENST00000941693 + Phospho@14, its mass exactly Unimod's
phospho delta (+79.966331 Da monoisotopic) above the unmodified form:

...and the fragment ladder marks exactly where it sits, with every b/y ion downstream of the site correctly mass-shifted:
