Tuesday, September 12, 2023

The Marvel of Protein Synthesis: Unraveling the Central Dogma of Biology

 The process of creating a protein from a DNA sequence is a fundamental and fascinating journey in the world of biology, and it goes by the name of protein synthesis. Let's take a closer look at how this captivating process unfolds:

Transcription: Our adventure begins inside the cell nucleus, where the DNA resides. During transcription, a special enzyme known as RNA polymerase steps in. It takes on the role of reading the DNA sequence of a gene and crafts a matching RNA molecule, which we call messenger RNA or mRNA. This is where the DNA's double helix temporarily unwinds, and the RNA molecule is formed by pairing RNA bases (adenine, uracil, cytosine, and guanine) with their counterparts from DNA (adenine pairs with uracil, cytosine pairs with guanine).

mRNA Processing: As our newly minted mRNA exits the nucleus, it often undergoes a bit of grooming. Think of it as getting dressed up for its grand appearance in the cytoplasm. It gets a fashionable 5' cap and a stylish 3' poly-A tail. These fashionable additions not only protect the mRNA but also help it get noticed and translated by the cellular machinery.

Translation: Now, our processed mRNA makes its way into the bustling cytoplasm, where it encounters the ribosomes. During translation, these ribosomes read the mRNA sequence in groups of three nucleotides known as codons. Each codon is like a secret code for a specific amino acid. Here comes the fun part: transfer RNA or tRNA swoops in, carrying amino acids and their own set of codes, called anti-codons. These codes match up perfectly with the mRNA codons, thanks to the magic of complementary base pairing.

Amino Acid Assembly: With the help of tRNA, our amino acids gather around the mRNA like eager partygoers. They assemble in a specific order dictated by the mRNA codons. Picture the ribosome as the life of the party; it's the one catalyzing the formation of bonds between these amino acids. This leads to the creation of a growing polypeptide chain.

Protein Folding: As our polypeptide chain is born, it embarks on a remarkable journey of self-discovery. It begins to fold itself into a unique three-dimensional structure. This final shape is crucial because it determines the protein's function. Protein folding is an intricate dance, carefully choreographed and often requiring the assistance of chaperone molecules to ensure everything falls into place.

Post-Translational Modifications: After this intricate folding, many proteins undergo further transformations. It's like adding the final touches to a masterpiece. Chemical groups may be attached, or specific segments might be cleaved. These modifications can fine-tune a protein's activity or guide it to precise locations within the cell.

Protein Function: Our fully formed and modified protein is now ready to shine in its role within the cell. Proteins are the versatile actors in the cellular drama, playing roles as enzymes, structural support, messengers, transporters, and much more.

In essence, this journey from DNA to protein involves the captivating steps of transcription, mRNA processing, translation, amino acid assembly, protein folding, post-translational modifications, and finally, the fulfillment of specific functions by the protein. It's often referred to as the 'central dogma' of molecular biology and is a story central to life itself.

Translating this phenomena into python code using a rand DNA sequence is not an easy task, here is the code:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from Bio.Seq import Seq
from Bio.SeqUtils import seq1
from Bio.PDB import Polypeptide
import MDAnalysis as mda
import numpy as np
import nglview as nv

# Step 1: Generate a random DNA sequence (simplified)
gene_sequence = Seq("ATGCTAGCTAGCTAGCTAGCTAGCTAG")

# Step 2: Transcription (DNA to mRNA)
mRNA = gene_sequence.transcribe()

# Step 3: Translation (mRNA to protein sequence)
protein_sequence = mRNA.translate()

# Display the sequences
print("Gene Sequence: ", gene_sequence)
print("mRNA Sequence: ", mRNA)
print("Protein Sequence: ", protein_sequence)

# Step 4: Create a simple 3D structure for the protein (simplified)
# We will create a random structure for this example.
num_atoms = len(protein_sequence) * 10  # Simplified: 10 atoms per amino acid
coordinates = np.random.rand(num_atoms, 3) * 10.0  # Random coordinates

# Create a simple PDB file with atom names and residue IDs
pdb_filename = "protein.pdb"
with open(pdb_filename, "w") as pdb_file:
    for i in range(num_atoms):
        x, y, z = coordinates[i]
        pdb_file.write(f"ATOM  {i + 1:5}  N   ALA A   1    {x:8.3f}{y:8.3f}{z:8.3f}  1.00  0.00\n")

# Load the PDB file with MDAnalysis
u = mda.Universe(pdb_filename)

# Step 5: Visualization of the protein structure using NGLView
view = nv.show_mdanalysis(u)
view.add_representation("ball+stick", selection="all")
view.center()

# Display the 3D visualization
view

And here is the image created:


Take a look at the TED Video, they create new proteins:


Python Program obtaining a DNA and Protein sequence from GenBank and UniProt:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from Bio import Entrez, SeqIO, ExPASy, SwissProt

# Define your email address (required for accessing GenBank)
Entrez.email = "mh1369080@gmail.com"

# Function to fetch DNA sequence from GenBank using an accession number
def fetch_dna_from_genbank(accession):
    try:
        handle = Entrez.efetch(db="nucleotide", id=accession, rettype="gb", retmode="text")
        record = SeqIO.read(handle, "genbank")
        handle.close()
        return record.seq
    except Exception as e:
        print(f"Error: {e}")
        return None

# Function to fetch protein sequence from UniProt using a UniProt ID
def fetch_protein_from_uniprot(uniprot_id):
    try:
        handle = ExPASy.get_sprot_raw(uniprot_id)
        record = SwissProt.read(handle)
        handle.close()

        # Extract protein sequence from the UniProt record
        protein_sequence = record.sequence
        return protein_sequence
    except Exception as e:
        print(f"Error: {e}")
        return None

# Example usage:
genbank_accession = "NM_001301717"  # Replace with your GenBank accession number
uniprot_id = "P02769"  # Replace with your UniProt ID

# Fetch DNA sequence from GenBank
dna_sequence = fetch_dna_from_genbank(genbank_accession)
if dna_sequence:
    print(f"DNA Sequence from GenBank ({genbank_accession}):")
    print(dna_sequence)

# Fetch protein sequence from UniProt
protein_sequence = fetch_protein_from_uniprot(uniprot_id)
if protein_sequence:
    print(f"Protein Sequence from UniProt ({uniprot_id}):")
    print(protein_sequence)

No comments:

Post a Comment