The central dogma
How a gene becomes a protein. You will copy DNA into RNA, read RNA three letters at a time, see why syn3A reads one of the stop signals as an amino acid, estimate how many copies of each molecule a cell keeps, and write Python that rebuilds all 455 of syn3A's proteins from its genome.
Watch first: what you'll learn2 minutes · narrated · captions
Read the transcript
Welcome to lesson three: the central dogma. This is the story of how a gene becomes a protein.
Information in a cell flows one way: from DNA, to RNA, to protein. The DNA is the master copy. The cell copies one gene at a time into RNA, then reads the RNA to build a protein.
syn3A's DNA holds four hundred and ninety-three genes, packed tightly on both of its strands. You'll learn to find any of them by its position, and cut it out in Python.
First, transcription. An enzyme called RNA polymerase finds the start of a gene, opens up the DNA, and copies one strand into RNA, about twenty-five letters a second.
Then, the genetic code. A ribosome reads the mRNA three letters at a time. Each group of three, called a codon, stands for one amino acid, or for stop.
And there's a twist. syn3A reads one of the stop signals, UGA, as an amino acid instead. You'll see why that matters.
Then, translation. tRNAs carry amino acids to the ribosome, which links them into a chain, and the chain folds into a working protein.
You'll work out how many copies of each molecule a cell keeps, using half-lives, and see what a mutation does to a protein.
You'll get to be the polymerase and the ribosome yourself, in the games.
And you'll write Python that rebuilds every one of syn3A's four hundred and fifty-five proteins from its genome, and checks them against the published ones. Let's start.
By the end of this lesson you will be able to:
- Explain how information flows from DNA to RNA to protein, and name the machines that do each step
- Read a gene's position in GenBank and turn it into a Python slice, on either strand
- Describe how RNA polymerase finds a gene, which strand it reads, and where it stops
- Read the genetic code, explain why codons have three letters, and work with reading frames
- Explain why syn3A reads UGA as tryptophan, and what that means for its genes
- Use half-lives and steady states to estimate how many mRNAs and proteins a cell keeps
- Sort mutations into silent, missense, nonsense, and frameshift
- Write Python that turns every one of syn3A's genes into its protein, and check all 455 against GenBank
On this page
- From gene to protein
- Genes: where the instructions are
- Transcription: DNA to RNA
- The genetic code
- Translation: RNA to protein
- How many, and how fast
- Mutations: when the code changes
- From genome to proteome in code
- Code milestone: the gene-to-protein pipeline
- Numbers to remember
- Sources and further reading
- Practice problems
From gene to protein
Lesson 2 opened the box and named the molecules in a cell. This lesson follows the information inside them. A gene is a stretch of DNA, and the cell turns it into a protein in two steps: it copies the gene into RNA, and then it reads the RNA to build the protein. By the end you will have written Python that does the same for every one of syn3A’s genes, and the 455 proteins it makes will match the published ones letter for letter.
The picture below shows the whole process. Tap a step to look closer, or switch to Code view to see the same pipeline in software terms.
Genes: where the instructions are
A gene is a stretch of DNA that the cell copies into RNA. Most genes are recipes for proteins: their RNA is a message that ribosomes read. A few genes make RNAs that do a job themselves, such as the RNAs inside the ribosome and the transfer RNAs that bring amino acids to it.
syn3A has 493 genes. Its GenBank record lists 455 protein-coding genes and 38 RNA genes: 6 ribosomal RNA genes (two copies each of three kinds), 29 transfer RNA genes, and three others. You will sometimes see 452 protein-coding genes quoted instead; papers that use a slightly different annotation count them that way.
A protein-coding gene has more parts than the protein recipe itself. RNA polymerase, the enzyme that copies DNA into RNA, lands on a promoter just before the gene and starts copying at position +1. The copy runs to a terminator, where the polymerase lets go. Inside the copy, the protein recipe runs from a start codon, ATG, to a stop codon. The stretches before the start and after the stop are copied but not read into protein. Just before the start codon sits a short Shine–Dalgarno sequence, where the ribosome grabs on.
Parts of a gene
Genes on both strands
Where two genes meet
DNA has two strands, and genes sit on both. GenBank writes every position along one strand, the one in the file. A gene on that strand runs left to right, from small numbers to big ones, and GenBank writes it as 7435..9939. A gene on the other strand runs the opposite way, and GenBank writes it as complement(9991..10968): the numbers are still on the file’s strand, smaller first, but the gene is read on the partner strand, from 10,968 down to 9,991.
Here are all 493 of syn3A’s genes, from its real GenBank record. Tap a gene to see its card, or step through them with Previous and Next.
Some things to notice:
- The genes are packed tight. 88% of the genome codes for protein. The middle-sized gap between two neighboring genes is only 36 base pairs, and 63 pairs of neighbors overlap.
- Both strands carry genes: 201 protein genes on the file’s strand and 254 on the other.
- Proteins come in all sizes. The shortest is 37 amino acids, ribosomal protein L36 (gene rpmJ). The middle length is 283 and the longest is 1,795.
- Even this minimal cell has mysteries. The 2018 GenBank record calls 130 proteins “uncharacterized”. Later work worked out jobs for many of them, but about 90 are still unclear.
Math toolkit: positions and strands
GenBank counts bases from 1, and a range includes both ends. So dnaA, at 1..1353, is
That is codons. The last codon is the stop, which adds no amino acid, so the protein has 450 amino acids.
Python counts from 0, and a slice stops just before its end index. GenBank’s base 1 is Python’s genome[0], so GenBank’s start..end is
genome[start - 1:end]
The start moves down by one, and the end stays where it is, because the slice leaves out its end index. For dnaA that is genome[0:1353]: 1,353 letters.
For a gene on the other strand, cut out the same slice and then take its reverse complement, from Lesson 2. The gene at complement(9991..10968) is reverse_complement(genome[9990:10968]): 978 letters that start with the start codon ATG.
Check yourselfsyn3A's ftsZ gene runs from base 331,411 to base 332,568, on the other strand. How long is it, and how many amino acids does its protein have?
Length: bases. That is codons, and without the stop codon, 385 amino acids.
Check yourselfWhich Python slice holds ftsZ, and what do you do with it next?
genome[331410:332568]. The gene is on the other strand, so take the reverse complement of that slice before reading it.
Check yourselfLetter 10 of a gene is in which codon, and where in it?
Codon , as its first letter. Codon 1 holds letters 1–3, codon 2 letters 4–6, codon 3 letters 7–9, and codon 4 starts at letter 10.
Transcription: DNA to RNA
Transcription copies a gene into RNA. The enzyme that does it is RNA polymerase. First it has to find where a gene starts. A helper protein called the sigma factor rides on the polymerase and feels along the DNA for two short signposts: in E. coli, the letters TTGACA (the −35 box) and TATAAT (the −10 box), about 17 base pairs apart. The numbers say how far each box sits before position +1, where copying starts, about 7 bases after the −10 box. Real promoters rarely match all twelve letters, and the closer the match, the more often the gene is copied.
Once it has bound, the polymerase pulls the two DNA strands apart. It reads one of them, the template strand, and builds the RNA by pairing with it: A with U, T with A, G with C, C with G. The two strands run in opposite directions, so the polymerase reads the template from its 3′ end toward its 5′ end, and the RNA grows from its 5′ end to its 3′ end.
The other DNA strand is the coding strand. The RNA has the same letters as the coding strand, with U in place of T. That is why gene sequences are always written as the coding strand: the RNA, and the protein, can be read straight off it.
The figure shows the three stages. The polymerase lands on the promoter; it opens a bubble about 13 base pairs long and copies the template, with the newest 8 or so RNA letters still paired to the DNA; and at the end of the gene it lets go.
1 · Sigma finds the promoter
2 · The bubble: copying
3 · The terminator: letting go
How does the polymerase know where to stop? Many bacterial genes end with a terminator: a stretch rich in G and C that, once copied, folds back on itself into a tight hairpin, followed by a run of T’s. The hairpin pulls on the polymerase, and behind it the RNA is held only by weak A–U pairs, so the RNA comes loose. syn3A’s gyrA gene ends with one: the third panel of the figure shows its real letters.
In the whole-cell model of syn3A, each polymerase adds about 25 letters per second, a value measured in E. coli. So a 1,000-letter gene takes
syn3A has about 187 RNA polymerases, and about 29 of them are copying a gene at any moment. The genes for ribosomal RNA are copied fastest, about 90 letters per second, with two polymerases on each.
Now be the polymerase. In Polymerase Pilot, slide along the DNA until both of sigma’s windows match, bind, choose your template strand, and spot the terminator before you reach it. The sequences are made up, built around the textbook boxes.
3D game · Polymerase Pilot
Be the RNA polymerase
Sigma reads the top strand, 5′→3′, left to right →
The sequences in this game are made up, built around the textbook E. coli promoter boxes (−35 TTGACA, −10 TATAAT) and a typical terminator. Drawn roughly to scale: the DNA is 2 nm wide with 0.34 nm per base pair, and a real RNA polymerase is about 15 nm long.
Your first Python of the lesson does the polymerase’s job: given a template strand, written 5′ to 3′ as sequences always are, return the mRNA, also 5′ to 3′. The last check uses a real syn3A gene on the other strand, where GenBank’s strand is the template.
The genetic code
A ribosome reads an mRNA three letters at a time. Each group of three is a codon, and each codon stands for one amino acid or for “stop”. The table that links them is the genetic code. Four letters in three positions make codons, for only 20 amino acids and stop, so most amino acids have several codons. AUG is special: it means methionine, and it is also the usual start codon, where a ribosome begins.
The code is often drawn as a wheel. Read it from the center out: the first letter of the codon, then the second, then the third, and on the rim the amino acid. Tap any codon or amino acid, or build a codon with the buttons.
A different code in syn3A
Almost all living things use the same code, the standard code. syn3A doesn’t. Like the mycoplasma bacteria it was built from, it uses genetic code 4, where one codon changes meaning: UGA means tryptophan, not stop. syn3A has only two stop codons, UAA and UAG. Switch the wheel to syn3A’s code to watch UGA flip.
The change is real and the genome is full of it. Inside syn3A’s genes, TGA (UGA in the mRNA) appears 1,383 times, against only 36 for TGG, tryptophan’s other codon. 343 of its 455 genes contain a TGA. syn3A has a transfer RNA whose anticodon pairs with UGA, and it lacks the release factor that reads UGA as stop in E. coli. Read with the standard code, 343 of its proteins would be cut short.
Turn on syn3A’s usage on the wheel to see which codons the cell really uses. Its DNA is rich in A and T, and its codons show it: AAA, for lysine, appears 15,126 times, and CGG only 10. Only 7.75% of third letters are G or C.
Math toolkit: codons and reading frames
Why three letters? A code needs at least 21 different words: 20 amino acids and stop. With 4 letters,
- 1-letter words give : not enough.
- 2-letter words give : still not enough.
- 3-letter words give : enough, with 43 to spare.
So three is the shortest length that works, and the spare words are why most amino acids have several codons: 61 codons for 20 amino acids in the standard code, about 3 each.
A ribosome has to start reading in the right place. Shift the start by one letter and every codon changes. Take ATGAAACCC:
- Starting at letter 1: ATG AAA CCC, which reads M K P.
- Starting at letter 2: TGA AAC, then two letters left over.
- Starting at letter 3: GAA ACC, then one letter left over.
These are the three reading frames of a strand. In Python they start at index 0, 1, or 2. The other strand has three more, so every stretch of DNA has six reading frames. A gene uses one of them, from its start codon on.
Two exercises turn this into code. First, cut a sequence into codons in any frame.
Then translate: look each codon up in the genetic code, which the engine gives you as two Python dicts in virtualcell.genetic_code, STANDARD_CODE and SYN3A_CODE. Their keys are RNA codons such as "AUG", and "*" means stop. Stop at the first stop codon. One check translates a real syn3A gene, rpmH, whose protein is part of the ribosome.
Math toolkit: chance and stop codons
How do you find a gene in a long string of DNA? Look for a long stretch with no stop codon. In random DNA with all four letters equally common, each codon is a stop with chance
So stops turn up about every codons. With syn3A’s code, only 2 of the 64 codons are stops: , about one every 32 codons.
syn3A’s letters aren’t equally common: A is 37.5% of its genome, T 38.2%, G 11.9%, and C 12.4%. The chance of a codon is the product of the chances of its letters, so
Together, : in random DNA with syn3A’s letters, a stop turns up about every 14 codons. A and T are common, and so are TAA and TAG.
Now the chance that random codons in a row contain no stop. Each one misses with chance , and the chances multiply:
For big , use logs as in Lesson 1: . For a middle-sized syn3A gene of 283 codons, with :
So the chance is about , one in a billion. A long open stretch almost never happens by chance, which is why it marks a gene. A stretch from a start codon to the next stop in the same frame is called an open reading frame, or ORF.
Find the gene puts this to work on real syn3A DNA. Each lane under the letters shows one reading frame, with stop codons as red bars. Find the long stretch with no stops that starts with ATG. Later levels shuffle a real gene, flip to the other strand, and switch to syn3A’s code.
Game · Find the gene
Which frame reads through?
Translation: RNA to protein
Translation turns an mRNA into a protein. It happens on the ribosome, a machine made of three RNAs and about fifty proteins, in two parts: a small subunit that holds the mRNA and a large subunit that joins the amino acids. syn3A has about 500 ribosomes.
The ribosome can’t read amino acids. Transfer RNAs (tRNAs) are the adapters. Each tRNA carries one kind of amino acid at one end, and at the other end has three letters, its anticodon, that pair with a codon. The ribosome only checks that pairing; the amino acid just rides along. syn3A manages with 29 kinds of tRNA for its 62 codons that mean amino acids, because some tRNAs pair loosely at the third letter.
The ribosome has three places for tRNAs side by side along the mRNA: the A site, where a new tRNA arrives, the P site, which holds the tRNA carrying the growing chain, and the E site, where the empty tRNA exits.
Reading the mRNA
The start
Many ribosomes at once
To start, the small subunit’s own RNA pairs with the Shine–Dalgarno sequence, AGGAGG or something like it, which puts the start codon a few letters later right in the P site. The first tRNA brings methionine. Whatever the start codon is (in syn3A, 437 genes start with ATG, 12 with GTG, and a few with TTG, ATA, or ATT), the first amino acid is always methionine, M. Then the large subunit joins.
Then the same cycle repeats for every codon:
- A tRNA whose anticodon pairs with the codon in the A site arrives.
- The chain on the P-site tRNA is joined onto the new amino acid by a peptide bond.
- The ribosome moves 3 letters along. The tRNAs shift from A to P and from P to E, and the empty one leaves.
The chain threads out through a tunnel in the large subunit and starts to fold. When a stop codon reaches the A site, no tRNA fits. A release factor binds instead and cuts the protein free. syn3A has one, which reads UAA and UAG.
As soon as one ribosome moves away from the start, another can board, so one mRNA carries several ribosomes at once, about one every 300 letters. Bacteria have no nucleus, so ribosomes start reading an mRNA while the polymerase is still making it.
In Ribosome Rush, you are the ribosome. The codon waiting in the A site is shown in big letters. Tap the tRNA whose anticodon pairs with it, letter by letter, and pick the release factor at a stop codon. Level 4 tests what you know about syn3A’s code, and level 5 builds a real syn3A protein from start to stop.
3D game · Ribosome Rush
You are the ribosome
AUUIleAUCIleAUAIleAUGMetThis mRNA is made up. The game uses exact pairs; real tRNAs can also pair loosely (wobble) at the third letter, so syn3A gets by with 29 kinds of tRNA. Sizes are not to scale: a real ribosome is about 20 nm across, and the folded protein is a sketch.
How many, and how fast
Here are the main numbers for gene expression in syn3A. Most come from the whole-cell model built by Zaida Luthey-Schulten’s group, and some of them were measured in E. coli.
| In one syn3A cell | Value |
|---|---|
| Genes | 493: 455 for proteins, 38 for RNAs |
| RNA polymerases | about 187, with about 29 copying at any moment |
| Transcription speed | about 25 letters per second |
| mRNAs | a few hundred at a time: about one per gene |
| mRNA half-life | about 4 minutes |
| Ribosomes | about 500 |
| Translation speed | about 5 amino acids per second (10–20 in E. coli) |
| Ribosomes on one mRNA | about one every 300 letters |
| Protein half-life | about 25 hours |
| Cell cycle | about 105 minutes |
A middle-sized syn3A protein has 283 amino acids. Its gene, with the stop codon, is letters long. Copying it takes seconds, and one ribosome reads it in seconds.
Math toolkit: half-lives and steady state
An mRNA doesn’t last. Enzymes chop it up at random: every mRNA has the same small chance of being chopped in each second, however old it is. Then the number left falls by half every half-life, . For syn3A’s mRNAs that is about 4 minutes. Start with 8 copies and stop making more:
- after 4 minutes, about 4 are left;
- after 8 minutes, about 2;
- after 12 minutes, about 1.
In general, after a time the fraction left is
How long does one mRNA last, on average? Longer than one half-life, because a few copies survive for many half-lives and pull the average up. The average lifetime is
where is the natural logarithm of 2, math.log(2) in Python. It comes from the same you met in Lesson 2: the fraction left is also . For a 4-minute half-life, minutes.
Now keep making new copies, at a steady rate per minute. At first the count climbs. But the more copies there are, the more get chopped each minute: about one in every minutes’ worth. The count stops changing when the copies made each minute equal the copies chopped:
This is a steady state: the copies keep changing, but their number doesn’t. It settles at the production rate times the average lifetime, wherever it started.
Now put the numbers together for one gene:
- A ribosome reads 5 amino acids, or 15 letters, per second, so it clears 300 letters in 20 seconds, and a new ribosome can board every 20 seconds. Each mRNA makes about 3 proteins a minute.
- Each mRNA lasts about 5.8 minutes, so it makes about proteins in its life.
- A ribosomal protein needs about 500 new copies every cell cycle, one for each new ribosome. That takes about mRNAs in 105 minutes: about 0.3 new mRNAs a minute.
- At steady state the cell then holds copies of that mRNA at a time.
So even a busy gene keeps only one or two copies of its mRNA. With so few molecules, chance matters: some cells will have more and some fewer, which is what Lesson 7 is about.
Expression Factory simulates one gene in one syn3A cell, from birth to division, with real randomness. The pink strands are mRNAs, the purple balls riding them are ribosomes, and every gold dot is a finished protein. Use the sliders to set how often the gene is copied, how long each mRNA lasts, and how many proteins each one makes, then try the five challenges.
Simulation · Expression Factory
One gene, one cell, one cell cycle
Challenge: syn3A holds about one mRNA per gene at any moment. Set the transcription rate so this gene averages about 1 mRNA, keep it there for the last 30 minutes, and let the cell reach division.
- Gene
- RNA polymerase
- mRNA
- Ribosome
- Protein
- Average of many cells ± spread
These settings average 1.00 × 5.8 = 5.8 mRNAs. Goal: about 1.
The numbers for a typical syn3A protein of 349 amino acids (1,050 letters of mRNA)
- Mean lifetime of one mRNA
- half-life ÷ ln 2 = 4 ÷ 0.693 = 5.8 min
- mRNAs at a time (steady state)
- rate × lifetime = 1.00 × 5.8 = 5.8
- Proteins from each mRNA
- 3.0 a minute × 5.8 min = 17.3
- Proteins by division
- 1.00 × 105 = 105 mRNAs × 17.3 ≈ 1,818; the model expects 1,660 ± 234
Why less than the quick estimate? It counts every protein those mRNAs will ever make, but the last ones are still being read at division, and each protein takes 70 s to finish. The ± is the spread from chance alone (one standard deviation): about two cells in three land within it.
Numbers from syn3A’s model (Thornburg et al. 2019). Ribosomes and proteins are drawn roughly to scale; the mRNAs are drawn short (stretched out, 1,050 letters would be about 600 nm, longer than the 400 nm cell). A simplified model: real cells also change these rates as they grow.
Then put the steady-state formula into code.
What a protein costs
Making a protein is expensive. Loading each amino acid onto its tRNA uses about 2 ATP, and the ribosome uses about 2 more for each step, so each amino acid costs about 4 ATP. A middle-sized protein of 283 amino acids costs about ATP. Recall from Lesson 2 that each ATP is worth about 20 kT.
For the whole cell: 500 ribosomes at 5 amino acids per second, for 105 minutes, join about
That is about 45,000 new proteins of average size every cell cycle, for about 60 million ATP. The syn3A model’s own estimate is similar: about 77 million ATP for all the work of copying and reading genes in one cycle, 59 million of it for translation.
Mutations: when the code changes
A mutation is a change in the DNA. The simplest kind swaps one letter for another, and what it does to the protein depends on where it lands:
- Silent: the new codon means the same amino acid, so the protein doesn’t change. This happens most often at the third letter. GCA, GCC, GCG, and GCT all mean alanine.
- Missense: one amino acid changes. Some swaps barely matter; others break the protein.
- Nonsense: the new codon is a stop, so the protein ends early.
In syn3A’s ptsH gene, the 88 codons between the start and the stop allow 792 one-letter changes (3 for each letter). 173 of them are silent, 591 are missense, and 28 are nonsense.
Adding or removing a letter is worse. The ribosome still reads in threes from the start, so every codon after the change is regrouped: a frameshift. The protein is wrong from that point on, and the new frame soon hits a stop codon by chance, in syn3A’s DNA after about 14 codons. In 1961, Francis Crick, Sydney Brenner, and colleagues used frameshifts in a virus gene to show that the code is read three letters at a time. One extra letter broke the gene, and three extra letters close together let it work again.
syn3A’s code adds a twist. A change from TGG to TGA is silent in syn3A, because both mean tryptophan. In E. coli the same change is a nonsense mutation.
In Mutation Lab, a real syn3A gene runs across the top in codons, with its protein underneath as a chain of beads. Tap a codon to zoom in, then change, insert, or delete a letter, and watch the protein rebuild itself. Each mission asks for one kind of mutation.
Game · Mutation Lab
1. Silent
Goal: Change one letter and keep the protein exactly the same.
Change a letter and watch what happens to the protein.
Start the mission, then tap a codon to zoom in.
Check yourselfA gene's codon AAA (lysine) changes to AAG. What kind of mutation is it?
Silent: AAG also means lysine, so the protein doesn’t change.
Check yourselfA codon TTA (leucine) changes to TAA. What happens?
TAA is a stop codon, so this is a nonsense mutation: the protein ends at that point, and everything after it is never made.
Check yourselfWhy does deleting 3 letters do less damage than deleting 1?
Three letters are a whole codon. The protein loses one amino acid (or two, if the deletion spans two codons), but every codon after it is read in the right frame. Deleting 1 letter shifts the frame for the rest of the gene.
From genome to proteome in code
Now put the whole lesson into code. The proteome is the full set of a cell’s proteins. The plan: read the list of genes from syn3A’s GenBank record, cut each gene out of the genome, translate it with syn3A’s code, and check every protein against the one GenBank lists.
In Lesson 2 you read the sequence at the end of a GenBank file. The genes are listed above it, in the FEATURES table. Here is the entry for the gene on the other strand from earlier, from syn3A’s real record:
gene complement(9991..10968)
/gene="rnsD; uptD"
/locus_tag="JCVISYN3A_0008"
CDS complement(9991..10968)
/gene="rnsD; uptD"
/locus_tag="JCVISYN3A_0008"
/codon_start=1
/transl_table=4
/product="Nucleoside ABC transporter permease"
/protein_id="AVX54576.1"
/translation="MTILFNTSILTWALALVGVLLFASLSSLVSEKAGVVNIAVEGMM
IIGALVVSILGTYLTSNDNKSNYTQIPIVLLAGVITAVFALLHAFPAITLKANQIISG
Each feature starts on a line with its kind at position 5, such as gene or CDS (a coding sequence: the part that becomes protein), and its location after it. The lines below it, indented by 21 spaces, are its qualifiers: a /, a name, =, and a value in quotes. Long values carry on over several lines. /transl_table=4 is GenBank’s note that this gene uses code 4. The record also marks 3 broken genes, pseudogenes, with a bare /pseudo; they make no protein.
This exercise is a challenge: read the whole FEATURES table into a list of Python dicts. The starter walks you through it step by step.
Now the pipeline. For each protein-coding gene, cut it out with genome[start - 1:end], take the reverse complement if it is on the other strand, translate it, and make the first amino acid M. The starter includes working versions of the functions you wrote earlier, so this exercise doesn’t depend on them. The last check runs all 455 genes.
One more, if you want it: find the genes yourself, with no GenBank at all, by searching for long open reading frames. The checks compare your list with GenBank’s genes, and the success message explains the ones you miss.
Code milestone: the gene-to-protein pipeline
Two new modules join the engine in this lesson:
virtualcell/expression.pyholdstranscribe,codons,translate,mrna_steady_state, andfind_orfs.virtualcell/annotation.pyholdsparse_featuresandgene_to_protein.
Two pieces are written for you. virtualcell/genetic_code.py has the standard code and syn3A’s code 4. genomes.py can now load syn3A’s full GenBank record, and constants.py has this lesson’s numbers: polymerases, ribosomes, speeds, and half-lives.
Copy each function you wrote into its module, replacing the stub, then run the checks from the engine folder:
python -m pytest
When they pass, the engine can rebuild syn3A’s proteome:
from virtualcell.genomes import load_syn3a_genome, load_syn3a_genbank
from virtualcell.annotation import parse_features, gene_to_protein
genome = load_syn3a_genome()
genes = [f for f in parse_features(load_syn3a_genbank())
if f["kind"] == "CDS" and "pseudo" not in f]
proteins = {g["locus_tag"]: gene_to_protein(genome, g) for g in genes}
print(len(proteins)) # 455
print(proteins["JCVISYN3A_0648"]) # MKVRSSVKQICDKCRVIRRKGRVMIICVTPKHKQRQG
print(sum(proteins[g["locus_tag"]] == g["translation"] for g in genes)) # 455
Numbers to remember
| Quantity | Value |
|---|---|
| A gene in GenBank | start..end, counted from 1, both ends included |
| Its length | end − start + 1 |
| The same gene in Python | genome[start - 1:end], reverse-complemented if on the other strand |
| Promoter boxes (E. coli) | −35 TTGACA and −10 TATAAT, about 17 base pairs apart |
| Codons | 3 letters; 64 codons for 20 amino acids and stop |
| syn3A’s code (code 4) | UGA means tryptophan; stops are UAA and UAG |
| Stops in random DNA | 1 in 21 codons (equal letters, standard code); about 1 in 14 in syn3A’s DNA |
| Transcription | about 25 letters per second |
| Translation | about 5 amino acids per second in syn3A’s model; 10–20 in E. coli |
| syn3A | 493 genes; about 187 RNA polymerases; about 500 ribosomes |
| mRNA half-life | about 4 minutes; average lifetime = half-life ÷ ln 2, about 5.8 minutes |
| Steady state | number of copies = production rate × average lifetime |
| Cost of a protein | about 4 ATP per amino acid |
Next lesson: molecules in motion. You will see how molecules wander through a crowded cell by random walks, how fast reactions happen, and build your first simulator.
Sources and further reading
- Thornburg ZR, et al. Kinetic modeling of the genetic information processes in a minimal cell. Frontiers in Molecular Biosciences 6:130 (2019). Polymerase and ribosome counts, speeds, half-lives, and ATP costs.
- Thornburg ZR, et al. Fundamental behaviors emerge from simulations of a living minimal cell. Cell 185:345–360 (2022).
- Breuer M, et al. Essential metabolism for a minimal cell. eLife 8:e36842 (2019).
- Bianchi DM, et al. Toward the complete functional characterization of a minimal bacterial proteome. Journal of Physical Chemistry B 126:6820–6834 (2022).
- syn3A’s genome and genes: NCBI GenBank record CP016816.2.
- The genetic codes: NCBI, The Genetic Codes, tables 1 and 4.
- Crick FHC. On protein synthesis. Symposia of the Society for Experimental Biology 12:138–163 (1958).
- Crick FHC, Barnett L, Brenner S, Watts-Tobin RJ. General nature of the genetic code for proteins. Nature 192:1227–1232 (1961).
- Milo R, Phillips R. Cell Biology by the Numbers. Garland Science, 2015. Free online at book.bionumbers.org.
- Alberts B, et al. Molecular Biology of the Cell, 6th edition. Garland Science, 2014.