I have a concluding test a written part and a computer part after 2 weeks about those
python3 -c " import pdfplumber for pdf_path, label in [ ('/home/daytona/workspace/attachments/e6ba4b38-ed26-4f9a-b686-0d5a2fcd27f9/Hormones_integral_2025-133368.pdf', 'HORMONES'), ('/home/daytona/workspace/attachments/e6ba4b38-ed26-4f9a-b686-0d5a2fcd27f9/Capter_8_Nucleic_acids_Replic_Transcr_Translation-133998.pdf', 'NUCLEIC_ACIDS'), ]: print(f'=== {label} ===') with pdfplumber.open(pdf_path) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages[:5]): text = page.extract_text() print(f'--- Page {i+1} ---') print(text[:2000] if text else '[No text]') print() "
python3 -c " import pdfplumber, json result = {} for pdf_path, label in [ ('/home/daytona/workspace/attachments/e6ba4b38-ed26-4f9a-b686-0d5a2fcd27f9/Hormones_integral_2025-133368.pdf', 'hormones'), ('/home/daytona/workspace/attachments/e6ba4b38-ed26-4f9a-b686-0d5a2fcd27f9/Capter_8_Nucleic_acids_Replic_Transcr_Translation-133998.pdf', 'nucleic_acids'), ]: pages = [] with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: text = page.extract_text() or '' pages.append(text.strip()) result[label] = pages with open('/home/daytona/workspace/attachments/extracted.json', 'w') as f: json.dump(result, f) print('Hormones pages:', len(result['hormones'])) print('Nucleic acids pages:', len(result['nucleic_acids'])) print('Hormones sample (p10):', result['hormones'][9][:300]) print('NA sample (p10):', result['nucleic_acids'][9][:300]) "
python3 -c " import json with open('/home/daytona/workspace/attachments/extracted.json') as f: data = json.load(f) # Print all hormones content pages = data['hormones'] for i, p in enumerate(pages): if p: print(f'=H{i+1}= {p}') print() " | head -3000
python3 -c " import json with open('/home/daytona/workspace/attachments/extracted.json') as f: data = json.load(f) pages = data['nucleic_acids'] for i, p in enumerate(pages): if p: print(f'=NA{i+1}= {p}') print() "
mkdir -p /home/daytona/workspace/study-guide && ls /home/daytona/workspace/study-guide/
~/study-guide/generate_study_guide.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
PageBreak, HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/study-guide/Study_Guide_Hormones_NucleicAcids.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm,
title="Study Guide: Hormones & Nucleic Acids",
author="Orris AI"
)
styles = getSampleStyleSheet()
# Custom styles
DARK_BLUE = colors.HexColor("#1A3A5C")
MID_BLUE = colors.HexColor("#2E6DA4")
LIGHT_BLUE= colors.HexColor("#D6E8F7")
ACCENT = colors.HexColor("#E8F4FD")
GREEN = colors.HexColor("#1A5C38")
LIGHT_GREEN = colors.HexColor("#D6F0E2")
ORANGE = colors.HexColor("#8B3A00")
LIGHT_ORANGE = colors.HexColor("#FFF0D6")
RED_DARK = colors.HexColor("#8B0000")
LIGHT_RED = colors.HexColor("#FFE5E5")
GRAY = colors.HexColor("#F5F5F5")
DARK_GRAY = colors.HexColor("#444444")
def s(name, **kw):
base = styles[name].clone(name + "_custom_" + str(id(kw)))
for k, v in kw.items():
setattr(base, k, v)
return base
title_style = ParagraphStyle("cover_title", fontSize=28, leading=36,
textColor=DARK_BLUE, alignment=TA_CENTER, fontName="Helvetica-Bold",
spaceAfter=6)
subtitle_style = ParagraphStyle("cover_sub", fontSize=14, leading=20,
textColor=MID_BLUE, alignment=TA_CENTER, fontName="Helvetica",
spaceAfter=4)
section_title = ParagraphStyle("sec_title", fontSize=18, leading=24,
textColor=colors.white, fontName="Helvetica-Bold",
spaceBefore=6, spaceAfter=4, backColor=DARK_BLUE,
leftIndent=-0.5*cm, rightIndent=-0.5*cm,
borderPad=8)
sub_title = ParagraphStyle("sub_title", fontSize=13, leading=18,
textColor=DARK_BLUE, fontName="Helvetica-Bold",
spaceBefore=10, spaceAfter=3, borderPad=4,
leftIndent=0)
sub2_title = ParagraphStyle("sub2_title", fontSize=11, leading=15,
textColor=MID_BLUE, fontName="Helvetica-Bold",
spaceBefore=6, spaceAfter=2)
body = ParagraphStyle("body_text", fontSize=9.5, leading=14,
textColor=DARK_GRAY, fontName="Helvetica",
spaceBefore=2, spaceAfter=2, alignment=TA_JUSTIFY)
bullet = ParagraphStyle("bullet_text", fontSize=9.5, leading=14,
textColor=DARK_GRAY, fontName="Helvetica",
spaceBefore=1, spaceAfter=1, leftIndent=14, bulletIndent=4)
bold_body = ParagraphStyle("bold_body", fontSize=9.5, leading=14,
textColor=DARK_GRAY, fontName="Helvetica-Bold",
spaceBefore=2, spaceAfter=2)
note_style = ParagraphStyle("note", fontSize=9, leading=13,
textColor=ORANGE, fontName="Helvetica-Oblique",
spaceBefore=2, spaceAfter=2, leftIndent=8)
clinical_style = ParagraphStyle("clinical", fontSize=9, leading=13,
textColor=RED_DARK, fontName="Helvetica",
spaceBefore=1, spaceAfter=1)
def B(txt): return f"<b>{txt}</b>"
def I(txt): return f"<i>{txt}</i>"
def C(txt, color): return f'<font color="{color}">{txt}</font>'
story = []
def add_cover():
story.append(Spacer(1, 3*cm))
story.append(Paragraph("COMPREHENSIVE STUDY GUIDE", title_style))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Biochemistry & Molecular Biology", subtitle_style))
story.append(Spacer(1, 0.5*cm))
# Colored divider
story.append(HRFlowable(width="100%", thickness=3, color=MID_BLUE))
story.append(Spacer(1, 0.4*cm))
t = Table([
[Paragraph("📘 Part 1: HORMONES", ParagraphStyle("cov1", fontSize=15, leading=22,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER))],
[Paragraph("📗 Part 2: NUCLEIC ACIDS, REPLICATION, TRANSCRIPTION & TRANSLATION",
ParagraphStyle("cov2", fontSize=13, leading=18,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER))]
], colWidths=["100%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), DARK_BLUE),
("BACKGROUND", (0,1), (0,1), GREEN),
("ROWPADDING", (0,0), (-1,-1), 14),
("TOPPADDING", (0,0), (-1,-1), 12),
("BOTTOMPADDING", (0,0), (-1,-1), 12),
("ROUNDEDCORNERS", [6]),
]))
story.append(t)
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=3, color=MID_BLUE))
story.append(Spacer(1, 1*cm))
story.append(Paragraph("Based on course slides by Olga Tagadiuc, MD, PhD", subtitle_style))
story.append(Paragraph("Exam Preparation · May 2026", subtitle_style))
story.append(Spacer(1, 2*cm))
# Quick reference box
t2 = Table([[Paragraph(
"<b>QUICK REFERENCE</b><br/>"
"• Hormones: classification, mechanisms of action, specific hormones and their clinical correlates<br/>"
"• Nucleic Acids: DNA replication (pro- & eukaryotic), transcription, translation, DNA repair<br/>"
"• Clinical disorders: diabetes, thyroid disease, adrenal disorders, pheochromocytoma and more",
ParagraphStyle("qr", fontSize=9.5, leading=14, textColor=DARK_BLUE,
fontName="Helvetica", alignment=TA_LEFT)
)]], colWidths=["100%"])
t2.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_BLUE),
("BOX", (0,0), (-1,-1), 1.5, MID_BLUE),
("ROWPADDING", (0,0), (-1,-1), 12),
]))
story.append(t2)
story.append(PageBreak())
def section_header(text, color=DARK_BLUE):
t = Table([[Paragraph(f"<font color='white'><b>{text}</b></font>",
ParagraphStyle("sh", fontSize=15, leading=20, fontName="Helvetica-Bold",
alignment=TA_LEFT))]],
colWidths=["100%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("ROWPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
]))
story.append(Spacer(1, 0.3*cm))
story.append(t)
story.append(Spacer(1, 0.2*cm))
def sub_header(text, color=MID_BLUE):
story.append(Spacer(1, 0.15*cm))
t = Table([[Paragraph(f"<font color='white'><b>{text}</b></font>",
ParagraphStyle("subh", fontSize=11, leading=16, fontName="Helvetica-Bold"))]],
colWidths=["100%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("ROWPADDING", (0,0), (-1,-1), 7),
]))
story.append(t)
story.append(Spacer(1, 0.1*cm))
def sub2_header(text):
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(f"<b><font color='#2E6DA4'>▶ {text}</font></b>", sub2_title))
def p(text): story.append(Paragraph(text, body))
def bp(text): story.append(Paragraph(f"• {text}", bullet))
def note(text): story.append(Paragraph(f"⚠ {text}", note_style))
def clinical_box(title, items):
rows = [[Paragraph(f"<b><font color='{RED_DARK}'>{title}</font></b>",
ParagraphStyle("ct", fontSize=10, leading=14, fontName="Helvetica-Bold"))]]
for item in items:
rows.append([Paragraph(f"• {item}", ParagraphStyle("ci", fontSize=9, leading=13,
textColor=DARK_GRAY, fontName="Helvetica", leftIndent=8))])
t = Table(rows, colWidths=["100%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), LIGHT_RED),
("BACKGROUND", (0,1), (-1,-1), colors.HexColor("#FFF8F8")),
("BOX", (0,0), (-1,-1), 1.2, RED_DARK),
("ROWPADDING", (0,0), (-1,-1), 6),
]))
story.append(Spacer(1, 0.1*cm))
story.append(t)
story.append(Spacer(1, 0.1*cm))
def info_box(title, items, bg=LIGHT_BLUE, border=MID_BLUE):
rows = [[Paragraph(f"<b>{title}</b>",
ParagraphStyle("it", fontSize=10, leading=14, fontName="Helvetica-Bold",
textColor=DARK_BLUE))]]
for item in items:
rows.append([Paragraph(f"• {item}", ParagraphStyle("ii", fontSize=9, leading=13,
textColor=DARK_GRAY, fontName="Helvetica", leftIndent=8))])
t = Table(rows, colWidths=["100%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), bg),
("BACKGROUND", (0,1), (-1,-1), ACCENT),
("BOX", (0,0), (-1,-1), 1.2, border),
("ROWPADDING", (0,0), (-1,-1), 6),
]))
story.append(Spacer(1, 0.1*cm))
story.append(t)
story.append(Spacer(1, 0.1*cm))
def two_col_table(headers, rows, col_widths=None):
if col_widths is None:
col_widths = [7*cm, 9*cm]
data = []
if headers:
data.append([Paragraph(f"<b>{h}</b>", ParagraphStyle("th", fontSize=9, leading=12,
textColor=colors.white, fontName="Helvetica-Bold")) for h in headers])
for row in rows:
data.append([Paragraph(str(c), ParagraphStyle("td", fontSize=8.5, leading=12,
textColor=DARK_GRAY, fontName="Helvetica")) for c in row])
t = Table(data, colWidths=col_widths)
style = [
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.white, ACCENT]),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")),
("ROWPADDING", (0,0), (-1,-1), 5),
("TOPPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "TOP"),
]
t.setStyle(TableStyle(style))
story.append(Spacer(1, 0.1*cm))
story.append(t)
story.append(Spacer(1, 0.15*cm))
# ============================================================
# PART 1: HORMONES
# ============================================================
def part1_hormones():
# Part title page
t = Table([[Paragraph(
"<font color='white'><b>PART 1</b></font>",
ParagraphStyle("p1a", fontSize=18, leading=24, fontName="Helvetica-Bold",
alignment=TA_CENTER)),
Paragraph(
"<font color='white'><b>HORMONES</b></font>",
ParagraphStyle("p1b", fontSize=32, leading=40, fontName="Helvetica-Bold",
alignment=TA_CENTER))
]], colWidths=["25%", "75%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("ROWPADDING", (0,0), (-1,-1), 20),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(t)
story.append(Spacer(1, 0.5*cm))
# Table of contents for this part
toc_items = [
"1. Introduction & General Properties",
"2. Transport of Hormones",
"3. Regulation of Hormone Synthesis/Secretion",
"4. Classification of Hormones",
"5. Mechanisms of Action",
"6. Hypothalamic & Pituitary Hormones",
"7. Pancreatic Hormones (Insulin, Glucagon, Somatostatin)",
"8. Thyroid Hormones",
"9. Parathyroid Hormone (PTH) & Calcitonin",
"10. Adrenal Hormones (Glucocorticoids, Mineralocorticoids, Catecholamines)",
"11. Sex Hormones",
"12. Clinical Disorders Summary",
]
info_box("Chapter Contents", toc_items)
story.append(PageBreak())
# 1. Introduction
section_header("1. INTRODUCTION — WHAT ARE HORMONES?")
p("<b>Definition (Bayliss & Starling, 1905):</b> Specific chemical compounds produced by specialised cells of the endocrine glands that influence distant target tissues, acting in very small amounts.")
story.append(Spacer(1, 0.2*cm))
two_col_table(
["Nervous System", "Endocrine System"],
[
["Rapid response", "Slow response"],
["Short-lasting", "Long-lasting"],
["Uses neurotransmitters", "Uses hormones"],
],
col_widths=["50%", "50%"]
)
sub2_header("Types of Endocrine Action")
two_col_table(["Type", "Definition"], [
["Endocrine", "Released into blood/lymph; influences distant target cells"],
["Paracrine", "Influences adjacent cells"],
["Autocrine", "Influences the same cells that released the hormone"],
])
sub2_header("General Properties of Hormones")
bp("Very high biological activity")
bp("Influence on distant target cells")
bp("High specificity")
story.append(PageBreak())
# 2. Transport
section_header("2. TRANSPORT OF HORMONES")
two_col_table(["Type", "Transport Mechanism"], [
["Hydrosoluble (peptides, catecholamines)", "Circulate freely in plasma (exception: corticoliberin, GH)"],
["Liposoluble (thyroid, steroid)", "Bound to specific carrier proteins"],
])
sub2_header("Carrier Proteins for Liposoluble Hormones")
two_col_table(["Carrier Protein", "Abbreviation", "Binds"], [
["Thyroxine-binding globulin", "TBG", "T3, T4 (70%)"],
["Transcortin (corticosteroid-binding globulin)", "CBG", "Cortisol"],
["Sex hormone-binding globulin", "SHBG", "Testosterone, Estradiol"],
["Albumin", "—", "Many lipophilic hormones (15–20%)"],
], col_widths=["5.5*cm", "3*cm", "7.5*cm"])
note("Only the FREE hormone fraction is biologically active.")
# 3. Regulation
section_header("3. REGULATION OF HORMONE SYNTHESIS & SECRETION")
sub2_header("Three Main Mechanisms")
bp("<b>Retrocontrol (Feedback):</b> Most important mechanism. CNS → Hypothalamus (RF) → Adenohypophysis hormones → Peripheral glands. Negative feedback: peripheral hormone levels suppress hypothalamic/pituitary secretion.")
bp("<b>Biorhythm:</b> Circadian and pulsatile patterns (e.g., ACTH peaks before waking; LH surge mid-cycle).")
bp("<b>Neurological regulation:</b> Nerve impulses modulate hypothalamic secretion.")
sub2_header("Receptor Regulation")
bp("<b>Up-regulation:</b> Prolonged low levels → ↑ number of receptors (e.g., prolactin).")
bp("<b>Down-regulation:</b> Prolonged high levels → ↓ number of receptors (e.g., insulin, glucagon, STH).")
# 4. Classification
section_header("4. CLASSIFICATION OF HORMONES")
sub2_header("By Chemical Structure")
two_col_table(["Category", "Examples"], [
["Amino acid derivatives (tyrosine)", "Thyroid hormones (T3, T4), Catecholamines (dopamine, epinephrine, norepinephrine)"],
["Peptide hormones", "Oxytocin, vasopressin (9 AA)"],
["Simple proteins", "PTH, calcitonin, GH"],
["Glycoproteins", "FSH, LH, hCG, TSH"],
["Steroid hormones", "Cortisol, aldosterone, testosterone, estradiol"],
])
sub2_header("By Function")
bp("I. Basal metabolism: insulin, glucagon, glucocorticoids, adrenalin, thyroid hormones")
bp("II. Water & electrolyte metabolism: mineralocorticoids, vasopressin")
bp("III. Calcium & phosphate metabolism: PTH, calcitonin, calcitriol")
bp("IV. Reproduction: sex hormones, oxytocin, prolactin")
bp("V. Functions of other endocrine glands: hypothalamic and adenohypophysis hormones")
story.append(PageBreak())
# 5. Mechanisms of Action
section_header("5. MECHANISMS OF HORMONE ACTION")
sub2_header("A. Cytosolic-Nuclear Mechanism (Liposoluble Hormones)")
p("Used by: <b>steroid hormones, thyroid hormones, calcitriol</b>")
bp("Hormone passes through plasma membrane by simple diffusion")
bp("Binds intracellular receptor (cytoplasm or nucleus)")
bp("Hormone-receptor complex binds to <b>Hormone Response Elements (HREs)</b> on DNA")
bp("Alters gene expression (enhances or suppresses transcription)")
story.append(Spacer(1, 0.15*cm))
sub2_header("B. Membrane-Intracellular Mechanism (Watersoluble Hormones)")
p("Used by: <b>peptide hormones, catecholamines</b>. Hormone cannot enter the cell — signal is transmitted via second messengers.")
sub_header("Transductor System Components", color=MID_BLUE)
two_col_table(["Component", "Role"], [
["Receptor", "Binds hormone; located on cell surface"],
["G-protein (Gα, Gβ, Gγ subunits)", "Signal transducer; activated form = α-GTP complex"],
["Effector enzyme", "Generates second messenger"],
])
sub2_header("G-Protein Types")
two_col_table(["G-protein", "Coupled Enzyme", "Effect"], [
["Gs (stimulatory)", "Adenylyl cyclase (↑)", "↑ cAMP → activates PKA"],
["Gi (inhibitory)", "Adenylyl cyclase (↓)", "↓ cAMP"],
["Gp (phospholipase)", "Phospholipase C", "↑ DAG + IP3"],
["Gt (transducin)", "cGMP phosphodiesterase", "↓ cGMP (retina)"],
], col_widths=["3.5*cm", "4.5*cm", "8*cm"])
sub2_header("Second Messenger Pathways")
two_col_table(["Second Messenger", "Enzyme", "Downstream Effect"], [
["cAMP", "Adenylyl cyclase (from ATP)", "Activates PKA → phosphorylates proteins"],
["cGMP", "Guanylyl cyclase (from GTP)", "Activates PKG"],
["DAG", "Phospholipase C (from PIP2)", "Activates PKC"],
["IP3", "Phospholipase C (from PIP2)", "Releases Ca²⁺ from ER"],
["Ca²⁺", "Released by IP3", "Activates calmodulin, PKC, others"],
])
note("Phosphodiesterase hydrolyzes cAMP/cGMP → AMP/GMP. Inhibited by caffeine & theophylline.")
story.append(PageBreak())
# 6. Hypothalamic & Pituitary
section_header("6. HYPOTHALAMIC & PITUITARY HORMONES")
sub2_header("Hypothalamic Hormones (Releasing & Inhibiting Factors)")
two_col_table(["Hormone", "Structure", "Action"], [
["TRH (Thyrotropin-releasing factor)", "3 AA tripeptide", "↑ TSH and prolactin"],
["CRH (Corticotropin-releasing hormone)", "41 AA protein", "↑ ACTH and β-endorphin"],
["GnRH (Gonadotropin-releasing hormone)", "10 AA peptide", "↑ LH and FSH"],
["GHRH (Growth hormone-releasing factor)", "40–44 AA protein", "↑ GH"],
["Somatostatin (SIF/GIF)", "14–28 AA peptide", "↓ GH and TSH"],
["PIF (Prolactin-inhibiting factor)", "Dopamine", "↓ Prolactin"],
["PRF (Prolactin-releasing factor)", "TRH", "↑ Prolactin"],
])
sub2_header("Anterior Pituitary Hormone Families")
two_col_table(["Family", "Members"], [
["POMC (Pro-OpioMelanoCortin) family", "ACTH, α/β/γ-MSH, Lipotropins, β-endorphin"],
["Growth hormone family (Somatomammotropins)", "GH, Prolactin, hCS (placental lactogen)"],
["Glycoprotein hormones", "TSH, FSH, LH, hCG"],
])
sub2_header("ACTH (Adrenocorticotropic Hormone)")
bp("39 AA peptide; derived from POMC")
bp("Regulated by CRH (pulsatile secretion); peak before waking")
bp("Negative feedback by cortisol at hypothalamic & pituitary levels")
bp("Stimulates adrenal cortex: <b>cortisol, corticosterone (GC), aldosterone (MC), androstenedione (androgen)</b>")
bp("Receptor: G-protein coupled with adenylate cyclase")
bp("Main effect: ↑ cholesterol desmolase activity → pregnenolone synthesis")
sub2_header("Growth Hormone (GH/STH)")
bp("~200 AA, Mr ≈ 22,000 Da; single polypeptide chain, 2 disulfide bonds")
bp("Acts through protein kinase C")
bp("Effects: ↑ gluconeogenesis (hyperglycaemic), ↑ amino acid uptake (+N balance), ↑ lipolysis → energy for protein synthesis")
sub2_header("Prolactin")
bp("198 AA, Mr ≈ 22,000 Da; stabilized by Zn²⁺")
bp("Negatively controlled by dopamine (PIH)")
bp("Function: promotes breast development and lactation during pregnancy")
sub2_header("Glycoprotein Hormones (TSH, FSH, LH, hCG)")
p("All are α:β heterodimers. <b>α-subunit is identical</b> in all; <b>β-subunit determines biological activity</b>.")
bp("Act through G-protein coupled with adenylate cyclase")
bp("Mr gonadotropins ≈ 25,000 Da; TSH ≈ 30,000 Da")
sub2_header("TSH (Thyroid Stimulating Hormone)")
bp("Stimulated by TRH; peak secretion midnight–4am")
bp("Negative feedback by T3 within thyrotropic cells")
bp("Binds TSH receptors on thyroid follicle basal membrane (G-protein → adenylate cyclase & PLCγ)")
bp("Results: ↑ cAMP, PKA, IP3, DAG → ↑ T4/T3 secretion + thyroid cell growth")
sub2_header("FSH & LH")
two_col_table(["Hormone", "In Females", "In Males"], [
["FSH", "↑ follicular development; ↑ estrogen by granulosa cells", "↑ testicular growth; ↑ T & DHT synthesis in Sertoli cells"],
["LH", "↑ estrogens/progesterone by thecal cells; LH surge → ovulation; ↑ corpus luteum progesterone", "Binds Leydig cells → ↑ testosterone secretion"],
], col_widths=["2.5*cm", "7.5*cm", "6*cm"])
sub2_header("hCG (Human Chorionic Gonadotropin)")
bp("Produced only during pregnancy by placenta")
bp("Binds LH/choriogonadotropin receptor (LHCGR) in luteal cells")
bp("Prevents disintegration of corpus luteum → maintains progesterone synthesis")
bp("Basis of pregnancy tests (appears in plasma/urine early in pregnancy)")
story.append(PageBreak())
sub2_header("Posterior Pituitary Hormones: Vasopressin (ADH) & Oxytocin")
p("Both are <b>nonapeptides</b>, differing by only 2 amino acids. Synthesized as prohormones in hypothalamus, transported with carrier proteins (<b>neurophysins</b>).")
two_col_table(["Hormone", "Regulation", "Effects"], [
["ADH (Vasopressin)", "↑ secretion when plasma osmolarity rises (sensed by hypothalamic osmoreceptors)", "↑ water reabsorption in kidney tubules; ↑ Na⁺ concentration of urine; ↓ body fluid osmolarity. Deficiency → Diabetes Insipidus (polyuria, polydipsia)"],
["Oxytocin", "Stimulated by electrical activity of oxytocin cells", "Females: milk ejection (myoepithelial contraction), uterine smooth muscle contraction (childbirth). Males: ↑ smooth muscle contraction in vas deferens → propels sperm during ejaculation"],
])
story.append(PageBreak())
# 7. Pancreatic Hormones
section_header("7. PANCREATIC HORMONES")
sub2_header("Islets of Langerhans (1–2 million; 1–2% of pancreatic tissue)")
two_col_table(["Cell Type", "%", "Hormone", "AA"], [
["α-cells", "20%", "Glucagon", "29 AA"],
["β-cells", "72%", "Insulin", "51 AA (A+B chains)"],
["δ-cells", "7%", "Somatostatin", "14 AA"],
["F-cells (PP cells)", "1%", "Pancreatic polypeptide", "36 AA"],
], col_widths=["3*cm", "2*cm", "4*cm", "3*cm"])
sub2_header("INSULIN")
sub_header("Structure & Biosynthesis", color=colors.HexColor("#336B87"))
bp("A-chain (21 AA) + B-chain (30 AA), linked by 2 disulfide bonds (A7-B7, A20-B19); intrachain bond A6-A11")
bp("First peptide hormone sequenced (Sanger, 1950s)")
bp("Biosynthesis: Preproinsulin gene (1500 bp) → mRNA → Preproinsulin (rER) → signal peptide cleaved → Proinsulin → Golgi packaging → secretory granules (insulin + C-peptide in equimolar amounts)")
sub_header("Secretion Mechanism", color=colors.HexColor("#336B87"))
bp("↑ Blood glucose → GLUT2 uptake in β-cells → glucose-6-P → glycolysis → ↑ ATP → inhibits K⁺-ATP channels → membrane depolarisation → opens Ca²⁺ channels → ↑ [Ca²⁺] → insulin vesicle exocytosis")
bp("Stimulators: gastrin, secretin, CCK, acetylcholine, GLP-1, amino acids, free fatty acids")
bp("Inhibitors: galanin, epinephrine, somatostatin")
sub_header("Clearance", color=colors.HexColor("#336B87"))
p("~50% cleared on first pass through liver. Cleared by skeletal muscle, kidneys, liver.")
sub_header("Mechanism of Action", color=colors.HexColor("#336B87"))
bp("Insulin receptor = dimer (α + β subunits). Insulin binds α-subunit → autophosphorylation of β-subunit → β becomes tyrosine kinase → phosphorylates IRS-1")
bp("<b>Mitogenic signals:</b> IRS-1 → SHC → GRB2 → SOS → MAPK cascade")
bp("<b>Metabolic signals:</b> IRS-1 → PI3-kinase → PtdP(3,4,5)P₃ → PDK1 → AKT")
sub_header("GLUT Transporter System", color=colors.HexColor("#336B87"))
two_col_table(["GLUT", "Location", "Km", "Key Feature"], [
["GLUT1", "RBC, endothelial cells (blood-brain barrier)", "~1.5 mM (high affinity)", "Always active near normal BG"],
["GLUT2", "Pancreatic β-cells, liver", "~17 mM (low affinity)", "Glucose sensor for insulin secretion"],
["GLUT4", "Skeletal muscle, adipose tissue", "~5 mM", "Insulin-sensitive; translocates to membrane when insulin binds"],
["Na⁺-GLUT (SGLT1/2)", "Intestine/kidney proximal tubule", "—", "Na⁺-dependent; not insulin-responsive"],
], col_widths=["2*cm", "4.5*cm", "3*cm", "6.5*cm"])
note("Intracellular glucose trapping: hexokinase/glucokinase phosphorylates glucose → G6P, which cannot cross membrane, trapping it inside cell.")
sub_header("Metabolic Effects of Insulin", color=colors.HexColor("#336B87"))
two_col_table(["Tissue", "Effects"], [
["Liver (hepatocytes)", "↑ glucose uptake, ↑ glucokinase, ↑ glycogen synthesis (via AKT→GSK3 inhibition), ↓ gluconeogenesis, ↓ glycogenolysis, ↑ lipogenesis"],
["Adipocytes", "↑ glucose uptake (GLUT4), ↑ glycerol synthesis, ↑ FFA uptake/storage as triglycerides (via lipoprotein lipase), ↓ lipolysis (↓ cAMP via PDE)"],
["Myocytes", "↑ glucose & amino acid uptake (GLUT4), ↑ protein synthesis"],
["General", "↑ protein synthesis (via AKT→mTOR→p70s6k), ↓ protein degradation, ↑ SREBP-1c for lipid synthesis"],
])
story.append(PageBreak())
sub2_header("GLUCAGON")
bp("29 AA peptide, Mr = 3485 Da; derived from proglucagon")
bp("Other products of proglucagon cleavage: glicentin, GLP-1 (incretin), GLP-2")
sub_header("Secretion", color=colors.HexColor("#336B87"))
two_col_table(["Stimulated by", "Inhibited by"], [
["Hypoglycaemia", "Somatostatin"],
["Epinephrine (β2, α2, α1 receptors)", "Insulin (via GABA)"],
["Amino acids (arginine, alanine)", "↑ FFAs and keto acids in blood"],
["Acetylcholine, CCK", "↑ Urea production"],
])
sub_header("Mechanism of Action", color=colors.HexColor("#336B87"))
p("Receptor → Gs protein → adenylyl cyclase → ↑ cAMP → PKA activation")
sub_header("Effects", color=colors.HexColor("#336B87"))
bp("<b>Hepatocytes (primary target):</b> ↑ glycogenolysis (activates glycogen phosphorylase); ↑ gluconeogenesis (from lactate, pyruvate, alanine, via transamination); ↑ urea cycle enzymes")
bp("<b>Adipose tissue:</b> ↑ lipolysis, ↑ ketogenesis")
sub2_header("SOMATOSTATIN")
bp("Two active forms: 14 AA and 28 AA (alternative cleavage of preproprotein)")
bp("Sources: pancreatic δ-cells, hypothalamic periventricular neurons, GI tract (stomach, intestine)")
bp("Actions: inhibitory hormone — ↓ nutrient utilization, ↓ GH release, ↓ pancreatic hormones, ↓ gastric acid, ↓ intestinal motility, ↓ GI hormones")
sub2_header("Paracrine Signaling of Pancreatic Hormones")
bp("Insulin → inhibits glucagon from α-cells (preserve stored nutrients)")
bp("Glucagon → stimulates insulin and SS from β- and δ-cells (facilitate utilization of new nutrients)")
bp("Somatostatin → inhibits both insulin and glucagon (minimize metabolism)")
sub2_header("Blood Glucose Diagnostic Values (OGTT)")
two_col_table(["Category", "Fasting (mmol/L)", "2-h post-OGTT (mmol/L)", "Clinical Implication"], [
["Normal", "≤ 6.0", "< 7.8", "No excess vascular risk"],
["Prediabetes (IFG/IGT)", "6.1–6.9", "7.8–11.0", "Excess macrovascular risk"],
["Diabetes Mellitus", "≥ 7.0", "≥ 11.1", "Excess macro- & microvascular risk"],
], col_widths=["3*cm", "3.5*cm", "3.5*cm", "6*cm"])
story.append(PageBreak())
# 8. Thyroid Hormones
section_header("8. THYROID HORMONES")
sub2_header("General Characteristics")
bp("Derivatives of tyrosine covalently bound to iodine")
bp("Principal hormones: <b>T4</b> (thyroxine, L-3,5,3',5'-tetraiodothyronine) and <b>T3</b> (triiodothyronine, L-3,5,3'-triiodothyronine)")
bp("Poorly water-soluble; >99% bound to carrier proteins in blood")
two_col_table(["Carrier Protein", "% Carried"], [
["TBG (thyroxine-binding globulin)", "~70%"],
["Transthyretin (TTR/TBPA)", "10–15%"],
["Albumin", "15–20%"],
["Free T4 (fT4)", "0.03%"],
["Free T3 (fT3)", "0.3%"],
])
note("Only free hormones are released from carriers for uptake by target cells.")
sub2_header("Biosynthesis (Steps I–VIII)")
bp("I. Na⁺/I⁻ symporter transports 2 Na⁺ + I⁻ across basal membrane of follicular cells")
bp("II. I⁻ moved across apical membrane into follicular colloid")
bp("III. Thyroperoxidase oxidises 2 I⁻ → I₂")
bp("IV. Thyroperoxidase iodinates tyrosyl residues of thyroglobulin (in colloid). Thyroglobulin synthesized in ER and secreted into colloid.")
bp("V. TSH stimulates endocytosis of colloid")
bp("VI. Endocytosed vesicles fuse with lysosomes")
bp("VII. Lysosomal enzymes cleave T4 from iodinated thyroglobulin")
bp("VIII. Vesicles exocytosed → thyroid hormones released")
sub2_header("Mechanism of Action")
bp("T3 binds receptor with ~10× higher affinity than T4")
bp("T4 → T3 conversion by 5'-monodeiodinases in peripheral tissues")
bp("Receptors: nuclear, DNA-binding proteins (transcription factors) — belong to nuclear hormone receptor superfamily")
bp("Three receptor domains: N-terminal transactivation domain; DNA-binding domain (binds HREs); C-terminal ligand-binding & dimerisation domain")
two_col_table(["Receptor Type", "Primary Location"], [
["α1", "Skeletal and cardiac muscle"],
["α2", "Brain and testis"],
["β1", "Liver, kidney, brain"],
["β2", "Anterior pituitary, hypothalamus, cochlea"],
])
sub2_header("Physiological Effects of Thyroid Hormones")
bp("<b>Metabolism:</b> ↑ basal metabolic rate; ↑ O₂ consumption; ↑ ATP hydrolysis → ↑ heat production")
bp("<b>Carbohydrate metabolism:</b> ↑ insulin-dependent glucose entry; ↑ gluconeogenesis; ↑ glycogenolysis")
bp("<b>Lipid metabolism:</b> ↑ fat mobilisation → ↑ plasma FFAs")
bp("<b>Protein metabolism:</b> ↑ metabolism of proteins and carbohydrates")
bp("<b>Cardiovascular:</b> ↑ heart rate, ↑ cardiac contractility, ↑ cardiac output, vasodilatation")
bp("<b>CNS:</b> ↓ TH → mental sluggishness; ↑ TH → anxiety & nervousness")
bp("<b>Growth:</b> Essential for normal growth in children")
bp("<b>Reproduction:</b> Hypothyroidism associated with infertility")
bp("<b>Potentiates catecholamines:</b> ↑ sympathetic activity; ↑ β-adrenergic receptor expression")
sub2_header("Genes Regulated by T3")
two_col_table(["Positively regulated (↑)", "Negatively regulated (↓)"], [
["Fatty acid synthetase", "Epidermal growth factor receptor"],
["Malic enzyme", "Myosin heavy chain β"],
["PEPCK", "Prolactin"],
["Growth hormone", "TSH"],
["Myosin heavy chain α", "TRH"],
["Uncoupling protein", "Type II 5'-deiodinase"],
])
clinical_box("Hypothyroidism", [
"Iodine deficiency → ↓ T3/T4 → ↑ TSH → thyroid hyperplasia (GOITER)",
"Hashimoto's thyroiditis (autoimmune destruction)",
"Cretinism (congenital): ↑ birth weight, large head, mental retardation, sluggishness, goiter — PERMANENT if untreated",
"Myxedema (severe adult hypothyroidism)",
])
clinical_box("Hyperthyroidism (Graves-Basedow Disease)", [
"Autoantibodies bind & activate TSH receptor → continuous ↑ T3/T4",
"Signs: nervousness, insomnia, ↑ heart rate, exophthalmos (eye disease), weight loss, anxiety",
"Primary in patients 20–40 years old",
])
story.append(PageBreak())
# 9. PTH & Calcitonin
section_header("9. PARATHYROID HORMONE (PTH) & CALCITONIN")
sub2_header("PTH")
bp("Produced by parathyroid glands; activated by 2 partial proteolysis events")
bp("Secretion regulated by blood ionized [Ca²⁺] via <b>CaSR (calcium-sensing receptor)</b>")
bp("<b>CaSR:</b> ↑ [Ca²⁺] → activates CaSR → inhibits PTH synthesis/secretion")
bp("Vitamin D deficiency → stimulates PTH synthesis; Vitamin D binding → ↓ PTH gene transcription")
sub2_header("PTH Mechanism of Action")
bp("Binds <b>PTHR1</b> (class II GPCR) on bone and kidney")
bp("Gαs → ↑ adenylyl cyclase → ↑ cAMP → ↑ PKA → phosphorylates CREB (regulates CRE-dependent genes)")
bp("Gαq → ↑ Phospholipase C signaling")
bp("Gα12/Gα13 → ↑ Phospholipase D")
sub2_header("PTH Target Tissue Effects")
two_col_table(["Target", "Effect"], [
["Bone", "↑ RANKL expression → ↑ osteoclast differentiation → bone resorption → Ca²⁺ & Pi released. PTH can also be anabolic (depends on context)."],
["Kidney", "↑ Ca²⁺ reabsorption in thick ascending loop (PTHR1 activates Na/K/Cl cotransporter); ↑ stimulates production of active Vit D (1,25-OH₂ D3) in kidney"],
["Intestine (indirect)", "PTH → ↑ active Vit D → ↑ CaBP synthesis → ↑ Ca²⁺ absorption from food"],
])
sub2_header("Calcitonin")
bp("32 AA linear polypeptide; produced by parafollicular cells (C-cells) of thyroid gland")
bp("Secreted in response to hypercalcaemia")
bp("Effects: ↓ renal tubular Ca²⁺ reabsorption → ↑ Ca²⁺ excretion; inhibits bone resorption")
bp("Has minimal influence on blood calcium in humans")
note("PTH and calcitonin have opposite effects on blood calcium. PTH ↑ Ca²⁺; Calcitonin ↓ Ca²⁺.")
two_col_table(["Condition", "Signs/Lab Findings"], [
["Hyperparathyroidism", "Hypercalcaemia (Ca 12–14 mg/dL); bone/joint pain, kidney stones, fatigue, anorexia, pruritus"],
["Hypoparathyroidism", "Hypocalcaemia; paresthesias, tetany, seizures, cataracts, prolonged QT, bronchospasm"],
])
story.append(PageBreak())
# 10. Adrenal Hormones
section_header("10. ADRENAL HORMONES")
sub2_header("Overview — Adrenal Cortex Zones")
two_col_table(["Zone", "Hormone(s)", "Class"], [
["Zona glomerulosa", "Aldosterone", "Mineralocorticoid"],
["Zona fasciculata", "Cortisol, Corticosterone", "Glucocorticoid"],
["Zona reticularis", "Androstenedione (DHEA)", "Androgen"],
])
sub2_header("GLUCOCORTICOIDS (Cortisol)")
sub_header("Regulation", color=colors.HexColor("#336B87"))
p("CRH (hypothalamus) → ACTH (anterior pituitary) → Cortisol (zona fasciculata). Negative feedback by cortisol at both levels.")
sub_header("Metabolic Functions", color=colors.HexColor("#336B87"))
bp("↓ glucose uptake/utilization → <b>↑ blood glucose (anti-insulin)</b>")
bp("↑ skeletal muscle protein breakdown + ↑ adipose lipolysis → substrates for gluconeogenesis")
bp("↑ synthesis of gluconeogenic enzymes")
bp("↑ urinary nitrogen excretion; ↑ urea cycle enzymes")
sub_header("Anti-inflammatory / Immunosuppressive", color=colors.HexColor("#336B87"))
bp("<b>Inhibits phospholipase A2</b> → ↓ arachidonic acid release from membrane phospholipids → ↓ eicosanoid (prostaglandin, leukotriene) production")
bp("Broad immunosuppressive effects — basis of glucocorticoid therapy")
sub2_header("MINERALOCORTICOIDS (Aldosterone)")
bp("Major mineralocorticoid in circulation")
bp("<b>Target tissues:</b> kidney (connecting tubule, cortical collecting duct), colon, sweat glands")
p("<b>Actions:</b>")
bp("↑ Na⁺ reabsorption → ↑ extracellular volume → ↑ vascular pressure")
bp("↑ K⁺ efflux to tubular lumen")
bp("↑ H⁺ excretion → alkalizes ECF")
bp("↑ Cl⁻ and water retention")
p("<b>Mechanism:</b> Induces gene expression of Na⁺/K⁺-ATPase, epithelial sodium channel (ENaC), Na⁺-Cl⁻ cotransporter")
p("<b>Regulation of secretion:</b> ACTH (mild stimulation); <b>renin-angiotensin-aldosterone system (RAAS)</b>; ↓ by atrial natriuretic peptide (ANP)")
clinical_box("Addison Disease (Primary Adrenal Insufficiency)", [
"Cause: Most often autoimmune destruction of adrenal cortex (idiopathic atrophy)",
"Lab: ↓ cortisol and aldosterone; ↑ ACTH (not suppressed by dexamethasone); ↓ Na⁺, Cl⁻, HCO₃⁻; ↑ K⁺; hypoglycaemia",
"Clinical: Insidious asthenia (fatigue, weakness), cutaneous/mucosal pigmentation, nausea/vomiting, weight loss, orthostatic hypotension",
"Hallmark triad (>97%): asthenia + weight loss + pigmentation",
])
clinical_box("Cushing Syndrome / Disease", [
"Syndrome: Adrenal tumour → ↑ cortisol. Disease: Pituitary tumour → ↑ ACTH → ↑ cortisol",
"Screening: dexamethasone suppression test (failure to suppress ACTH/cortisol is diagnostic)",
"Clinical: Central truncal obesity (95%), moon facies, buffalo hump, thin extremities (spider appearance), hypertension, hypercholesterolaemia",
])
clinical_box("Conn Syndrome (Primary Hyperaldosteronism)", [
"Cause: Adrenal adenoma producing aldosterone (or bilateral adrenal hyperplasia, cancer, familial)",
"Biochemistry: ↑ Na⁺ & fluid volume; ↓ K⁺; ↑ H⁺ secretion → alkaline urine",
"Clinical: Hypertension, headaches, muscle weakness/spasms, excessive urination, fatigue, confusion",
])
story.append(PageBreak())
sub2_header("CATECHOLAMINES (Dopamine, Norepinephrine, Epinephrine)")
bp("Synthesized in adrenal medullary chromaffin cells from tyrosine")
bp("Rate-limiting step is the first reaction in biosynthesis")
bp("Stored in granulated vesicles with ATP and chromogranin A")
bp("Exert effects as neurotransmitters (CNS/PNS) or hormones (periphery)")
sub_header("Adrenergic Receptors", color=colors.HexColor("#336B87"))
two_col_table(["Receptor", "G-protein", "Mechanism", "Key Effects"], [
["α1 (α1A, α1B, α1D)", "Gq", "↑ PLCβ → ↑ IP3 + DAG → ↑ [Ca²⁺]", "Glycogenolysis/gluconeogenesis; Na⁺ secretion/reabsorption"],
["α2 (α2A, α2B, α2C)", "Gi", "↓ adenylate cyclase → ↓ cAMP → ↓ PKA", "↓ insulin release; ↑ glucagon; ↓ lipolysis"],
["β1", "Gs", "↑ adenylate cyclase → ↑ cAMP → ↑ PKA", "↑ renin; ↑ lipolysis"],
["β2", "Gs (→ Gi after PKA phosphorylation)", "↑ cAMP", "↑ lipolysis; glycogenolysis; ↑ insulin secretion; ↑ renin"],
["β3", "Gs", "↑ cAMP", "↑ lipolysis; ↑ thermogenesis in brown fat"],
], col_widths=["2.5*cm", "2*cm", "4*cm", "7.5*cm"])
clinical_box("Pheochromocytoma", [
"Tumours of adrenal medullary chromaffin cells → ↑ catecholamine secretion",
"Biochemistry: Hyperglycaemia (catecholamines → ↑ lipolysis → ↑ FFAs → ↓ glucose uptake by muscle); glycogenolysis; gluconeogenesis",
"Clinical: Resistant hypertension (can cause hypertensive emergency), cardiac cell damage from massive catecholamine release",
"Diagnosis: Measure catecholamines and metanephrines in plasma or 24-h urine collection",
])
story.append(PageBreak())
# 11. Sex Hormones
section_header("11. SEX HORMONES")
sub2_header("Overview")
bp("Most important steroids: <b>testosterone</b> (testes/ovaries) and <b>estradiol</b> (ovaries)")
bp("Tightly regulated by negative feedback loops: sex hormones → ↓ GnRH (hypothalamus) → ↓ FSH/LH (pituitary)")
bp("↓ sex hormones → ↓ feedback inhibition → ↑ GnRH → ↑ FSH/LH → binds gonadal tissue → ↑ P450scc → sex hormone synthesis via cAMP/PKA")
sub2_header("Male Sex Hormones (Androgens)")
bp("LH → Leydig cells → ↑ testosterone → transported to Sertoli cells by androgen-binding protein (ABP)")
bp("In Sertoli cells: testosterone → <b>DHT (dihydrotestosterone)</b> by steroid 5α-reductase")
bp("DHT is most potent androgen: 10× activity of testosterone")
bp("Transported in plasma by gonadal-steroid binding globulin (GBG)")
bp("FSH → Sertoli cells → ↑ ABP synthesis; stimulates spermatogenesis via ↑ protein synthesis")
sub_header("Biochemical Functions of Androgens", color=colors.HexColor("#336B87"))
bp("Protein metabolism: ↑ transcription (mRNA synthesis), translation, musculoskeletal growth")
bp("Carbohydrate metabolism: ↑ glycolysis, D-glucose → D-fructose conversion in seminal vesicles")
bp("Lipid: ↑ fatty acid production, ↑ Krebs cycle activity")
bp("Mineral/bone: mineral deposition & bone growth; Na⁺, Cl⁻ & water reabsorption in kidney")
sub2_header("Female Sex Hormones (Estrogens, Progesterone)")
bp("LH → thecal cells → androstenedione & testosterone (via cAMP/PKA)")
bp("<b>Aromatase</b> (ER enzyme) converts androstenedione/testosterone → estrogens")
bp("FSH stimulates aromatase in granulosa cells")
bp("As granulosa cells mature → ↑ LH receptors → ↑ LH responsiveness → ↑ estrogen")
bp("Thecal estrogens → circulation (via GBG). Granulosa estrogens → follicular fluid")
story.append(PageBreak())
# 12. Clinical Summary
section_header("12. CLINICAL DISORDERS — QUICK REFERENCE")
two_col_table(["Disorder", "Key Features"], [
["Diabetes Mellitus", "Fasting glucose ≥ 7.0 mmol/L OR 2-h OGTT ≥ 11.1 mmol/L"],
["Diabetes Insipidus", "ADH deficiency → polyuria + polydipsia; dilute urine"],
["Cretinism (congenital hypothyroidism)", "Mental retardation, growth retardation, goiter — permanent if untreated"],
["Graves-Basedow disease", "TSH-receptor autoantibodies → ↑ T3/T4; nervousness, tachycardia, exophthalmos"],
["Myxedema", "Severe adult hypothyroidism"],
["Hyperparathyroidism", "↑ PTH → hypercalcaemia; bone pain, renal stones"],
["Hypoparathyroidism", "↓ PTH → hypocalcaemia; tetany, seizures"],
["Addison disease", "Adrenal insufficiency: ↓ cortisol/aldosterone, ↑ ACTH; pigmentation, weakness, hypotension"],
["Cushing syndrome/disease", "↑ Cortisol (Syndrome: adrenal tumour; Disease: pituitary tumour); truncal obesity, moon face"],
["Conn syndrome", "↑ Aldosterone; hypertension, ↓ K⁺"],
["Pheochromocytoma", "↑ Catecholamines from adrenal medulla; resistant hypertension, hyperglycaemia"],
])
# ============================================================
# PART 2: NUCLEIC ACIDS
# ============================================================
def part2_nucleic_acids():
story.append(PageBreak())
# Part header
t = Table([[Paragraph(
"<font color='white'><b>PART 2</b></font>",
ParagraphStyle("p2a", fontSize=18, leading=24, fontName="Helvetica-Bold",
alignment=TA_CENTER)),
Paragraph(
"<font color='white'><b>NUCLEIC ACIDS<br/>Replication · Transcription · Translation</b></font>",
ParagraphStyle("p2b", fontSize=24, leading=32, fontName="Helvetica-Bold",
alignment=TA_CENTER))
]], colWidths=["25%", "75%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), GREEN),
("ROWPADDING", (0,0), (-1,-1), 20),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(t)
story.append(Spacer(1, 0.5*cm))
toc_items = [
"1. Genetic Information Flow (Central Dogma)",
"2. DNA Replication — Prokaryotic",
"3. DNA Replication — Eukaryotic & Telomerase",
"4. DNA Repair Mechanisms",
"5. Transcription",
"6. Translation (Protein Biosynthesis)",
"7. Inhibitors of Protein Synthesis",
"8. Protein Polymorphism",
]
info_box("Chapter Contents", toc_items, bg=LIGHT_GREEN, border=GREEN)
story.append(PageBreak())
# 1. Central Dogma
section_header("1. GENETIC INFORMATION FLOW (CENTRAL DOGMA)", color=GREEN)
two_col_table(["Process", "Description"], [
["1. Replication", "DNA → DNA (DNA biosynthesis)"],
["2. Transcription", "DNA → RNA (RNA biosynthesis)"],
["3. Reverse Transcription", "RNA → DNA (e.g., retroviruses)"],
["4. RNA Replication", "RNA → RNA (some viruses)"],
["5. Translation", "RNA → Protein (protein biosynthesis)"],
])
story.append(PageBreak())
# 2. Prokaryotic Replication
section_header("2. DNA REPLICATION — PROKARYOTIC CELLS", color=GREEN)
sub2_header("Key Characteristics")
bp("Semiconservative (proven by Meselson-Stahl experiment, 1958, using ¹⁵N/¹⁴N)")
bp("Location: cytoplasm (prokaryotes lack nucleus; DNA in nucleoid)")
bp("Circular chromosome; single origin (ORI) per replicon")
bp("Substrates: dNTPs (dATP, dGTP, dCTP, dTTP) for DNA; rNTPs for primer synthesis")
sub2_header("Enzymes and Their Functions")
two_col_table(["Enzyme", "Function"], [
["DNA Pol III", "Main polymerase; adds nucleotides 5′→3′; very fast (9,000 nt/min at 37°C)"],
["DNA Pol I", "5′→3′ exonuclease: removes RNA primer; fills gaps (nick translation)"],
["DNA Pol II", "DNA repair"],
["Helicase (DnaB)", "Unwinds DNA by breaking hydrogen bonds between bases"],
["Primase (DnaG)", "Synthesizes RNA primers (ribonucleotides)"],
["Topoisomerase / Gyrase", "Relieves supercoiling/torsional stress ahead of replication fork"],
["SSB proteins", "Stabilize single-stranded DNA at replication fork"],
["DNA Ligase", "Seals nicks between Okazaki fragments (requires NAD⁺ or ATP)"],
])
sub2_header("Stage 1 — INITIATION")
bp("ORI (oriC in E. coli) contains: 9-mer (dnaA site: 5'-TTATCCACA-3') and 13-mer (dnaB site; mostly A/T bp → easier melting)")
bp("<b>DnaA</b>: recognizes & binds 9-mer repeats in oriC → melts three 13-mer segments (open complex)")
bp("<b>DnaA</b> guides <b>DnaB-DnaC</b> complex → prepriming complex (DnaC released)")
bp("DnaB (helicase) + gyrase + SSB → priming complex; helicase unwinds in both directions")
bp("RNA polymerase forms primer for <b>leading strand</b>; primase (primosome) forms primer for <b>lagging strand</b>")
bp("DNA Pol III binds → forms <b>replisome</b>")
sub2_header("Stage 2 — ELONGATION")
sub_header("Leading Strand", color=colors.HexColor("#336B87"))
bp("Synthesized continuously in 5′→3′ direction on the 3′→5′ template strand")
bp("Single RNA primer at ORI; extended continuously by DNA Pol III")
sub_header("Lagging Strand", color=colors.HexColor("#336B87"))
bp("Synthesized discontinuously as <b>Okazaki fragments</b> (1,000–2,000 nt each)")
bp("Each fragment preceded by RNA primer (by primosome)")
bp("<b>Step 1:</b> Primosome synthesizes RNA primer")
bp("<b>Step 2:</b> DNA Pol III adds 1,000–2,000 nt → Okazaki fragment")
bp("<b>Step 3:</b> DNA Pol I removes RNA primer with 5′→3′ exonuclease and fills gap (nick translation)")
bp("<b>Step 4:</b> DNA Ligase seals the nick (3′-OH + 5′-phosphate)")
sub2_header("Stage 3 — TERMINATION")
bp("Two replication forks meet on opposite side of circular chromosome at termination sites (Ter A, B, C, D, E, F)")
bp("Ter A: stops counter-clockwise fork; Ter C: stops clockwise fork")
bp("<b>TUS protein</b> (Termination Utilizing Substance) binds Ter site → blocks DnaB helicase activity → replication stops")
bp("Post-completion: two daughter DNA molecules are catenated (knotted) → resolved by <b>topoisomerase</b>")
sub2_header("Regulation of Prokaryotic Replication")
bp("Initiation is the regulated step")
bp("DnaA protein level regulates initiation frequency")
bp("oriC <b>methylation status</b> regulates timing (SeqA protein sequesters hemimethylated oriC)")
story.append(PageBreak())
# 3. Eukaryotic & Telomerase
section_header("3. DNA REPLICATION — EUKARYOTIC & TELOMERASE", color=GREEN)
sub2_header("Prokaryotic vs Eukaryotic DNA Replication")
two_col_table(["Feature", "Prokaryote", "Eukaryote"], [
["Chromosomes", "Circular", "Linear"],
["Origins per chromosome", "1 (oriC)", "Many (thousands)"],
["Replicons", "1", "Multiple"],
["Replication timing", "Continuous", "Only S phase of cell cycle"],
["Histones", "No", "Yes (chromatin remodeling required)"],
["Primer synthesis", "Primase (DnaG)", "DNA primase + Pol α"],
["Main polymerase", "DNA Pol III", "DNA Pol δ (lagging), DNA Pol ε (leading)"],
["Okazaki fragment size", "1,000–2,000 nt", "100–200 nt"],
["Telomeres", "N/A", "Repaired by telomerase"],
], col_widths=["4.5*cm", "5*cm", "6.5*cm"])
sub2_header("Telomerase")
bp("Problem: linear chromosomes → RNA primer at 5′ end of lagging strand cannot be filled after primer removal → chromosomes shorten each division")
bp("<b>Telomerase</b> = ribonucleoprotein (RNP) with its own RNA template = a <b>reverse transcriptase</b>")
bp("Human telomere repeat: <b>AAUCCC</b> (TTAGGG on DNA)")
bp("Mechanism: (1) Telomerase RNA base-pairs with 3′ end of G-rich telomere strand; (2) Reverse transcription extends 3′ end; (3) Telomerase translocates; (4) Primase synthesizes new RNA primer on extended template; (5) DNA Pol fills gap; (6) Ligase seals nick")
bp("Nobel Prize 2009: Elizabeth Blackburn, Carol Greider, Jack Szostak")
note("Telomerase is highly active in germ cells & cancer cells; low/absent in most somatic cells → cellular aging.")
story.append(PageBreak())
# 4. DNA Repair
section_header("4. DNA REPAIR MECHANISMS", color=GREEN)
two_col_table(["Mechanism", "Target", "Description"], [
["Proofreading", "Replication errors", "DNA Pol checks each added base; removes & replaces mismatched nucleotide using 3′→5′ exonuclease"],
["Mismatch Repair (MMR)", "Post-replication mismatches, small indels", "Protein complex recognises mismatch → second complex cuts DNA → enzymes excise incorrect region → DNA Pol fills → Ligase seals"],
["Base Excision Repair (BER)", "Single damaged base (e.g., deamination: C→U)", "Specific glycosylase removes damaged base → AP endonuclease → DNA Pol fills → Ligase seals"],
["Nucleotide Excision Repair (NER)", "Bulky DNA distortions (thymine dimers)", "Enzyme complex removes a patch of ~12–30 nt around damage → DNA Pol fills → Ligase seals"],
["Direct Reversal", "Some chemical modifications", "Enzymes directly 'undo' the damage"],
["Double-Strand Break Repair", "DSBs from radiation, etc.", "Non-homologous end joining (NHEJ) or Homologous recombination (HR)"],
], col_widths=["3.5*cm", "3.5*cm", "9*cm"])
sub2_header("Thymine Dimers")
bp("UV radiation causes adjacent thymine bases to form a covalent thymine dimer (T=T)")
bp("Distorts DNA helix → repaired by <b>Nucleotide Excision Repair</b>")
clinical_box("Xeroderma Pigmentosum (XP)", [
"Autosomal recessive; mutations in ≥9 NER genes",
"Extreme UV sensitivity → skin cancers, eye damage; onset by age 2",
"Management: total UV protection (clothing, sunscreen, dark glasses), retinoid creams, early treatment of skin cancers",
])
story.append(PageBreak())
# 5. Transcription
section_header("5. TRANSCRIPTION", color=GREEN)
sub2_header("General Features")
bp("Template: antisense strand of DNA (transcription unit); synthesises RNA in 5′→3′ direction (reads template 3′→5′)")
bp("Substrates: ATP, GTP, CTP, UTP (ribonucleoside triphosphates)")
bp("Rate: ~50–100 bases/sec (much slower than replication at ~1,000 bases/sec)")
bp("Fidelity: lower than DNA replication (aberrant RNA can be degraded and remade)")
bp("Unlike replication: does NOT require a primer; RNA Pol can initiate de novo")
bp("Multiple RNA Pol molecules per cell; many initiation sites")
sub2_header("Prokaryotic RNA Polymerase")
two_col_table(["Subunit", "Role"], [
["α (×2)", "Required for core enzyme assembly"],
["β", "Active site — catalyzes polymerization (RNA synthesis)"],
["β′", "Recognizes DNA template; opens double strand"],
["ω", "Stabilizes core enzyme structure"],
["σ (sigma)", "Regulatory; enables promoter binding; ejected after ~10 bp of RNA synthesized; different σ factors recognize different promoters"],
])
sub2_header("Transcription Unit Orientation")
bp("+1 = initiation site (first nucleotide transcribed)")
bp("Upstream = negative numbers (before +1)")
bp("Downstream = positive numbers (after +1)")
sub2_header("Stage 1 — INITIATION (Prokaryotic)")
bp("RNA Pol holoenzyme (core + σ) binds promoter → <b>closed complex</b>")
bp("Promoter consensus sequences: <b>–10 box</b> (TATAAT / Pribnow box) and <b>–35 box</b>")
bp("σ factor melts 10–14 bp (from –11 to +3) → <b>open complex</b>")
bp("RNA Pol initiates synthesis; after >10 nt of RNA → σ factor ejected → <b>elongation complex</b>")
sub2_header("Stage 2 — ELONGATION")
bp("Core enzyme moves along template; σ factor ejected")
bp("RNA exits from RNA exit channel")
bp("Proofreading: polymerase backtrack by 1+ nt → hydrolytic editing (removes error) → resynthesizes correct sequence")
sub2_header("Stage 3 — TERMINATION")
two_col_table(["Type", "Mechanism"], [
["Rho-independent (intrinsic)", "Terminator DNA contains inverted repeat → nascent RNA forms hairpin structure + run of U:A base pairs → RNA separates from template (weak A=U bonds)"],
["Rho-dependent", "Rho (ρ) protein (ring-shaped ss-binding ATPase) binds RNA as it exits polymerase → hydrolyzes RNA-polymerase linkage. Binds RNA only after translation has completed (bacteria: transcription & translation simultaneous)"],
])
sub2_header("Transcription Regulation — Lac Operon")
p("An <b>operon</b> = group of genes transcribed together (found only in prokaryotes).")
bp("<b>Lac operon:</b> inducible; controls lactose metabolism genes (lacZ, lacY, lacA — polycistronic mRNA)")
sub_header("Control Logic", color=colors.HexColor("#336B87"))
two_col_table(["Glucose", "Lactose", "Expression", "Mechanism"], [
["+", "−", "None", "LacI repressor binds operator"],
["+", "+", "Low", "Inducer removes repressor BUT low cAMP → no CRP·cAMP activation"],
["−", "+", "HIGH", "No repressor (inducer present) + high cAMP → CRP·cAMP binds → strong transcription"],
], col_widths=["2*cm", "2*cm", "2.5*cm", "9.5*cm"])
bp("<b>CRP·cAMP (CAP·cAMP):</b> when glucose is low → ↑ cAMP → cAMP binds CRP → complex bends DNA → allows RNA Pol to contact promoter at two points → strong transcription")
story.append(PageBreak())
sub2_header("Eukaryotic Transcription — Key Differences")
bp("Three RNA polymerases: <b>Pol I</b> (rRNA), <b>Pol II</b> (mRNA, snRNA), <b>Pol III</b> (tRNA, 5S rRNA)")
bp("Requires general transcription factors (TFIIA, B, D, E, F, H) to assemble at promoter")
bp("Transcription occurs in nucleus; translation in cytoplasm (unlike bacteria where they occur simultaneously)")
bp("mRNA requires posttranscriptional processing before translation:")
sub2_header("Posttranscriptional Modifications (Eukaryotes)")
two_col_table(["Modification", "Description", "Function"], [
["5′ 7-methylguanosine cap", "Added to 5′ end", "Protects mRNA from degradation; required for ribosome binding"],
["3′ poly(A) tail", "~200 A residues added", "Protects from degradation; aids nuclear export; stimulates translation"],
["RNA splicing", "Introns removed; exons joined", "Removes non-coding sequences; alternative splicing → protein diversity"],
])
sub2_header("RNA Classes")
two_col_table(["RNA Type", "Function"], [
["mRNA (messenger RNA)", "Template for protein synthesis (translation)"],
["tRNA (transfer RNA)", "Carries specific amino acids; recognizes mRNA codons via anticodon"],
["rRNA (ribosomal RNA)", "Structural/functional component of ribosomes; 28S rRNA has peptidyl transferase activity"],
["snRNA (small nuclear RNA)", "Involved in RNA splicing (part of spliceosome)"],
["miRNA (microRNA)", "Modulates gene expression by targeting mRNA"],
])
story.append(PageBreak())
# 6. Translation
section_header("6. TRANSLATION (PROTEIN BIOSYNTHESIS)", color=GREEN)
sub2_header("Components")
bp("<b>Template:</b> mRNA molecule")
bp("<b>Substrates:</b> activated amino acids (aminoacyl-tRNAs)")
bp("<b>Enzymes:</b> aminoacyl-tRNA synthetases; peptidyl transferase; proteins: IF (initiation factors), EF (elongation factors), RF (release factors)")
sub2_header("Ribosomes")
two_col_table(["Component", "Prokaryote", "Eukaryote"], [
["Whole ribosome", "70S", "80S"],
["Large subunit", "50S", "60S"],
["Small subunit", "30S", "40S"],
["rRNAs (large)", "23S + 5S", "28S + 5.8S + 5S"],
["rRNA (small)", "16S", "18S"],
])
sub2_header("The Genetic Code — Properties")
two_col_table(["Property", "Description"], [
["Triplet", "3 nucleotides = 1 codon; 4³ = 64 possible codons → sufficient for 20 amino acids + stop signals"],
["Degenerate", "Most amino acids have more than one codon (synonymous codons); AUG and UGG have only 1 each"],
["Non-overlapping", "Each nucleotide used in only one codon"],
["Commaless", "No nucleotide separator between codons; code is continuous"],
["Unambiguous", "Each codon always specifies the same amino acid"],
["Universal", "Same code in virtually all organisms (prokaryotes and eukaryotes)"],
["Co-linear", "Sequence of codons in mRNA corresponds to sequence of amino acids in protein"],
["Start codon", "AUG (methionine; N-formyl-methionine in prokaryotes)"],
["Stop codons", "UAA, UAG, UGA (not recognized by any tRNA)"],
])
sub2_header("Stage 0 — Activation of Amino Acids (Aminoacylation)")
p("Enzyme: <b>aminoacyl-tRNA synthetases</b> (one per amino acid; class I and II)")
bp("<b>Step 1:</b> Amino acid + ATP → aminoacyl-AMP + PPi (enzyme-bound intermediate)")
bp("<b>Step 2:</b> Aminoacyl group → transferred to 2′ (Class I, then transesterified to 3′) or 3′-OH (Class II) of tRNA")
bp("Energy: hydrolysis of 2 phosphate groups (irreversible, ΔG° = –29 kJ/mol)")
bp("Error rate: ~1 mistake per 10⁴ AAs (editing by pre-transfer and post-transfer mechanisms)")
bp("Mutations in AARS genes → diseases: Charcot-Marie-Tooth, LBSL, progressive myoclonus epilepsy")
sub2_header("tRNA Structure")
bp("73–93 nucleotides; single-stranded")
bp("2D: cloverleaf structure (4 arms + extra arm in some)")
bp("3D: twisted L-shape")
bp("Amino acid arm: carries amino acid at 3′-CCA-OH end")
bp("Anticodon arm: contains anticodon that base-pairs with mRNA codon")
bp("At least 1 tRNA per amino acid; minimum 32 tRNAs needed to read all codons")
story.append(PageBreak())
sub2_header("Stage 1 — INITIATION (Prokaryotic)")
bp("Requires: 30S + 50S subunits, mRNA, fMet-tRNA^fMet, IF-1 + IF-2 + IF-3, GTP, Mg²⁺")
bp("<b>Step 1:</b> 30S + IF-1, IF-2, IF-3 form 30S pre-initiation complex")
bp("<b>Step 2:</b> mRNA binds; <b>Shine-Dalgarno (SD) sequence</b> on mRNA base-pairs with anti-SD sequence at 3′ end of 16S rRNA → positions AUG start codon at P site")
bp("<b>Step 3:</b> fMet-tRNA^fMet binds to AUG at P site")
bp("<b>Step 4:</b> 50S subunit joins → GTP hydrolysis → IFs released → functional 70S initiation complex")
bp("In eukaryotes: Methionine (not fMet); ribosome scans from 5′ cap in 5′→3′ direction to find first AUG (Kozak sequence context)")
sub2_header("Stage 2 — ELONGATION")
bp("Requires: 70S initiation complex, aminoacyl-tRNAs, EF-Tu·GTP (prokaryote) / EF1α·GTP (eukaryote), EF-G/EF2·GTP, GTP")
p("<b>Three repeating steps per amino acid added:</b>")
bp("<b>Step 1 — Aminoacyl-tRNA entry (A site):</b> EF-Tu·GTP brings aa-tRNA to A site; codon-anticodon recognition; GTP hydrolysis → EF-Tu-GDP departs")
bp("<b>Step 2 — Peptide bond formation:</b> Peptidyl transferase (catalytic activity of 23S/28S rRNA — a <b>ribozyme</b>) transfers growing peptide from P-site tRNA to aminoacyl group of A-site tRNA → peptidyl-tRNA now at A site; deacylated tRNA at P site")
bp("<b>Step 3 — Translocation:</b> EF-G·GTP (prokaryote) / EF2·GTP (eukaryote) → ribosome moves 1 codon (3′ direction); peptidyl-tRNA moves to P site; empty tRNA moves to E site and exits; 2 GTP hydrolysed per amino acid added")
bp("Error rate: ~1/10⁴ amino acids")
sub2_header("Stage 3 — TERMINATION")
two_col_table(["Factor", "Recognizes"], [
["RF1 (prokaryote) / eRF1 (eukaryote)", "UAA or UAG"],
["RF2 (prokaryote)", "UAA or UGA"],
["eRF1 (eukaryote)", "All three stop codons (UAA, UAG, UGA)"],
])
bp("Release factor enters A site → mimics tRNA (shape + charge) → forces peptidyl transferase to add H₂O instead of amino acid → hydrolyses peptide-tRNA bond → polypeptide released")
bp("Ribosome disassembles; subunits recycled for next round of translation")
bp("Eukaryotes: eRF1 + eRF3·GTP complex → GTP hydrolysis by eRF3 → protein release → ABCE1 (ATP hydrolysis) → subunit separation")
sub2_header("Polysomes (Polyribosomes)")
bp("Multiple ribosomes translating a single mRNA simultaneously → increase protein output efficiency")
bp("Prokaryotes: translation begins on mRNA while transcription is still occurring (coupled)")
story.append(PageBreak())
sub2_header("Eukaryotic-Specific Initiation Details")
bp("Three components assembled: (1) 40S + eIF1, eIF1A, eIF3; (2) eIF2·GTP + Met-tRNAi^Met ternary complex; (3) circular mRNA (eIF4 cap complex at 5′ + PABP at 3′ poly-A tail)")
bp("43S pre-initiation complex scans mRNA 5′→3′ until first AUG in Kozak context → 48S initiation complex (eIF2 GTP hydrolysis)")
bp("eIF5B·GTP joins 60S subunit; GTP hydrolysis → 80S complex ready with E, P, A sites; Met-tRNAi^Met in P site")
sub2_header("Posttranslational Modifications (PTMs)")
bp("Occur at amino acid side chains; over 200 types; mediated enzymatically")
bp("Enzymes: kinases (add phosphate), phosphatases (remove phosphate), transferases, ligases, proteases")
bp("Can be reversible (e.g., phosphorylation/dephosphorylation)")
sub_header("PTMs in Disease", color=colors.HexColor("#336B87"))
bp("MTSS1 ubiquitination → breast/prostate cancer")
bp("eNOS phosphorylation (S1177) → insulin resistance in T2DM")
bp("PINK1 T313M mutation → abolished MARK2 phosphorylation → Parkinson's disease")
story.append(PageBreak())
# 7. Inhibitors
section_header("7. INHIBITORS OF PROTEIN SYNTHESIS", color=GREEN)
two_col_table(["Inhibitor", "Spectrum", "Target / Mechanism"], [
["Tetracycline", "Bacteria only", "Blocks binding of aminoacyl-tRNA to A site of ribosome"],
["Streptomycin", "Bacteria only", "Prevents initiation complex → chain-elongating ribosome transition; causes miscoding"],
["Chloramphenicol", "Bacteria only", "Blocks peptidyl transferase reaction on prokaryotic ribosome"],
["Erythromycin", "Bacteria only", "Blocks translocation step"],
["Rifamycin", "Bacteria only", "Binds bacterial RNA Pol → blocks RNA chain initiation (prevents RNA synthesis)"],
["Puromycin", "Bacteria + Eukaryotes", "Structural analog of aminoacyl-tRNA → premature release of nascent polypeptide chain"],
["Actinomycin D", "Bacteria + Eukaryotes", "Intercalates into DNA → blocks RNA Pol movement (blocks transcription)"],
["Cycloheximide", "Eukaryotes only", "Blocks translocation reaction on 80S ribosome"],
["Anisomycin", "Eukaryotes only", "Blocks peptidyl transferase on 80S ribosome"],
["α-Amanitin", "Eukaryotes only", "Binds preferentially to RNA Pol II → blocks mRNA synthesis"],
["Diphtheria Toxin", "Eukaryotes only", "ADP-ribosylates EF-2 (elongation factor) → inhibits translocation; 1 molecule can kill 1 cell; LD ~0.1 µg/kg"],
])
story.append(PageBreak())
# 8. Protein Polymorphism
section_header("8. PROTEIN POLYMORPHISM", color=GREEN)
sub2_header("Definition")
bp("Polymorphism: ≥2 genetic variants (alleles) of a trait; frequency >1% in population. If <1% = mutation.")
bp("Basis in DNA structure; may not be expressed if in non-coding regions (introns)")
bp("Genetic maps can be created using microsatellites (short repetitive sequences) for paternity testing, forensics")
sub2_header("Hemoglobin Polymorphism — Developmental Switch")
two_col_table(["Stage", "Hemoglobin(s)", "Structure"], [
["Embryo", "Hb Gower 1, 2; Hb Portland I, II", "ζ₂ε₂; α₂ε₂; ζ₂γ₂; ζ₂β₂"],
["Fetus", "Hb F", "α₂γ₂"],
["Adult (normal)", "Hb A (>95%)", "α₂β₂"],
["Adult (minor)", "Hb A₂ (1.5–3.5%)", "α₂δ₂"],
["Adult (elevated in disease)", "Hb F (elevated in sickle cell & β-thalassemia)", "α₂γ₂"],
])
bp("Collagen polymorphism: different collagen types with distinct chain compositions (Type I: [α1(I)]₂α2(I); Type IV: basement membranes, etc.)")
sub2_header("Summary: Key Comparisons Table")
two_col_table(["Feature", "Prokaryotic", "Eukaryotic"], [
["Cell type", "No nucleus", "Has nucleus"],
["Chromosome", "Circular, 1 ORI", "Linear, multiple ORIs"],
["Replication timing", "Continuous", "S phase only"],
["DNA Pol (main)", "DNA Pol III", "DNA Pol δ/ε"],
["Okazaki fragments", "1,000–2,000 nt", "100–200 nt"],
["Telomeres", "No", "Yes (telomerase)"],
["RNA Pol types", "1 (4 core + σ)", "3 (Pol I, II, III)"],
["mRNA processing", "None (coupled T+T)", "5′ cap, poly-A, splicing"],
["Start codon / Met", "AUG / fMet", "AUG / Met"],
["Ribosome", "70S (30S + 50S)", "80S (40S + 60S)"],
["Initiation factors", "IF-1, IF-2, IF-3", "Multiple eIFs"],
["Elongation factors", "EF-Tu, EF-Ts, EF-G", "EF1α, EF1βγ, EF2"],
["Release factors", "RF1 (UAA/UAG), RF2 (UAA/UGA)", "eRF1 (all 3 stop), eRF3"],
["Coupled transcription/translation", "Yes", "No"],
], col_widths=["5.5*cm", "5.5*cm", "5*cm"])
# Build the story
add_cover()
part1_hormones()
part2_nucleic_acids()
doc.build(story)
print(f"PDF created: {OUTPUT}")
Generate a quick reference cheat sheet (1–2 pages) for exam day