help me with biochemistry and physiology we have to complete it by 2 weeks i already have some idea about everything its gonna be like a revision

Asking for Preferences

What level is this for? · How would you like to revise? · Which areas do you want to focus on? (pick all that apply)

Here's how we'll structure your 2-week revision. I'll work with you interactively - covering biochemistry and physiology equally across all major topics for MBBS 1st year, mixing concise notes, high-yield bullets, and Q&A.

2-Week Revision Plan

BIOCHEMISTRY

WeekTopics
Week 1 (Days 1-3)Carbohydrate metabolism - glycolysis, TCA, glycogen, gluconeogenesis
Week 1 (Days 4-5)Lipid metabolism - fatty acid oxidation, ketone bodies, cholesterol
Week 1 (Days 6-7)Protein & amino acid metabolism - urea cycle, transamination, special AAs
Week 2 (Days 1-2)Molecular biology - DNA replication, transcription, translation, mutations
Week 2 (Day 3)Vitamins, enzymes & integration of metabolism

PHYSIOLOGY

WeekTopics
Week 1 (Days 1-3)Cardiovascular - cardiac cycle, ECG, BP regulation, heart sounds
Week 1 (Days 4-5)Respiratory - lung volumes, gas exchange, control of breathing
Week 1 (Days 6-7)Renal - GFR, tubular function, acid-base, concentration
Week 2 (Days 1-2)GI - motility, secretion, digestion & absorption
Week 2 (Days 3-4)Endocrine - pituitary, thyroid, adrenal, pancreas, gonads
Week 2 (Day 5)Nerve & muscle - resting potential, action potential, NMJ

How This Works

Each session I can give you:
  • Concise notes on a topic (key facts, pathways, mechanisms)
  • High-yield bullets (what examiners love to ask)
  • Q&A drill (questions with explanations)
Just tell me which topic to start with and I'll dive in. For example:
"Start with glycolysis" or "Give me cardiovascular high-yield bullets" or "Quiz me on the urea cycle"
We can go in any order you like - follow the plan above or jump to whatever you're weakest on. What shall we start with?

Start with glycolysis and carbohydrate metabolism

Reading File
Searching the medical library for glycolysis and carbohydrate metabolism content...
Finding Sources
Finding Sources
Good - found content in Lippincott (biochemistry) and Harper's. Let me pull the core glycolysis content from both.
Reading File
Reading File
Reading File
Excellent content from Lippincott and Harper's. Let me also pull the 10 steps detail and regulatory enzymes.
Reading File
I now have everything I need to build a complete, exam-ready glycolysis revision. Here it is:

Glycolysis & Carbohydrate Metabolism - MBBS Revision


PART 1 - Concise Notes

What is Glycolysis?

Glycolysis is the universal 10-step pathway in the cytosol that converts 1 glucose (6C) → 2 pyruvate (3C). It is the hub of carbohydrate metabolism - virtually all dietary sugars (fructose, galactose) are fed into it.
  • Aerobic glycolysis: Pyruvate → Acetyl-CoA → TCA cycle (requires O2)
  • Anaerobic glycolysis: Pyruvate → Lactate (no O2 needed - used by RBCs, cornea, exercising muscle)

PART 2 - The 10 Steps (Exam Table)

Phase 1 - ENERGY INVESTMENT (Steps 1-5) - costs 2 ATP

StepReactionEnzymeNotes
1Glucose → Glucose-6-PHexokinase (or Glucokinase in liver)Irreversible; traps glucose in cell
2G-6-P → Fructose-6-PPhosphoglucose isomeraseReversible
3F-6-P → Fructose-1,6-bisPPhosphofructokinase-1 (PFK-1)Rate-limiting step; irreversible
4F-1,6-bisP → DHAP + G-3-PAldolaseSplits 6C → two 3C
5DHAP ⇌ G-3-PTriose phosphate isomeraseOnly G-3-P proceeds

Phase 2 - ENERGY GENERATION (Steps 6-10) - produces 4 ATP + 2 NADH

StepReactionEnzymeNotes
6G-3-P + NAD⁺ → 1,3-bisphosphoglycerateG-3-P dehydrogenaseProduces NADH; inhibited by arsenic
71,3-BPG → 3-phosphoglyceratePhosphoglycerate kinase1st substrate-level phosphorylation; makes ATP
83-PG → 2-PGPhosphoglycerate mutase
92-PG → Phosphoenolpyruvate (PEP)EnolaseInhibited by fluoride
10PEP → PyruvatePyruvate kinase2nd substrate-level phosphorylation; irreversible
Net yield per glucose: 2 ATP + 2 NADH + 2 Pyruvate

PART 3 - The 3 Regulatory Enzymes (Most Exam-Favourite!)

1. Hexokinase vs Glucokinase

FeatureHexokinase (I-III)Glucokinase (IV)
LocationAll tissuesLiver, pancreatic β-cells
Km for glucoseLow (high affinity)High (low affinity)
Inhibited by G-6-P?Yes (product inhibition)No
Induced by insulin?NoYes
FunctionWorks at low glucoseWorks only when glucose is high (after meals)

2. PFK-1 - The Rate-Limiting Enzyme

Activated byInhibited by
AMP, ADPATP, Citrate
Fructose-2,6-bisphosphate (most potent activator)Glucagon (via lowering F-2,6-bisP)
Low pH activates......actually inhibits (protective in ischemia)
Insulin raises F-2,6-bisP → activates PFK-1 → promotes glycolysis Glucagon lowers F-2,6-bisP → inhibits PFK-1 → promotes gluconeogenesis

3. Pyruvate Kinase

  • Activated by: F-1,6-bisP (feedforward activation)
  • Inhibited by: ATP, Acetyl-CoA, glucagon (via phosphorylation)
  • Deficiency: Hemolytic anemia (RBCs can't maintain ATP for Na/K pump)

PART 4 - ATP Yield Summary

ConditionATP per glucose
Anaerobic glycolysis2 ATP
Aerobic glycolysis (full oxidation)~30-32 ATP (older textbooks say 36-38)
  • Steps 1 & 3 consume 1 ATP each = 2 ATP used
  • Steps 7 & 10 produce 1 ATP each × 2 (two 3C units) = 4 ATP made
  • Net = 2 ATP (substrate-level phosphorylation)

PART 5 - Glucose Transporters (GLUTs) - High Yield!

GLUTLocationSpecial Feature
GLUT-1RBCs, brain, most tissuesBasal uptake; always present
GLUT-2Liver, kidney, pancreatic β-cells, small intestineHigh Km - glucose sensor
GLUT-3Brain (neurons)High affinity - brain gets glucose first
GLUT-4Muscle, adiposeInsulin-stimulated - most clinically important
GLUT-5Small intestineTransports fructose

PART 6 - Fates of Pyruvate

                    ┌─→ Acetyl-CoA (aerobic) → TCA cycle
Glucose → Pyruvate ─┤
                    ├─→ Lactate (anaerobic)
                    ├─→ Alanine (transamination)
                    ├─→ Oxaloacetate (gluconeogenesis via pyruvate carboxylase)
                    └─→ Ethanol (yeast/microorganisms)

PART 7 - High-Yield Bullet Points

  • Fluoride inhibits enolase (step 9) - used in blood collection tubes to prevent glycolysis
  • Arsenic inhibits G-3-P dehydrogenase (step 6) - uncouples substrate-level phosphorylation
  • RBCs have no mitochondria - depend entirely on anaerobic glycolysis
  • 2,3-BPG (made from 1,3-BPG via Luebering-Rapoport shunt) decreases Hb O2 affinity - important in RBCs
  • Pasteur effect: O2 inhibits anaerobic glycolysis (O2 presence → less lactate production)
  • Warburg effect: Cancer cells prefer glycolysis even in presence of O2 (aerobic glycolysis)
  • Lactic acidosis: occurs when pyruvate → lactate accumulates (shock, thiamine deficiency, metformin OD)

PART 8 - Quick Q&A Drill

Q1. Which enzyme is the main regulatory/rate-limiting enzyme of glycolysis?
PFK-1 (phosphofructokinase-1)
Q2. Why can RBCs only do anaerobic glycolysis?
No mitochondria - cannot do oxidative phosphorylation or TCA
Q3. What is the most potent activator of PFK-1?
Fructose-2,6-bisphosphate (produced by PFK-2, activated by insulin)
Q4. Glucokinase vs Hexokinase - which works after a big carbohydrate meal?
Glucokinase - it has high Km so only fires when glucose is high
Q5. What happens to NADH produced in glycolysis if there is no O2?
It is reoxidized to NAD⁺ when pyruvate is reduced to lactate by lactate dehydrogenase (LDH) - this regenerates NAD⁺ to keep glycolysis running
Q6. Name the 3 irreversible steps of glycolysis.
Steps 1, 3, 10 - catalyzed by Hexokinase, PFK-1, Pyruvate kinase
Q7. A patient with pyruvate kinase deficiency presents with hemolytic anemia. Why?
RBCs need ATP from PK for the Na⁺/K⁺-ATPase pump to maintain cell shape. Without PK, ATP falls → cell swells → hemolysis

Sources: Lippincott Illustrated Reviews: Biochemistry 8e | Harper's Illustrated Biochemistry 32e | Basic Medical Biochemistry: A Clinical Approach 6e

What next? We can:
  • Go deeper into the TCA cycle (follows glycolysis directly)
  • Move to glycogen metabolism (glycogenesis + glycogenolysis)
  • Do gluconeogenesis (the reverse pathway - bypasses the 3 irreversible steps)
  • Quiz you more on glycolysis before moving on
What would you like?

generate a pdf

Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"

Running Command

mkdir -p /home/daytona/workspace/biochem-revision && python3 -c "from reportlab.lib.pagesizes import A4; print('reportlab ok')"

Writing File

~/biochem-revision/generate_pdf.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,
    HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY

OUTPUT = "/home/daytona/workspace/biochem-revision/Glycolysis_CarbohydrateMetabolism_Revision.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=2*cm,
    rightMargin=2*cm,
    topMargin=2*cm,
    bottomMargin=2*cm,
    title="Glycolysis & Carbohydrate Metabolism - MBBS Revision",
    author="Orris Medical Revision"
)

styles = getSampleStyleSheet()

# Custom styles
TEAL = colors.HexColor("#0D7377")
DARK = colors.HexColor("#1a1a2e")
LIGHT_TEAL = colors.HexColor("#e8f8f5")
LIGHT_YELLOW = colors.HexColor("#fffde7")
LIGHT_RED = colors.HexColor("#fdecea")
LIGHT_BLUE = colors.HexColor("#e3f2fd")
LIGHT_PURPLE = colors.HexColor("#f3e5f5")
LIGHT_GREEN = colors.HexColor("#e8f5e9")
GREY = colors.HexColor("#f5f5f5")
MID_GREY = colors.HexColor("#eceff1")

title_style = ParagraphStyle("Title", parent=styles["Title"],
    fontSize=22, textColor=TEAL, spaceAfter=4, fontName="Helvetica-Bold",
    alignment=TA_CENTER)

subtitle_style = ParagraphStyle("Subtitle", parent=styles["Normal"],
    fontSize=11, textColor=colors.HexColor("#546e7a"), spaceAfter=14,
    alignment=TA_CENTER)

h1_style = ParagraphStyle("H1", parent=styles["Heading1"],
    fontSize=14, textColor=colors.white, spaceBefore=14, spaceAfter=4,
    fontName="Helvetica-Bold", backColor=TEAL,
    borderPad=6, leftIndent=-6, rightIndent=-6)

h2_style = ParagraphStyle("H2", parent=styles["Heading2"],
    fontSize=12, textColor=TEAL, spaceBefore=10, spaceAfter=4,
    fontName="Helvetica-Bold", borderWidth=0, borderPad=0)

body_style = ParagraphStyle("Body", parent=styles["Normal"],
    fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY)

bullet_style = ParagraphStyle("Bullet", parent=styles["Normal"],
    fontSize=9.5, leading=14, leftIndent=14, spaceAfter=3,
    bulletIndent=4)

bold_bullet_style = ParagraphStyle("BoldBullet", parent=styles["Normal"],
    fontSize=9.5, leading=14, leftIndent=14, spaceAfter=3,
    bulletIndent=4, fontName="Helvetica-Bold")

note_style = ParagraphStyle("Note", parent=styles["Normal"],
    fontSize=9, leading=13, backColor=LIGHT_YELLOW,
    borderPad=6, spaceAfter=6, leftIndent=6, rightIndent=6,
    textColor=colors.HexColor("#5d4037"))

qa_q_style = ParagraphStyle("QAQ", parent=styles["Normal"],
    fontSize=9.5, leading=13, fontName="Helvetica-Bold",
    textColor=colors.HexColor("#1565c0"), spaceAfter=2)

qa_a_style = ParagraphStyle("QAA", parent=styles["Normal"],
    fontSize=9.5, leading=13, textColor=colors.HexColor("#2e7d32"),
    spaceAfter=6, leftIndent=12)

source_style = ParagraphStyle("Source", parent=styles["Normal"],
    fontSize=8, textColor=colors.HexColor("#9e9e9e"),
    alignment=TA_CENTER, spaceBefore=10)

def section_header(text, color=TEAL):
    return [
        Spacer(1, 8),
        Table([[Paragraph(text, ParagraphStyle("SH", parent=styles["Normal"],
            fontSize=13, textColor=colors.white, fontName="Helvetica-Bold",
            alignment=TA_LEFT))]],
            colWidths=[17*cm],
            style=TableStyle([
                ("BACKGROUND", (0,0), (-1,-1), color),
                ("TOPPADDING", (0,0), (-1,-1), 7),
                ("BOTTOMPADDING", (0,0), (-1,-1), 7),
                ("LEFTPADDING", (0,0), (-1,-1), 10),
                ("RIGHTPADDING", (0,0), (-1,-1), 10),
                ("ROUNDEDCORNERS", [4], (0,0), (-1,-1)),
            ])),
        Spacer(1, 6),
    ]

def two_col_table(headers, rows, col_widths=None, header_bg=TEAL):
    if col_widths is None:
        col_widths = [17*cm / len(headers)] * len(headers)
    data = [[Paragraph(f"<b>{h}</b>", ParagraphStyle("TH", parent=styles["Normal"],
        fontSize=9, textColor=colors.white, fontName="Helvetica-Bold")) for h in headers]]
    for i, row in enumerate(rows):
        bg = GREY if i % 2 == 0 else colors.white
        data.append([Paragraph(str(cell), ParagraphStyle("TD", parent=styles["Normal"],
            fontSize=9, leading=13)) for cell in row])
    style = TableStyle([
        ("BACKGROUND", (0, 0), (-1, 0), header_bg),
        ("ROWBACKGROUNDS", (0, 1), (-1, -1), [GREY, colors.white]),
        ("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#cfd8dc")),
        ("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
        ("TOPPADDING", (0, 0), (-1, -1), 5),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
        ("LEFTPADDING", (0, 0), (-1, -1), 6),
        ("RIGHTPADDING", (0, 0), (-1, -1), 6),
    ])
    return Table(data, colWidths=col_widths, style=style, hAlign="LEFT")

def highlight_box(text, bg=LIGHT_TEAL, border_color=TEAL):
    return Table([[Paragraph(text, ParagraphStyle("HB", parent=styles["Normal"],
        fontSize=9.5, leading=14))]],
        colWidths=[17*cm],
        style=TableStyle([
            ("BACKGROUND", (0,0), (-1,-1), bg),
            ("LEFTPADDING", (0,0), (-1,-1), 10),
            ("RIGHTPADDING", (0,0), (-1,-1), 10),
            ("TOPPADDING", (0,0), (-1,-1), 8),
            ("BOTTOMPADDING", (0,0), (-1,-1), 8),
            ("LINEAFTER", (0,0), (0,-1), 3, border_color),
        ]))

# ─── Build content ─────────────────────────────────────────────────────────────
story = []

# ── Cover block ─────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph("Glycolysis &amp; Carbohydrate Metabolism", title_style))
story.append(Paragraph("MBBS 1st Year · Biochemistry Revision Notes", subtitle_style))
story.append(HRFlowable(width="100%", thickness=2, color=TEAL, spaceAfter=10))

# ─── PART 1 - Overview ─────────────────────────────────────────────────────────
story += section_header("PART 1 — Overview")
story.append(Paragraph(
    "Glycolysis is the <b>universal 10-step cytosolic pathway</b> that converts "
    "<b>1 glucose (6C) → 2 pyruvate (3C)</b>. It is the hub of carbohydrate metabolism — "
    "virtually all dietary sugars (fructose, galactose) are channelled into it.",
    body_style))
story.append(Spacer(1, 4))

overview_data = [
    ["Type", "O₂ needed?", "End product", "Where?", "ATP yield"],
    ["Aerobic glycolysis", "Yes", "Pyruvate → Acetyl-CoA → TCA", "Mitochondria-containing cells", "30–32 ATP total"],
    ["Anaerobic glycolysis", "No", "Pyruvate → Lactate", "RBCs, cornea, hypoxic muscle", "2 ATP net"],
]
story.append(two_col_table(overview_data[0], overview_data[1:],
    col_widths=[3*cm, 2.5*cm, 4.5*cm, 4.5*cm, 2.5*cm]))
story.append(Spacer(1, 8))

# ─── PART 2 - 10 Steps ────────────────────────────────────────────────────────
story += section_header("PART 2 — The 10 Steps of Glycolysis")

story.append(Paragraph("<b>Phase 1: Energy Investment (Steps 1–5) — costs 2 ATP</b>", h2_style))
phase1_data = [
    ["Step", "Reaction", "Enzyme", "Key Points"],
    ["1", "Glucose → Glucose-6-P", "Hexokinase / Glucokinase", "Irreversible; traps glucose in cell; uses 1 ATP"],
    ["2", "G-6-P → Fructose-6-P", "Phosphoglucose isomerase", "Reversible; aldose → ketose isomerisation"],
    ["3", "F-6-P → Fructose-1,6-bisP", "PFK-1 ⭐ Rate-limiting", "Irreversible; uses 1 ATP; KEY regulatory step"],
    ["4", "F-1,6-bisP → DHAP + G-3-P", "Aldolase", "Splits 6C sugar into two 3C compounds"],
    ["5", "DHAP ⇌ G-3-P", "Triose phosphate isomerase", "Only G-3-P proceeds; DHAP is converted"],
]
story.append(two_col_table(phase1_data[0], phase1_data[1:],
    col_widths=[1.2*cm, 4.3*cm, 4.5*cm, 7*cm],
    header_bg=colors.HexColor("#0D7377")))
story.append(Spacer(1, 8))

story.append(Paragraph("<b>Phase 2: Energy Generation (Steps 6–10) — produces 4 ATP + 2 NADH</b>", h2_style))
phase2_data = [
    ["Step", "Reaction", "Enzyme", "Key Points"],
    ["6", "G-3-P + NAD⁺ → 1,3-BPG", "G-3-P dehydrogenase", "Produces NADH; inhibited by arsenic poisoning"],
    ["7", "1,3-BPG → 3-PG", "Phosphoglycerate kinase", "1st substrate-level phosphorylation — makes ATP"],
    ["8", "3-PG → 2-PG", "Phosphoglycerate mutase", "Simple rearrangement"],
    ["9", "2-PG → PEP", "Enolase", "Inhibited by fluoride (used in blood tubes)"],
    ["10", "PEP → Pyruvate", "Pyruvate kinase ⭐", "2nd substrate-level phosphorylation; irreversible"],
]
story.append(two_col_table(phase2_data[0], phase2_data[1:],
    col_widths=[1.2*cm, 4.3*cm, 4.5*cm, 7*cm],
    header_bg=colors.HexColor("#00695c")))
story.append(Spacer(1, 6))

story.append(highlight_box(
    "⚡ <b>Net yield per glucose:</b> 2 ATP + 2 NADH + 2 Pyruvate  |  "
    "<b>3 irreversible steps:</b> Steps 1, 3, 10 (Hexokinase, PFK-1, Pyruvate Kinase)",
    bg=LIGHT_TEAL, border_color=TEAL))
story.append(Spacer(1, 10))

# ─── PART 3 - Regulatory Enzymes ──────────────────────────────────────────────
story += section_header("PART 3 — Regulatory Enzymes (Most Exam-Favourite!)", color=colors.HexColor("#1565c0"))

story.append(Paragraph("<b>1. Hexokinase vs Glucokinase</b>", h2_style))
hk_data = [
    ["Feature", "Hexokinase (I–III)", "Glucokinase (IV)"],
    ["Location", "All tissues", "Liver, pancreatic β-cells"],
    ["Km for glucose", "Low (high affinity)", "High (low affinity — glucose sensor)"],
    ["Inhibited by G-6-P?", "Yes (product inhibition)", "No"],
    ["Induced by insulin?", "No", "Yes"],
    ["Clinical role", "Works even at low blood glucose", "Works only after high-carb meals"],
]
story.append(two_col_table(hk_data[0], hk_data[1:],
    col_widths=[4*cm, 6.5*cm, 6.5*cm],
    header_bg=colors.HexColor("#1565c0")))
story.append(Spacer(1, 8))

story.append(Paragraph("<b>2. PFK-1 — The Rate-Limiting Enzyme</b>", h2_style))
pfk_data = [
    ["Activated by", "Inhibited by"],
    ["AMP, ADP (low energy state)", "ATP (high energy — no need for more)"],
    ["Fructose-2,6-bisphosphate ← most potent", "Citrate (TCA intermediates high)"],
    ["Insulin (↑ F-2,6-bisP via PFK-2)", "Glucagon (↓ F-2,6-bisP via PKA)"],
    ["Low pH mildly activates", "Severe acidosis inhibits"],
]
story.append(two_col_table(pfk_data[0], pfk_data[1:],
    col_widths=[8.5*cm, 8.5*cm],
    header_bg=colors.HexColor("#1565c0")))
story.append(Spacer(1, 6))
story.append(highlight_box(
    "🔑 <b>Insulin</b> raises Fructose-2,6-bisphosphate → activates PFK-1 → promotes glycolysis<br/>"
    "🔑 <b>Glucagon</b> lowers Fructose-2,6-bisphosphate → inhibits PFK-1 → promotes gluconeogenesis",
    bg=LIGHT_BLUE, border_color=colors.HexColor("#1565c0")))
story.append(Spacer(1, 8))

story.append(Paragraph("<b>3. Pyruvate Kinase</b>", h2_style))
pk_data = [
    ["Activated by", "Inhibited by"],
    ["Fructose-1,6-bisphosphate (feedforward)", "ATP, Alanine, Acetyl-CoA"],
    ["—", "Glucagon (via phosphorylation by PKA)"],
]
story.append(two_col_table(pk_data[0], pk_data[1:],
    col_widths=[8.5*cm, 8.5*cm],
    header_bg=colors.HexColor("#1565c0")))
story.append(Spacer(1, 4))
story.append(highlight_box(
    "⚠️ <b>Pyruvate Kinase Deficiency</b> → Hemolytic anemia. RBCs rely solely on glycolysis for ATP "
    "(no mitochondria). Without PK, ATP falls → Na⁺/K⁺-ATPase fails → cell swells → hemolysis.",
    bg=LIGHT_RED, border_color=colors.HexColor("#c62828")))
story.append(Spacer(1, 10))

# ─── PART 4 - ATP Yield ───────────────────────────────────────────────────────
story += section_header("PART 4 — ATP Yield Summary", color=colors.HexColor("#4a148c"))
atp_data = [
    ["Condition", "ATP per Glucose", "Notes"],
    ["Anaerobic glycolysis", "2 ATP (net)", "Substrate-level phosphorylation only"],
    ["Aerobic (full oxidation)", "~30–32 ATP", "Includes TCA + oxidative phosphorylation"],
    ["Steps 1 & 3 use", "2 ATP (investment)", "\"Priming the pump\""],
    ["Steps 7 & 10 × 2 units", "4 ATP (generated)", "Net +2 per glucose"],
]
story.append(two_col_table(atp_data[0], atp_data[1:],
    col_widths=[5.5*cm, 4*cm, 7.5*cm],
    header_bg=colors.HexColor("#4a148c")))
story.append(Spacer(1, 10))

# ─── PART 5 - GLUT Transporters ───────────────────────────────────────────────
story += section_header("PART 5 — Glucose Transporters (GLUTs)", color=colors.HexColor("#e65100"))
glut_data = [
    ["GLUT", "Location", "Special Feature"],
    ["GLUT-1", "RBCs, brain, most tissues", "Basal constitutive uptake; always present"],
    ["GLUT-2", "Liver, kidney, pancreatic β-cells, small intestine", "High Km — glucose sensor; not saturated at physiologic levels"],
    ["GLUT-3", "Brain neurons", "Very high affinity — brain gets glucose first"],
    ["GLUT-4", "Muscle, adipose tissue", "Insulin-stimulated — most clinically important (diabetes)"],
    ["GLUT-5", "Small intestine, sperm", "Transports fructose (not glucose)"],
]
story.append(two_col_table(glut_data[0], glut_data[1:],
    col_widths=[2*cm, 6*cm, 9*cm],
    header_bg=colors.HexColor("#e65100")))
story.append(Spacer(1, 10))

# ─── PART 6 - Fates of Pyruvate ───────────────────────────────────────────────
story += section_header("PART 6 — Fates of Pyruvate", color=colors.HexColor("#2e7d32"))
fate_data = [
    ["Fate", "Enzyme", "Condition / Significance"],
    ["→ Acetyl-CoA", "Pyruvate dehydrogenase (PDH)", "Aerobic; requires B1 (thiamine); enters TCA cycle"],
    ["→ Lactate", "Lactate dehydrogenase (LDH)", "Anaerobic; regenerates NAD⁺; seen in exercise, ischemia"],
    ["→ Oxaloacetate", "Pyruvate carboxylase", "Gluconeogenesis; requires biotin (B7); activated by Acetyl-CoA"],
    ["→ Alanine", "Alanine aminotransferase (ALT)", "Glucose-alanine cycle; transport of NH₃ from muscle to liver"],
    ["→ Ethanol", "Pyruvate decarboxylase", "Yeast/microorganisms only; not in mammals"],
]
story.append(two_col_table(fate_data[0], fate_data[1:],
    col_widths=[3*cm, 5*cm, 9*cm],
    header_bg=colors.HexColor("#2e7d32")))
story.append(Spacer(1, 10))

# ─── PART 7 - High-Yield Bullets ──────────────────────────────────────────────
story += section_header("PART 7 — High-Yield Exam Points ⭐", color=colors.HexColor("#b71c1c"))

bullets = [
    ("<b>Fluoride</b> inhibits <b>enolase</b> (Step 9) → used in grey-top blood collection tubes to prevent glycolysis in vitro.", LIGHT_RED),
    ("<b>Arsenic</b> inhibits G-3-P dehydrogenase (Step 6) → uncouples substrate-level phosphorylation.", LIGHT_RED),
    ("<b>RBCs</b> have no mitochondria → depend entirely on anaerobic glycolysis for ALL their ATP.", LIGHT_YELLOW),
    ("<b>2,3-BPG</b> is made from 1,3-BPG via the Luebering-Rapoport shunt in RBCs → decreases Hb O₂ affinity (right shift of O₂-Hb curve).", LIGHT_BLUE),
    ("<b>Pasteur effect</b>: O₂ inhibits anaerobic glycolysis — when O₂ is present, less lactate is produced.", LIGHT_GREEN),
    ("<b>Warburg effect</b>: Cancer cells preferentially use glycolysis even in the presence of O₂ (aerobic glycolysis) → useful for PET scan imaging (↑ ¹⁸F-FDG uptake).", LIGHT_PURPLE),
    ("<b>Lactic acidosis</b> causes: Shock, thiamine (B1) deficiency (beri-beri), metformin overdose, liver failure, sepsis.", LIGHT_RED),
    ("<b>Thiamine (B1)</b> deficiency blocks pyruvate dehydrogenase → pyruvate accumulates → converts to lactate → lactic acidosis.", LIGHT_YELLOW),
]

for text, bg in bullets:
    story.append(Table(
        [[Paragraph("▶  " + text, ParagraphStyle("BulletRow", parent=styles["Normal"],
            fontSize=9.5, leading=14))]],
        colWidths=[17*cm],
        style=TableStyle([
            ("BACKGROUND", (0,0), (-1,-1), bg),
            ("LEFTPADDING", (0,0), (-1,-1), 8),
            ("RIGHTPADDING", (0,0), (-1,-1), 8),
            ("TOPPADDING", (0,0), (-1,-1), 5),
            ("BOTTOMPADDING", (0,0), (-1,-1), 5),
            ("BOTTOMPADDING", (0,-1), (-1,-1), 5),
        ])))
    story.append(Spacer(1, 3))

story.append(Spacer(1, 10))

# ─── PART 8 - Q&A ─────────────────────────────────────────────────────────────
story += section_header("PART 8 — Q&amp;A Drill", color=colors.HexColor("#4a148c"))

qa_pairs = [
    ("Q1. Which enzyme is the rate-limiting/regulatory enzyme of glycolysis?",
     "PFK-1 (Phosphofructokinase-1) — Step 3, irreversible."),
    ("Q2. Why can RBCs only perform anaerobic glycolysis?",
     "RBCs lack mitochondria, so they cannot perform oxidative phosphorylation or the TCA cycle. All ATP comes from substrate-level phosphorylation."),
    ("Q3. What is the most potent activator of PFK-1?",
     "Fructose-2,6-bisphosphate (F-2,6-bisP), produced by PFK-2 (a bifunctional enzyme). Insulin increases it; glucagon decreases it."),
    ("Q4. Glucokinase vs Hexokinase — which works after a big carbohydrate meal?",
     "Glucokinase (high Km) — it only becomes active when blood glucose is high, making it ideal as a liver/pancreatic glucose sensor."),
    ("Q5. What happens to NADH produced in glycolysis when there is no O₂?",
     "NADH is reoxidized to NAD⁺ when pyruvate is reduced to lactate by lactate dehydrogenase (LDH). This regenerates NAD⁺ to keep glycolysis running."),
    ("Q6. Name the 3 irreversible (commitment) steps of glycolysis.",
     "Steps 1, 3, 10 — catalyzed by Hexokinase (or Glucokinase), PFK-1, and Pyruvate Kinase respectively."),
    ("Q7. A patient with hemolytic anemia is found to have pyruvate kinase deficiency. Explain the mechanism.",
     "RBCs depend on PK for ATP production. Without PK, the Na⁺/K⁺-ATPase pump fails → Na⁺ accumulates → osmotic water entry → cell swells → hemolysis."),
    ("Q8. Which blood collection tube prevents glycolysis and why?",
     "Grey-top tube (contains sodium fluoride) — fluoride inhibits enolase (Step 9), halting glycolysis and preserving glucose levels for measurement."),
    ("Q9. What is the Warburg effect and its clinical relevance?",
     "Cancer cells use aerobic glycolysis (glycolysis even in O₂). This allows rapid ATP production and biosynthetic precursors. Clinically exploited in PET scans — tumours show high ¹⁸F-FDG (glucose analogue) uptake."),
    ("Q10. How does glucagon inhibit glycolysis?",
     "Glucagon activates PKA → phosphorylates PFK-2 → lowers Fructose-2,6-bisP → less PFK-1 activation → glycolysis inhibited. Also phosphorylates Pyruvate Kinase → inhibits it."),
]

for q, a in qa_pairs:
    story.append(Paragraph(q, qa_q_style))
    story.append(Paragraph("→ " + a, qa_a_style))
    story.append(Spacer(1, 2))

story.append(Spacer(1, 10))
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor("#b0bec5"), spaceAfter=6))
story.append(Paragraph(
    "Sources: Lippincott Illustrated Reviews: Biochemistry 8e  |  Harper's Illustrated Biochemistry 32e  |  Basic Medical Biochemistry: A Clinical Approach 6e",
    source_style))

# ─── Build ──────────────────────────────────────────────────────────────────────
doc.build(story)
print("PDF generated:", OUTPUT)
Running Command

python3 /home/daytona/workspace/biochem-revision/generate_pdf.py

ROUNDEDCORNERS syntax is wrong. Let me fix it.
Editing File

~/biochem-revision/generate_pdf.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/biochem-revision/generate_pdf.py'
Running Command

python3 /home/daytona/workspace/biochem-revision/generate_pdf.py

Your PDF is ready! Here's the download link:

Glycolysis CarbohydrateMetabolism Revision

PDF Document · PDF

The PDF includes all 8 parts in a clean, color-coded layout:
  • Part 1 - Overview (aerobic vs anaerobic)
  • Part 2 - All 10 steps in two color-coded tables (Phase 1 & Phase 2)
  • Part 3 - Regulatory enzymes (Hexokinase vs Glucokinase comparison, PFK-1 activators/inhibitors, Pyruvate Kinase)
  • Part 4 - ATP yield summary
  • Part 5 - GLUT transporters table
  • Part 6 - Fates of pyruvate
  • Part 7 - High-yield exam bullets (color-highlighted)
  • Part 8 - 10 Q&A drill questions with answers
Ready to move on to the TCA cycle, glycogen metabolism, or gluconeogenesis next?
This is a shared conversation. Sign in to Orris to start your own chat.