How to Get the Right Protein Sequence from UniProt for Modelling (Canonical Isoform, Signal Peptide and Residue Numbering)

Search your protein in UniProt, keep only entries marked Reviewed (Swiss-Prot), and take the canonical isoform rather than an alternative splice product. Read the Signal peptide and Chain features to see which residues form the mature protein. Then check the PDB entry’s DBREF line, because its numbering is often offset from UniProt.
Almost every modelling error that surfaces three weeks into a project starts here. The docking grid box sits two nanometres off the pocket. The GROMACS index group for “the catalytic residues” selects a random loop. The mutation you built is not the mutation in the paper. None of these are docking bugs or MD bugs. They are sequence-selection bugs, and they are invisible until something downstream produces a number that cannot be right. This guide walks through the four decisions that fix them, using a single protein you can verify yourself. Written by the StemSkills Lab team, from 10+ years in sequence and structural bioinformatics, drug discovery and design, and multiscale molecular modeling.
Which UniProt entry should you use, Swiss-Prot or TrEMBL?
Use the Reviewed (Swiss-Prot) entry. It is manually curated, so its feature annotations (signal peptide, domain boundaries, active site, variants) have been checked by a human curator against the literature. Unreviewed (TrEMBL) entries are annotated automatically and often carry no usable feature table at all.
The size difference explains why this filter matters so much. As of UniProt release 2026_02 (10 June 2026), UniProtKB holds 575,503 reviewed entries against 149,234,636 unreviewed ones. Reviewed entries are roughly four in every thousand records in the database. If you search a protein name and click the first hit without filtering, the odds are overwhelmingly that you have landed on an automatic annotation.
You can tell them apart from the FASTA header alone, which is useful when a file arrives from a collaborator with no context:
>sp|P00533|EGFR_HUMAN ...thespprefix means Swiss-Prot, reviewed>tr|A0A0A0MS99|A0A0A0MS99_HUMAN ...thetrprefix means TrEMBL, unreviewed
On the UniProt website, tick the Reviewed (Swiss-Prot) box in the left-hand filter panel before you read any result. In the REST API, add reviewed:true to the query. Everything below assumes you did this.
What is the canonical isoform, and why does the wrong one break your model?
A Swiss-Prot entry describes every curated protein product of one gene in one species, which can mean several isoforms inside a single record. UniProt displays one of them as the canonical sequence. The UniProt help page on canonical sequences lists the criteria: the sequence should be functional, widely expressed, encoded by conserved exons, or matched to CCDS and MANE consensus sets. Where none of that is decidable, UniProt states plainly: “In the absence of any information, we choose the longest sequence.”
Take human EGFR, accession P00533. The entry contains four isoforms, and their lengths are not close:
- P00533-1 (canonical, displayed): 1,210 residues
- P00533-2: 405 residues
- P00533-3: 705 residues
- P00533-4: 628 residues
The protein kinase domain in this entry spans residues 712 to 979. Isoforms 2, 3 and 4 all end before residue 712. If your project is EGFR inhibitor docking and you downloaded isoform 2, you are holding a 405-residue fragment with no ATP pocket anywhere in it. Nothing later in the pipeline will tell you this. AutoDock Vina will happily dock into whatever cleft it finds.
The trap is that the isoform accession looks almost identical to the canonical one. P00533 and P00533-2 differ by two characters and sit next to each other in the entry’s Sequences section. Copy the accession without the dash suffix and you have the canonical sequence. This is the same care you need when you download a protein structure from the RCSB PDB, where near-identical entry codes describe different constructs.
Want the guided, hands-on version?
Our live Molecular Modeling & MD Simulations cohort bootcamp takes you from zero to running real docking and MD workflows, with a portfolio project for your grad-school applications.
Which residues actually belong in your modelling construct?
The canonical sequence is the precursor, the protein as translated. Much of it is cut away before the protein does its job. UniProt records those cuts in the feature table, in the PTM/Processing section of the entry page.
For P00533 the features are unambiguous:
- Signal peptide, 1 to 24: the targeting sequence, removed by signal peptidase in the endoplasmic reticulum
- Chain, 25 to 1210: the mature Epidermal growth factor receptor, 1,186 residues
The Chain feature is the one you want. It is UniProt’s statement of what the mature protein is. Signal peptides, transit peptides (which target mitochondria or chloroplasts) and propeptides are all annotated separately precisely so you can subtract them.
This is not a rare edge case. Of the 20,431 reviewed human entries in UniProtKB, 3,616 carry a signal peptide annotation, close to one in six. If you work on receptors, secreted proteins or anything that passes through the secretory pathway, it is the normal case rather than the exception.
Leaving the signal peptide in has a measurable cost, and you can see it in the AlphaFold model. The AlphaFold DB entry for P00533 models the full precursor, residues 1 to 1210, because AlphaFold DB is built directly on UniProt canonical sequences. Computing the mean pLDDT from model v6 gives:
- Residues 1 to 24 (signal peptide): mean pLDDT 44.2
- Residues 712 to 979 (kinase domain): mean pLDDT 84.1
A pLDDT of 44 is in AlphaFold’s very low confidence band. That stretch is a hydrophobic helix flapping loose off the side of your model. Solvate that in GROMACS and you pay for a larger box, more water molecules and longer runs, all to simulate 24 residues that are not present in the real protein. Cut the signal peptide before you build the system, not after.
What about propeptides and transit peptides?
Same logic, different feature name. A propeptide is removed during maturation (think zymogens such as trypsinogen becoming trypsin), and a transit peptide is removed after organelle import. Both appear in the PTM/Processing section alongside the Chain feature. If your entry has one, the Chain boundaries already account for it, which is why reading Chain is more reliable than subtracting features one by one.
Why do the PDB residue numbers not match UniProt?
Because crystallographers number the construct they crystallised, and UniProt numbers the precursor. When the construct starts at the mature N-terminus, every residue number in the PDB file is shifted by the length of the signal peptide.
The worked example is PDB 1M17, the EGFR kinase domain with erlotinib. Its DBREF record states the mapping outright:
DBREF 1M17 A 671 998 UNP P00533 EGFR_HUMAN 695 1022Author residue 671 is UniProt residue 695. The offset is exactly 24, the length of the signal peptide. So the two numbering systems for the same physical residue are:
| Residue | UniProt P00533 number | 1M17 author number | What resi <UniProt number> selects in 1M17 |
|---|---|---|---|
| Gatekeeper threonine (T790M site) | 790 (Thr) | 766 (Thr) | Leu 790, the wrong residue |
| Activating leucine (L858R site) | 858 (Leu) | 834 (Leu) | Ala 858, the wrong residue |
This is the failure mode in full. Type select gatekeeper, resi 790 in PyMOL with 1M17 loaded and you get a leucine 24 residues down the chain from the threonine you meant. Your docking grid box is then centred on the wrong part of the pocket, your distance restraints measure the wrong contact, and every plot downstream is internally consistent and wrong.
1M17 adds a second trap that DBREF alone does not cover. Its SEQADV records flag five N-terminal residues, author 666 to 670 (Gly, Ser, His, Met, Ala), as a cloning artifact. They exist in the crystallised construct but correspond to nothing in P00533, a leftover from the expression tag. Strip them before you model, or you have a five-residue tail that is not part of the protein.
How do you check the offset for your own structure?
Three ways, in increasing order of reliability:
- Read the DBREF line in the PDB file:
grep DBREF yourfile.pdb. Fast, and it covers most cases. - Query the PDBe SIFTS mapping, the residue-level authority on PDB-to-UniProt correspondence. SIFTS is described in the PDBe SIFTS documentation, and one call returns the mapping:
curl -s "https://www.ebi.ac.uk/pdbe/api/mappings/uniprot/1m17" - Check a residue you already know. Pick an annotated active-site or variant residue from UniProt, find it in the structure, and confirm the amino acid type matches. If UniProt says Thr and the structure shows Leu at that number, you have found your offset.
Never assume the offset is zero, and never assume it equals the signal peptide length either. Many modern depositions number by the UniProt precursor, so the offset is genuinely zero. Others start at 1 for a construct that begins mid-protein. The only safe move is to check per structure, the same discipline you apply when you validate a protein structure before using it.
How do you download exactly the sequence you decided on?
The UniProt REST API gives reproducible, scriptable downloads, which matters when a reviewer asks eight months later which sequence you used. These commands are the ones you need, and each returns the file described:
Canonical sequence only:
curl -s "https://rest.uniprot.org/uniprotkb/P00533.fasta" -o P00533_canonical.fastaA specific isoform (note the dash suffix):
curl -s "https://rest.uniprot.org/uniprotkb/P00533-2.fasta" -o P00533_isoform2.fastaAll isoforms at once, when you want to compare before choosing:
curl -s "https://rest.uniprot.org/uniprotkb/search?query=accession:P00533&format=fasta&includeIsoform=true"Just the feature boundaries, so you can read the cut sites without opening a browser:
curl -s "https://rest.uniprot.org/uniprotkb/P00533.json?fields=accession,ft_signal,ft_chain,ft_domain"Cut the mature chain from the canonical FASTA, using the Chain boundaries you just read (25 to 1210):
python3 -c "
import sys
h=open('P00533_canonical.fasta').readline().strip()
seq=''.join(l.strip() for l in open('P00533_canonical.fasta').readlines()[1:])
mature=seq[24:1210]
print(h+' | mature chain 25-1210')
print(mature)
" > P00533_mature.fastaThat produces a 1,186-residue sequence beginning LEEKKVCQGTSNKLTQ..., which is the mature EGFR N-terminus. Keep both files. The precursor is what you cite; the mature chain is what you model.
How does this change your AlphaFold, docking and GROMACS steps?
Each downstream tool inherits the numbering of whatever you fed it, and each fails silently in a different way.
| Step | What it inherits | The silent failure | The fix before you start |
|---|---|---|---|
| AlphaFold DB lookup | UniProt canonical numbering, full precursor | Low-confidence signal peptide modelled as a loose helix | Delete the signal peptide residues; note that DB models cover the canonical isoform only |
| ColabFold / local AlphaFold run | Whatever FASTA you paste, numbered from 1 | Numbering restarts at 1, so it matches neither UniProt nor the PDB | Record the offset in your notes the moment you trim the sequence |
| Binding-site selection | The numbering inside the input structure file | Selects a residue 24 positions away, silently | Verify one known residue’s identity before selecting the rest |
| Docking grid box | Cartesian coordinates from your selected residues | Box centred off-pocket, poses still score and rank | Derive the box centre from a verified selection or a bound ligand |
| GROMACS index groups | Residue numbers in the processed .gro file | Groups renumber after pdb2gmx, breaking earlier scripts | Rebuild index groups after pdb2gmx, never reuse pre-processing numbers |
| Manuscript methods section | Whatever numbering you wrote down | Mutation positions do not match the cited literature | State the accession, isoform and numbering convention explicitly |
The last row is worth dwelling on. EGFR literature quotes T790M and L858R in UniProt precursor numbering, while 1M17 uses mature numbering. Both conventions are in active use for the same protein. A methods section that says “residue 790” without naming the convention is genuinely ambiguous, and a careful reviewer will ask. Write Thr790 (UniProt P00533 numbering) and the ambiguity disappears.
Once your sequence and numbering are settled, the next steps are structure selection and system setup. Our guides on how to prepare a protein and ligand for docking and how to find a protein binding site for docking pick up exactly where this one ends, and both sit inside the wider computational biology skills roadmap.
Troubleshooting: real errors and what they mean
Your PyMOL selection returns zero atoms. The residue number is outside the range present in the file. Run grep DBREF yourfile.pdb and compare its author range against the number you used. Disordered residues also simply do not appear: in 1M17 the DBREF range runs to author 998, but the last observed alpha carbon is Pro995, so residues 996 to 998 exist in the construct and not in the coordinates.
Your selection returns the wrong amino acid type. This is the offset, and it is the most common form of the bug because it produces atoms rather than an error. Cross-check with the SIFTS mapping call above.
Your BLAST hit and your UniProt entry disagree on length. You are comparing a precursor against a mature chain, or a canonical sequence against an isoform. Check the accession for a dash suffix first, then check whether one sequence starts 20 to 30 residues into the other.
AlphaFold DB has no model for your accession. Isoform accessions such as P00533-2 are generally not in the database, which covers canonical sequences. Model the isoform yourself with ColabFold, and record that you did.
Your structure has residues that match nothing in UniProt. Look for SEQADV records: grep SEQADV yourfile.pdb. Expression tags, cloning artifacts and engineered mutations are all flagged there. In 1M17 those are the five residues 666 to 670.
Want the guided, hands-on version?
Our live Molecular Modeling & MD Simulations cohort bootcamp takes you from zero to running real docking and MD workflows, with a portfolio project for your grad-school applications.
Frequently asked questions
Should I model the precursor or the mature protein?
Model the mature protein, the Chain feature range, unless your research question is specifically about targeting or processing. The signal peptide is not present in the folded protein you are studying, so including it adds simulation cost and a low-confidence artifact without adding information.
How do I know which isoform a paper used?
Look for a bare accession with no dash suffix, which means canonical. If the paper gives only a sequence length, compare it against the isoform lengths in the UniProt entry, since they usually differ enough to identify unambiguously. If the paper gives neither, the residue numbers of any mutation it reports are your best clue.
Does AlphaFold DB use the canonical sequence?
Yes. AlphaFold DB models are built on UniProt canonical sequences and cover the full precursor. The model for P00533 spans residues 1 to 1210, signal peptide included. To model a non-canonical isoform you need to run the prediction yourself.
Is the PDB numbering offset always the signal peptide length?
No. In 1M17 it happens to be 24 because the construct starts at the mature N-terminus, but many depositions number by the UniProt precursor with no offset at all, and others start at 1 regardless of where the construct begins. Check the DBREF record or the SIFTS mapping for every structure.
What if my protein has no reviewed Swiss-Prot entry?
Use the TrEMBL entry, but treat its feature annotations as predictions rather than facts. Cross-check the signal peptide with SignalP and the domain boundaries against a reviewed ortholog from a well-annotated species, then state in your methods that the annotation was inferred.
Which residue numbering should I report in my manuscript?
UniProt precursor numbering, with the accession stated. It is stable across releases, independent of any structure, and it is what the literature and variant databases use. If you also report structure-based numbers, say which is which.
Sequence and feature data in this guide were read from UniProtKB release 2026_02 (10 June 2026) and from the deposited coordinates of PDB 1M17. Every command shown returns the described output at the time of writing.
