Sars-cov-2 Spike Gene Sequence Nucleotide Coordinates

11 min read

You've stared at a genome browser until your eyes crossed. Also, you've pasted coordinates into a notebook, then into a script, then into a Slack message — only to realize you're off by one. Again.

Welcome to the club.

The SARS-CoV-2 spike gene isn't just "somewhere in the genome.Day to day, " It has precise nucleotide coordinates. And if you work with sequencing data, primer design, variant calling, or vaccine constructs, those numbers aren't trivia. They're the difference between a working assay and a wasted week.

Here's the thing most references won't tell you upfront: the coordinates depend entirely on which reference you're using. And which coordinate system. And whether you're counting from the genomic RNA or the coding sequence Still holds up..

Let's sort it out once and for all.

What Is the Spike Gene in SARS-CoV-2

The spike gene — S — encodes the surface glycoprotein that gives coronaviruses their crown. Here's the thing — it's the business end of viral entry. It binds ACE2. It gets cleaved by furin and TMPRSS2. It's the target of nearly every neutralizing antibody, every mRNA vaccine, every diagnostic assay worth its salt The details matter here..

In the Wuhan-Hu-1 reference genome (NC_045512.Think about it: 2), the spike gene spans 21,563 to 25,384 on the positive strand. Practically speaking, that's 3,822 nucleotides. Which means 1,273 amino acids. One very large protein And it works..

But those numbers? But they're 1-based, inclusive, on the genomic RNA. Change the reference assembly, and they shift. Switch to 0-based half-open coordinates (like BED format), and they shift again. Use a different isolate — say, an early Wuhan seafood market sample — and you might see a few SNPs inside the gene, but the coordinates hold if the annotation transfer was done right.

Most of the time, it wasn't.

The reference genome matters more than you think

NCBI's NC_045512.So nextstrain uses it. Practically speaking, 2 is the de facto standard. But Ensembl, UCSC, and some older preprints used MN908947.3 — the original GenBank submission from January 2020. They're nearly identical. GISAID uses it. Nearly.

MN908947.3 has a few extra nucleotides at the 5' UTR. And the spike gene coordinates there? 21,562–25,383. On top of that, one base off at each end. That's enough to break a primer if you're not paying attention Still holds up..

And then there's the RefSeq gene annotation (NCBI Gene ID: 43740568). Now, same coordinates on NC_045512. 25384)— no introns, because coronaviruses don't splice their structural genes. And 2. But if you pull the CDS feature from the GenBank file, you'll seejoin(21563..The join is a formality.

Why These Coordinates Matter

You're not memorizing numbers for fun. You need them because:

  • Primer design: Amplicon sequencing schemes (ARTIC, Midnight, SNAP) tile primers across the genome. Spike primers must land in the right coordinates. One base off at the 3' end? Failed amplification.
  • Variant calling: When you see "S:D614G" in a lineage report, that's amino acid 614. But the nucleotide change is at position 23,403 (A→G on NC_045512.2). If your VCF uses different coordinates, your annotation pipeline will miss it — or worse, misannotate it.
  • Vaccine constructs: The Pfizer/BioNTech and Moderna vaccines use codon-optimized spike sequences. But the original Wuhan-Hu-1 coordinates are the anchor. Every variant update — Beta, Delta, Omicron BA.1, XBB.1.5 — is defined by mutations relative to that reference.
  • Diagnostic assays: RT-PCR targets (N gene, E gene, RdRp, S gene) all have defined coordinate ranges. S gene target failure (SGTF) — the hallmark of Alpha and Omicron BA.1 — happens because a 6-nucleotide deletion (Δ69–70) at genomic positions 21,765–21,770 knocks out a probe binding site. Know the coordinates, and you understand the mechanism.

Real talk: I've seen bioinformaticians spend days debugging a pipeline because they mixed up 1-based VCF coordinates with 0-based BED coordinates for the same gene. The spike gene is long enough that off-by-one errors don't just shift a codon — they shift the reading frame in your head Worth keeping that in mind..

How the Spike Gene Is Structured

It helps to see the gene not as a flat interval but as a series of functional domains. Each has its own coordinate range. Each matters for different reasons.

Signal peptide (1–13 aa / nt 21,563–21,601)

The N-terminus directs the nascent protein to the ER. In practice, if you're expressing spike in vitro, you need this — or you need to replace it with a heterologous signal peptide (like IgG kappa or tPA). Consider this: cleaved off in the mature spike. The coordinates are small but critical Took long enough..

N-terminal domain (NTD) — ~14–305 aa / nt 21,602–22,478

The NTD is a galactose-binding lectin domain. It's also a major target for neutralizing antibodies — and a hotspot for deletions in variants of concern. The "NTD supersite" (residues 14–20, 141–158, 246–260) maps to specific nucleotide ranges. Delta's Δ156–157? That's nt 22,031–22,038. Gone.

Counterintuitive, but true.

Receptor-binding domain (RBD) — ~319–541 aa / nt 22,519–23,186

We're talking about the ACE2 interface. Because of that, the most studied 223 amino acids in virology. Plus, every variant of concern has RBD mutations. N501Y (nt 23,063 A→T), E484K (nt 23,012 G→A), K417N/T (nt 22,813 A→T/C), L452R (nt 22,917 T→G). On the flip side, you will look these up. Bookmark the coordinates Easy to understand, harder to ignore..

Furin cleavage site (FCS) — 681–685 aa / nt 23,605–23,617

PRRARRRAR in some variants. The insertion of a furin site (relative to SARS-CoV-1) is one of the defining features of SARS-CoV-2. The coordinates span the S1/S2 boundary. If you're designing a spike construct without the FCS (for stability), you delete or mutate this exact stretch.

S2 subunit — ~686–1

S2 subunit — ~686–1273 aa / nt 23,618–25,388

The machinery of membrane fusion. Conserved across coronaviruses, but the details matter.

  • Fusion peptide (FP) — ~686–709 aa / nt 23,618–23,689
    Hydrophobic loop that inserts into the host membrane. The FP is buried in the prefusion trimer; S1 shedding and S2 refolding expose it. Mutations here are rare but lethal to infectivity. If you’re designing a universal vaccine target, this is the holy grail — structurally constrained, poorly accessible to antibodies, but the conserved mechanism The details matter here..

  • Heptad repeat 1 (HR1) — ~760–850 aa / nt 23,840–24,112
    Forms the central trimeric coiled-coil in the postfusion six-helix bundle. HR1 inhibitors (like EK1C4 peptide) bind here and block refolding. Coordinates are precise because helical register matters — a single insertion shifts the hydrophobic seam Nothing fancy..

  • Connector domain (CD) / Central helix (CH) — ~850–950 aa / nt 24,112–24,412
    The long helix linking HR1 to HR2. Rigid spacer. Few known mutations, but deletions here (e.g., Δ850–855 in some cell-culture-adapted strains) alter fusion kinetics.

  • Heptad repeat 2 (HR2) — ~1150–1210 aa / nt 25,010–25,192
    Packs antiparallel into the grooves of the HR1 trimer. The target of enfuvirtide-like fusion inhibitors. HR2 peptides are potent pan-coronavirus entry blockers — if you can deliver them.

  • Transmembrane domain (TM) — ~1213–1237 aa / nt 25,199–25,273
    Single-pass anchor. Not just a lipid tail — the TM domain oligomerizes and influences spike clustering on the virion surface. Swapping it for a heterologous TM (e.g., VSV-G) changes particle incorporation efficiency in pseudotyping assays.

  • Cytoplasmic tail (CT) — ~1238–1273 aa / nt 25,274–25,388
    Contains an ER retrieval signal (KxHxx, ~1255–1259) and trafficking motifs. Truncating the last 19–28 amino acids (ΔCT) is a standard trick to boost surface expression and pseudovirus titers 10–100×. But it also alters spike conformation and antibody sensitivity. Know the trade-off.


The Coordinate Systems Trap

You have the domains. Now you need to use them. This is where pipelines break.

1-based vs. 0-based: The Eternal War

Format Start End Example (RBD start)
VCF / GFF / SAM 1-based, inclusive 1-based, inclusive 22,519
BED / BEDPE / Python (pysam, pybedtools) 0-based, inclusive 0-based, exclusive 22,518 – 23,186
GenBank / NCBI Gene 1-based, inclusive 1-based, inclusive 22,519..23,186

The bug: You extract the RBD from a VCF (start=22,519). You feed it to bedtools getfasta using a BED file where you copied the VCF start. bedtools treats 22,519 as 0-based → it fetches genomic position 22,520 (1-based). Your translation starts at codon 320 (aa 320 = nt 22,522), not 319. Frame shift. Silent corruption.

The fix: Never manually convert. Use pysam or bcbio-gff to parse annotations natively. If you must write BED: start_bed = start_vcf - 1; end_bed = end_vcf. Test with a known variant: N501Y is at genomic 23,063 (VCF

The fix (continued): Never manually convert. Use pysam or bcbio-gff to parse annotations natively. If you must write BED: start_bed = start_vcf - 1; end_bed = end_vcf. Test with a known variant: N501Y is at genomic 23,063 (VCF 1-based) → BED start 23,062, end 23,063. Verify by translating the extracted sequence — does it yield asparagine (AAC/AAT) at the expected position? If not, your coordinates are off by one.

Strand Awareness: The Silent Killer

Coronaviral genome is positive-sense, but annotation files don't always make this explicit. Worth adding: when extracting ORF1a/1b overlapping regions or designing primers for subgenomic RNA, strand matters. Now, a bedtools getfasta -s flag may be required. For spike, the coding strand is the same as the genomic RNA — no reverse complement needed. Worth adding: for antisense ORFs (e. That said, g. , ORF9b, ORF7a), failure to account for strand leads to nonsense sequences Took long enough..

Relative vs. Absolute Numbering

Literature cites residue numbers like "K619" or "D614". These are relative to the mature spike protein, which begins after signal peptide cleavage (~aa 15–19). Genomic coordinates tell you nothing about this offset And that's really what it comes down to..

K619 → codon 619 → nt 1852–1854 (relative to spike start)  
Spike start (post-signal peptide) ≈ nt 21,563 (1-based)  
→ Genomic nt: 21,563 + 1852 – 1 = 23,414

Mismatch here causes failed mutagenesis, mislabeled constructs, and wasted weeks.


Practical Pipeline: From Reference to Residues

Here’s how to stop guessing and start computing correctly:

Step 1: Define the Reference Anchor

Use NC_045512.2 (original Wuhan-Hu-1) or NC_045512.3 (corrected frame). Do not mix. Specify explicitly in every tool call.

Step 2: Extract Spike CDS Programmatically

# Using EMBOSS getorf or Biopython
getorf -sequence NC_045512.2.fasta -outseq spike_cds.fasta -minsize 3600
# Or with Biopython:
from Bio import SeqIO
record = SeqIO.read("NC_045512.2.gb", "genbank")
cds = [f for f in record.features if f.type == 'CDS' and f.qualifiers['product'][0] == 'spike glycoprotein'][0]
spike_seq = cds.extract(record.seq)

This ensures you get the exact nucleotide sequence corresponding to the annotated CDS — no manual slicing.

Step 3: Translate and Validate

protein = spike_seq.translate(to_stop=True)
assert len(protein) == 1273  # Expected full-length spike

Any discrepancy flags a coordinate error upstream It's one of those things that adds up..

Step 4: Map Domain Boundaries

Convert amino acid ranges to nucleotide ranges programmatically:

def aa_to_nt(start_aa, end_aa):
    return (start_aa - 1) * 3 + 1, end_aa * 3  # 1-based inclusive

hr1_start, hr1_end = aa_to_nt(1213, 1257)
print(f"HR1 nt range: {hr1_start}-{hr1_end}")

This eliminates transcription errors when cloning domains Worth keeping that in mind..

Step 5: Annotate Mutations

Given a VCF with mutations, map each to spike residue:

def vcf_to_aa(pos, ref, alt, spike_start_nt=21563):
    rel_pos = pos - spike_start_nt + 1
    codon_index = (rel_pos - 1) // 3
    codon_pos = (rel_pos - 1) % 3
    
    # Reconstruct wild-type codon
    wt_codon = spike_seq[codon_index*3 : codon_index*3 + 3]
    mut_codon = wt_codon[:codon_pos] + alt + wt_codon[codon_pos+1:]
    
    wt_aa = wt_codon.translate()
    mut_aa = mut_codon.translate()
    
    return f"{wt_aa}{codon_index+1}{mut_aa}"

# Example: N501Y
print(vcf_to_aa(23063, 'A', 'T'))  # Output: N501Y

This approach scales across thousands of variants without manual lookup tables.


Tools That Won’t Betray You

  • Nextstrain Augur: Handles coordinate conversion internally; ideal for phylogenetic workflows.
  • Pybedtools: Wraps BEDTools in Python; supports automatic format detection.
  • Clover/Biopython: For extracting features directly from GenBank files.
  • Ensembl VEP / SnpEff: Annotate variants with protein-level consequences automatically.

Avoid spreadsheets for anything beyond quick notes. Every copy-paste introduces potential

Before you trust a single variant annotation, verify the entire pipeline against a known reference. Run a BLAST against the NCBI RefSeq database to confirm that your extracted spike sequence matches the authoritative SARS-CoV-2 reference. If your coordinates are off by even a few nucleotides, downstream annotations will cascade into incorrect protein predictions.

Honestly, this part trips people up more than it should The details matter here..

Visualize the mutations with a residue-level heatmap or a phylogenetic tree. Because of that, tools like ggplot2 or matplotlib can render a heatmap of amino acid conservation across the spike protein, making it immediately clear which residues are conserved versus which are mutated. Pair this with a phylogenetic tree generated by Nextstrain Augur to see how your variant clusters relative to known variants Practical, not theoretical..

Easier said than done, but still worth knowing The details matter here..

Finally, document every step in a reproducible workflow. Store your scripts in version control, log your reference sequence versions, and archive your output files. When you present results to a colleague or reviewer, the reproducibility of your pipeline is as important as the data itself Worth keeping that in mind..

In a nutshell, this pipeline transforms raw genomic data into a structured, validated analysis of the SARS-CoV-2 spike protein. Here's the thing — by defining a fixed reference anchor, extracting the CDS programmatically, translating and validating the protein, mapping domain boundaries, and annotating mutations with a dedicated script, you eliminate the guesswork that has plagued early studies. The tools and methods described here are not just for SARS-CoV-2 — they form a generalizable framework for any viral protein analysis, and they will serve you well as the field evolves.

Fresh Stories

Fresh Reads

On a Similar Note

Expand Your View

Thank you for reading about Sars-cov-2 Spike Gene Sequence Nucleotide Coordinates. We hope the information has been useful. Feel free to contact us if you have any questions. See you next time — don't forget to bookmark!
⌂ Back to Home