Explain first 5 questions in detail with flowchart for mbbs exam
| Q# | Topic | What's Included |
|---|---|---|
| Q1 | Mitochondria | Structure diagram (textbook image), compartments table, ATP synthesis flowchart, 6 mitochondrial disorders with clinical features, disorder flowchart |
| Q2 | Lysosomes | Biogenesis flowchart, types (primary/secondary/autolysosomes), 7 functions, full LSD classification tree, table of 7 major LSDs with enzymes/substrates/features |
| Q3 | Fluid Mosaic Model | Singer & Nicolson 1972, all 4 components (phospholipids, proteins, cholesterol, glycocalyx), ASCII labelled diagram, asymmetry, 6 membrane functions |
| Q4 | Membrane Transport | Full classification flowchart, simple diffusion + Fick's law, facilitated diffusion (carrier vs channel), primary active (Na⁺/K⁺-ATPase mechanism step-by-step), secondary active (SGLT1/NHE), vesicular transport (RME flowchart, exocytosis), clinical correlates |
| Q5 | Carbohydrates | Definition, full classification flowchart, monosaccharide/disaccharide/polysaccharide tables, GAG structure + all 6 types with location/function, proteoglycan structure, clinical significance of GAGs |
Create a quick reference PDF with all flowcharts and tables for revision
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/mbbs-revision && python3 -c "import reportlab; print(reportlab.Version)"
~/mbbs-revision/make_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, PageBreak, HRFlowable,
KeepTogether)
from reportlab.platypus.flowables import Flowable
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor
import io
# ── Colour Palette ────────────────────────────────────────────────────────────
C_NAVY = HexColor('#1a2e4a')
C_TEAL = HexColor('#0f7b8c')
C_MINT = HexColor('#e6f7f9')
C_GOLD = HexColor('#f0a500')
C_AMBER = HexColor('#fff3cd')
C_ORANGE = HexColor('#e8700a')
C_ORANGE_LIGHT = HexColor('#fff8f0')
C_GREEN = HexColor('#1e7e34')
C_GREEN_LIGHT = HexColor('#e8f5e9')
C_RED = HexColor('#c0392b')
C_RED_LIGHT = HexColor('#fdecea')
C_PURPLE = HexColor('#6a1b9a')
C_PURPLE_LIGHT = HexColor('#f3e5f5')
C_GREY = HexColor('#455a64')
C_LGREY = HexColor('#eceff1')
C_WHITE = colors.white
C_BLACK = colors.black
# ── Page setup ────────────────────────────────────────────────────────────────
PAGE_W, PAGE_H = A4
MARGIN = 1.8*cm
CONTENT_W = PAGE_W - 2*MARGIN
def add_page_decorations(canvas_obj, doc):
"""Header/footer on every page."""
canvas_obj.saveState()
# Top bar
canvas_obj.setFillColor(C_NAVY)
canvas_obj.rect(0, PAGE_H-1.1*cm, PAGE_W, 1.1*cm, fill=1, stroke=0)
canvas_obj.setFillColor(C_WHITE)
canvas_obj.setFont('Helvetica-Bold', 9)
canvas_obj.drawString(MARGIN, PAGE_H-0.72*cm, 'MBBS QUICK REFERENCE | Cell Biology & Biochemistry')
canvas_obj.setFont('Helvetica', 8)
canvas_obj.drawRightString(PAGE_W-MARGIN, PAGE_H-0.72*cm, 'For Revision Only')
# Bottom bar
canvas_obj.setFillColor(C_NAVY)
canvas_obj.rect(0, 0, PAGE_W, 0.8*cm, fill=1, stroke=0)
canvas_obj.setFillColor(C_WHITE)
canvas_obj.setFont('Helvetica', 8)
canvas_obj.drawCentredString(PAGE_W/2, 0.27*cm, f'Page {doc.page}')
# Accent line under header
canvas_obj.setStrokeColor(C_GOLD)
canvas_obj.setLineWidth(2)
canvas_obj.line(0, PAGE_H-1.1*cm, PAGE_W, PAGE_H-1.1*cm)
canvas_obj.restoreState()
# ── Styles ────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
sTitle = S('sTitle', fontSize=26, textColor=C_WHITE, fontName='Helvetica-Bold',
leading=32, alignment=TA_CENTER)
sSubtitle = S('sSubtitle', fontSize=13, textColor=C_AMBER, fontName='Helvetica',
leading=18, alignment=TA_CENTER)
sQHead = S('sQHead', fontSize=15, textColor=C_WHITE, fontName='Helvetica-Bold',
leading=20, alignment=TA_LEFT, spaceAfter=2)
sSecHead = S('sSecHead', fontSize=11, textColor=C_NAVY, fontName='Helvetica-Bold',
leading=15, spaceBefore=8, spaceAfter=3)
sMiniHead = S('sMiniHead', fontSize=9.5, textColor=C_TEAL, fontName='Helvetica-Bold',
leading=13, spaceBefore=5, spaceAfter=2)
sBody = S('sBody', fontSize=8.5, textColor=C_BLACK, fontName='Helvetica',
leading=13, spaceAfter=3)
sBold = S('sBold', fontSize=8.5, textColor=C_BLACK, fontName='Helvetica-Bold',
leading=13)
sBox = S('sBox', fontSize=8, textColor=C_NAVY, fontName='Helvetica',
leading=12, leftIndent=4, rightIndent=4)
sCell = S('sCell', fontSize=8, textColor=C_BLACK, fontName='Helvetica', leading=11)
sCellB= S('sCellB', fontSize=8, textColor=C_NAVY, fontName='Helvetica-Bold', leading=11)
sCellW= S('sCellW', fontSize=8.5, textColor=C_WHITE, fontName='Helvetica-Bold', leading=12)
sFlow = S('sFlow', fontSize=8, textColor=C_NAVY, fontName='Courier', leading=11,
backColor=HexColor('#f0f4f8'), leftIndent=6)
sNote = S('sNote', fontSize=7.5, textColor=C_GREY, fontName='Helvetica-Oblique', leading=11)
sKeyword = S('sKeyword', fontSize=8, textColor=C_RED, fontName='Helvetica-Bold', leading=11)
# ── Helper Flowables ──────────────────────────────────────────────────────────
def qbanner(q_num, title, color=C_TEAL):
data = [[Paragraph(f'Q{q_num}', sCellW),
Paragraph(title, sCellW)]]
t = Table(data, colWidths=[1.3*cm, CONTENT_W-1.3*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), color),
('TEXTCOLOR', (0,0), (-1,-1), C_WHITE),
('ALIGN', (0,0),(0,0), 'CENTER'),
('VALIGN', (0,0),(-1,-1), 'MIDDLE'),
('LEFTPADDING', (0,0),(-1,-1), 8),
('RIGHTPADDING',(0,0),(-1,-1), 8),
('TOPPADDING', (0,0),(-1,-1), 8),
('BOTTOMPADDING',(0,0),(-1,-1), 8),
('ROWBACKGROUNDS',(0,0),(-1,-1),[color]),
]))
return t
def section_head(text):
return Paragraph(text, sSecHead)
def mini_head(text):
return Paragraph(text, sMiniHead)
def body(text):
return Paragraph(text, sBody)
def note(text):
return Paragraph(f'<i>{text}</i>', sNote)
def sp(h=0.2):
return Spacer(1, h*cm)
def hr(color=C_TEAL, thickness=0.5):
return HRFlowable(width='100%', thickness=thickness, color=color, spaceAfter=4, spaceBefore=4)
def flowbox(lines):
"""Render a monospaced flowchart block."""
joined = '\n'.join(lines)
data = [[Paragraph(joined.replace('\n','<br/>'), sFlow)]]
t = Table(data, colWidths=[CONTENT_W])
t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1), HexColor('#f0f4f8')),
('BOX',(0,0),(-1,-1),0.8, C_TEAL),
('LEFTPADDING',(0,0),(-1,-1),8),
('RIGHTPADDING',(0,0),(-1,-1),8),
('TOPPADDING',(0,0),(-1,-1),6),
('BOTTOMPADDING',(0,0),(-1,-1),6),
]))
return t
def make_table(headers, rows, col_widths=None, hdr_color=C_NAVY, zebra=True):
if col_widths is None:
col_widths = [CONTENT_W/len(headers)]*len(headers)
header_row = [Paragraph(h, sCellW) for h in headers]
data = [header_row]
for i, row in enumerate(rows):
bg = HexColor('#f7fbfc') if (zebra and i%2==0) else C_WHITE
data.append([Paragraph(str(c), sCell) for c in row])
t = Table(data, colWidths=col_widths, repeatRows=1)
style = [
('BACKGROUND',(0,0),(-1,0), hdr_color),
('TEXTCOLOR',(0,0),(-1,0), C_WHITE),
('FONTNAME',(0,0),(-1,0),'Helvetica-Bold'),
('FONTSIZE',(0,0),(-1,-1), 8),
('GRID',(0,0),(-1,-1),0.4, HexColor('#b0bec5')),
('ROWBACKGROUNDS',(0,1),(-1,-1),[HexColor('#f7fbfc'), C_WHITE]),
('VALIGN',(0,0),(-1,-1),'TOP'),
('LEFTPADDING',(0,0),(-1,-1),5),
('RIGHTPADDING',(0,0),(-1,-1),5),
('TOPPADDING',(0,0),(-1,-1),4),
('BOTTOMPADDING',(0,0),(-1,-1),4),
]
t.setStyle(TableStyle(style))
return t
def highlight_box(text, bg=C_AMBER, border=C_GOLD):
data = [[Paragraph(text, sBox)]]
t = Table(data, colWidths=[CONTENT_W])
t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1), bg),
('BOX',(0,0),(-1,-1),1, border),
('LEFTPADDING',(0,0),(-1,-1),8),
('RIGHTPADDING',(0,0),(-1,-1),8),
('TOPPADDING',(0,0),(-1,-1),5),
('BOTTOMPADDING',(0,0),(-1,-1),5),
]))
return t
def two_col(left_items, right_items):
"""Two-column layout using a table."""
half = (CONTENT_W - 0.4*cm) / 2
rows = []
max_len = max(len(left_items), len(right_items))
left_items += [''] * (max_len - len(left_items))
right_items += [''] * (max_len - len(right_items))
for l, r in zip(left_items, right_items):
rows.append([l, r])
t = Table(rows, colWidths=[half, half], hAlign='LEFT')
t.setStyle(TableStyle([
('VALIGN',(0,0),(-1,-1),'TOP'),
('LEFTPADDING',(0,0),(-1,-1),0),
('RIGHTPADDING',(0,0),(-1,-1),4),
('TOPPADDING',(0,0),(-1,-1),0),
('BOTTOMPADDING',(0,0),(-1,-1),0),
]))
return t
# ══════════════════════════════════════════════════════════════════════════════
# CONTENT BUILDER
# ══════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER PAGE ────────────────────────────────────────────────────────────────
def cover_page():
# Big coloured banner
cover_data = [[
Paragraph('MBBS QUICK REFERENCE', sTitle),
]]
cover_t = Table(cover_data, colWidths=[CONTENT_W])
cover_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1), C_NAVY),
('TOPPADDING',(0,0),(-1,-1), 30),
('BOTTOMPADDING',(0,0),(-1,-1), 20),
]))
story.append(cover_t)
story.append(sp(0.3))
sub_data = [[Paragraph('Cell Biology & Biochemistry', sSubtitle)]]
sub_t = Table(sub_data, colWidths=[CONTENT_W])
sub_t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1), C_TEAL),
('TOPPADDING',(0,0),(-1,-1), 12),
('BOTTOMPADDING',(0,0),(-1,-1), 12),
]))
story.append(sub_t)
story.append(sp(1.2))
# Questions covered
toc_rows = [
['Q1', 'Mitochondria', 'Structure · Functions · Disorders (MELAS, MERRF, LHON, KSS, Leigh)'],
['Q2', 'Lysosomes', 'Structure · Functions · Lysosomal Storage Disorders'],
['Q3', 'Fluid Mosaic Model', 'Membrane structure · Components · Properties'],
['Q4', 'Membrane Transport', 'Passive · Active · Vesicular · Clinical correlates'],
['Q5', 'Carbohydrates', 'Classification · Polysaccharides · GAGs · MPS disorders'],
]
story.append(section_head('Topics Covered'))
story.append(make_table(
['Q#', 'Topic', 'Subtopics'],
toc_rows,
col_widths=[1.2*cm, 4*cm, CONTENT_W-5.2*cm],
hdr_color=C_NAVY
))
story.append(sp(0.8))
story.append(highlight_box(
'⚡ Exam Tip: Each section has a FLOWCHART (grey box) + TABLE. '
'Study the flowcharts first for the big picture, then the tables for detail.',
bg=C_AMBER, border=C_GOLD
))
story.append(PageBreak())
cover_page()
# ══════════════════════════════════════════════════════════════════════════════
# Q1 — MITOCHONDRIA
# ══════════════════════════════════════════════════════════════════════════════
story.append(qbanner(1, 'Mitochondria — Structure, Functions & Disorders', C_NAVY))
story.append(sp(0.3))
story.append(section_head('Structure at a Glance'))
story.append(make_table(
['Component', 'Description', 'Key Role'],
[
['Outer membrane', 'Smooth; contains porins (channel proteins)', 'Regulates ion/metabolite flow'],
['Intermembrane space', 'Between outer and inner membranes', 'H⁺ accumulation → drives ATP synthesis'],
['Inner membrane', 'Folded into cristae; houses ETC + ATP synthase', 'Site of oxidative phosphorylation'],
['Cristae', 'Infoldings of inner membrane → ↑ surface area', 'Attachment of ETC complexes I–V'],
['Matrix', 'Gel-like interior', 'Krebs cycle, β-oxidation, mtDNA, ribosomes'],
['mtDNA', '37 genes; circular; maternally inherited', 'Encodes 13 ETC proteins + rRNA/tRNA'],
],
col_widths=[3.5*cm, 7*cm, CONTENT_W-10.5*cm],
hdr_color=C_TEAL
))
story.append(sp(0.3))
story.append(section_head('Structure Flowchart'))
story.append(flowbox([
'MITOCHONDRION',
' |',
' ├── OUTER MEMBRANE ── Porins → regulate ion/metabolite entry',
' |',
' ├── INTERMEMBRANE SPACE (Outer Chamber)',
' | └── H⁺ pumped here → proton gradient → ATP synthesis',
' |',
' ├── INNER MEMBRANE',
' | ├── Cristae (infoldings → ↑↑ surface area)',
' | ├── ETC: Complex I → II → III → IV (electrons flow)',
' | └── ATP Synthase (Complex V) ← H⁺ flows back through',
' |',
' └── MATRIX',
' ├── Krebs Cycle enzymes',
' ├── β-Oxidation of fatty acids',
' ├── Mitochondrial DNA (37 genes)',
' └── Mitochondrial ribosomes (55S)',
]))
story.append(sp(0.3))
story.append(section_head('ATP Synthesis Flowchart'))
story.append(flowbox([
'Glucose / Fatty Acids / Amino Acids',
' ↓',
'GLYCOLYSIS (cytoplasm) → Pyruvate → Acetyl-CoA',
' ↓',
'KREBS CYCLE (matrix) → NADH + FADH₂ + CO₂',
' ↓',
'ELECTRON TRANSPORT CHAIN (inner membrane cristae)',
' Complex I (NADH dehydrogenase) → pumps 4H⁺',
' Complex II (succinate DH) → no H⁺ pumping',
' Complex III (cytochrome bc1) → pumps 4H⁺',
' Complex IV (cytochrome c oxidase) → pumps 2H⁺ + O₂ → H₂O',
' ↓',
'H⁺ GRADIENT (intermembrane space)',
' ↓',
'ATP SYNTHASE (Complex V) — CHEMIOSMOSIS',
' H⁺ flows back into matrix → rotary motor → ATP synthesis',
' ↓',
'NET YIELD: ~30–32 ATP per glucose molecule',
]))
story.append(sp(0.3))
story.append(section_head('Functions of Mitochondria'))
story.append(make_table(
['Function', 'Detail'],
[
['ATP production', 'Oxidative phosphorylation; main energy currency of cell'],
['Krebs (TCA) cycle', 'Acetyl-CoA oxidation → NADH, FADH₂, CO₂'],
['β-oxidation', 'Fatty acid breakdown → Acetyl-CoA'],
['Apoptosis regulation', 'Cytochrome c release → caspase cascade activation'],
['Ca²⁺ homeostasis', 'Buffers cytoplasmic calcium; modulates signaling'],
['Thermogenesis', 'Uncoupling protein (UCP1) in brown fat → heat generation'],
['Steroid synthesis (partial)', 'Cholesterol side-chain cleavage in matrix'],
['Urea cycle (partial)', 'Carbamoyl phosphate synthetase I in matrix'],
['Self-replication', 'Binary fission; controlled by mtDNA'],
],
col_widths=[5*cm, CONTENT_W-5*cm],
hdr_color=C_TEAL
))
story.append(sp(0.3))
story.append(section_head('Mitochondrial Disorders'))
story.append(flowbox([
'mtDNA MUTATION',
' |',
' ├── Maternal inheritance (point mutations)',
' | ├── mt-tRNAᴸᵉᵘ mutation → MELAS',
' | ├── mt-tRNAᴸʸˢ mutation → MERRF',
' | └── Complex I gene (ND1/ND4/ND6) → LHON',
' |',
' └── Sporadic large deletions',
' ├── Kearns-Sayre Syndrome',
' ├── Pearson Syndrome',
' └── Progressive External Ophthalmoplegia (PEO)',
'',
'ORGANS MOST AFFECTED (highest energy demand):',
' Brain → Muscle → Heart → Eyes → Kidney',
]))
story.append(sp(0.3))
story.append(make_table(
['Disorder', 'Mutation / Defect', 'Key Clinical Features'],
[
['MELAS', 'mt-tRNAᴸᵉᵘ (A3243G); Complex I', 'Stroke-like episodes <40 yrs, lactic acidosis, myopathy, seizures'],
['MERRF', 'mt-tRNAᴸʸˢ (A8344G)', 'Myoclonus, epilepsy, cerebellar ataxia, ragged-red fibers'],
['LHON', 'Complex I genes (ND1, ND4, ND6)', 'Bilateral painless central vision loss; young males; maternal inheritance'],
['Kearns-Sayre', 'Large mtDNA deletion', 'Ptosis, ophthalmoplegia, pigmentary retinopathy, cardiac block'],
['Leigh Syndrome', 'Complex I/II/IV or PDH deficiency', 'Infantile neurodegeneration, hypotonia, brainstem dysfunction, ↑ lactate'],
['Pearson Syndrome', 'mtDNA deletion', 'Sideroblastic anaemia, exocrine pancreatic insufficiency'],
],
col_widths=[3.5*cm, 5.5*cm, CONTENT_W-9*cm],
hdr_color=C_RED
))
story.append(sp(0.2))
story.append(highlight_box(
'🔑 Key words: Ragged-red fibers (MERRF/MELAS on Gomori trichrome) | '
'Maternal inheritance | Lactic acidosis | "Heteroplasmy" = mixture of normal + mutant mtDNA',
bg=C_RED_LIGHT, border=C_RED
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# Q2 — LYSOSOMES
# ══════════════════════════════════════════════════════════════════════════════
story.append(qbanner(2, 'Lysosomes — Structure, Functions & Storage Disorders', C_PURPLE))
story.append(sp(0.3))
story.append(section_head('Structure'))
story.append(make_table(
['Feature', 'Detail'],
[
['Membrane', 'Single phospholipid bilayer; contains H⁺-ATPase (maintains acidic pH)'],
['pH', '4.5–5.0 (acidic) — optimal for hydrolytic enzymes'],
['Marker enzyme', 'Acid phosphatase'],
['Size', '0.1–1.2 µm; spherical/oval'],
['Enzymes (>60)', 'Proteases (cathepsins), lipases, nucleases, glycosidases, sulfatases, phosphatases'],
],
col_widths=[4*cm, CONTENT_W-4*cm],
hdr_color=C_PURPLE
))
story.append(sp(0.3))
story.append(section_head('Types of Lysosomes'))
story.append(make_table(
['Type', 'Description'],
[
['Primary lysosome', 'Newly formed; contains enzymes; not yet actively digesting'],
['Secondary lysosome', 'Formed by fusion of primary lysosome + phagosome/endosome; active digestion'],
['Autolysosome', 'Fuses with autophagosome → degrades cell\'s own damaged organelles (autophagy)'],
['Residual body', 'Secondary lysosome with undigested material (e.g., lipofuscin granules in aged cells)'],
],
col_widths=[4*cm, CONTENT_W-4*cm],
hdr_color=C_PURPLE
))
story.append(sp(0.3))
story.append(section_head('Lysosome Biogenesis Flowchart'))
story.append(flowbox([
'Rough ER → synthesises hydrolytic enzymes (inactive precursors)',
' ↓',
'Mannose-6-phosphate (M6P) tag added in cis-Golgi',
' ↓',
'Sorted in trans-Golgi Network (TGN) via M6P receptors',
' ↓',
'Packaged into clathrin-coated vesicles',
' ↓',
'Primary Lysosome (pH ≈5.0; enzymes activated)',
' ↓',
'Fuses with:',
' ┌──────────────────────┬───────────────────────┐',
' Phagosome Endosome Autophagosome',
' (bacteria/debris) (endocytosed material) (old organelles)',
' ↓ ↓ ↓',
' Phagolysosome Late endosome Autolysosome',
' ↓ ↓ ↓',
' └─────── Enzymatic digestion → Nutrients recycled ──────┘',
' ↓',
' Residual body (if undigested residue)',
]))
story.append(sp(0.3))
story.append(section_head('Functions'))
story.append(make_table(
['Function', 'Detail'],
[
['Intracellular digestion', 'Breakdown of proteins, lipids, carbs, nucleic acids'],
['Autophagy', 'Recycling of damaged organelles; cellular quality control'],
['Heterophagy (phagocytosis)', 'Macrophage destruction of pathogens'],
['Bone resorption', 'Osteoclasts release lysosomal enzymes to degrade bone matrix (H⁺ + cathepsin K)'],
['Apoptosis regulation', 'Lysosomal membrane permeabilisation → cathepsin B/D release'],
['Fertilisation', 'Acrosome of sperm = specialised lysosome (releases acrosin)'],
['Secretion', 'Mast cells (histamine), cytotoxic T cells (perforin/granzyme)'],
],
col_widths=[5*cm, CONTENT_W-5*cm],
hdr_color=C_PURPLE
))
story.append(sp(0.3))
story.append(section_head('Lysosomal Storage Disorders (LSDs) — Classification'))
story.append(flowbox([
'LYSOSOMAL STORAGE DISORDERS',
' |',
' ┌────────┼────────────────┬──────────────┐',
'Sphingolipidoses Mucopolysaccharidoses Glycogenoses Mucolipidoses',
'(sphingolipid (GAG accumulation) (glycogen',
' accumulation) | accumulation)',
' | MPS I Hurler\'s |',
' Gaucher\'s MPS II Hunter\'s Pompe disease',
' Niemann-Pick MPS III Sanfilippo (acid maltase↓)',
' Fabry\'s MPS IV Morquio',
' Krabbe\'s MPS VI Maroteaux-Lamy',
' Tay-Sachs',
]))
story.append(sp(0.3))
story.append(make_table(
['Disorder', 'Deficient Enzyme', 'Substrate', 'Key Features'],
[
['Gaucher\'s (most common)', 'Glucocerebrosidase', 'Glucocerebroside', 'Hepatosplenomegaly, bone pain, Gaucher cells (crinkled paper)'],
['Niemann-Pick A/B', 'Sphingomyelinase', 'Sphingomyelin', 'HSM, foam cells, cherry-red spot (Type A)'],
['Tay-Sachs', 'Hexosaminidase A', 'GM₂ ganglioside', 'Cherry-red spot, progressive neurodegeneration, no HSM'],
['Fabry\'s', 'α-Galactosidase A', 'Globotriaosylceramide','Angiokeratomas, renal failure, cardiomyopathy (X-linked)'],
['Krabbe\'s', 'Galactocerebrosidase', 'Galactocerebroside', 'Infantile neurodegeneration, globoid cells, neuropathy'],
['Hurler\'s (MPS I)', 'α-L-Iduronidase', 'Heparan + Dermatan SO₄','Coarse facies, corneal clouding, intellectual disability'],
['Pompe\'s', 'Acid α-glucosidase', 'Glycogen', 'Hypertrophic CM, hypotonia, hepatomegaly (floppy baby)'],
],
col_widths=[3.8*cm, 4*cm, 3.5*cm, CONTENT_W-11.3*cm],
hdr_color=C_PURPLE
))
story.append(sp(0.2))
story.append(highlight_box(
'🔑 Key words: M6P receptor | Acid phosphatase (marker) | Heterophagy vs Autophagy | '
'ERT available for Gaucher\'s, Fabry\'s, Pompe\'s | Cherry-red spot = Tay-Sachs + Niemann-Pick A',
bg=C_PURPLE_LIGHT, border=C_PURPLE
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# Q3 — FLUID MOSAIC MODEL
# ══════════════════════════════════════════════════════════════════════════════
story.append(qbanner(3, 'Fluid Mosaic Model of Biological Membranes', C_GREEN))
story.append(sp(0.3))
story.append(section_head('Definition'))
story.append(body(
'Proposed by <b>Singer and Nicolson (1972)</b>. Describes the plasma membrane as a '
'<b>phospholipid bilayer</b> in which proteins are embedded and can move freely — '
'like a mosaic of tiles floating in a fluid sea.'
))
story.append(sp(0.3))
story.append(section_head('Components'))
story.append(make_table(
['Component', 'Structure', 'Function'],
[
['Phospholipid bilayer', 'Amphipathic molecules; hydrophilic heads face aqueous environment; hydrophobic tails face inward', 'Selective barrier; basis of membrane structure'],
['Integral (Intrinsic) proteins', 'Span entire bilayer (transmembrane); multiple hydrophobic α-helices', 'Ion channels, transporters, receptors, enzymes'],
['Peripheral (Extrinsic) proteins', 'Loosely attached to surface by ionic/H-bonds', 'Cytoskeletal anchors, signal transduction'],
['Lipid-anchored proteins', 'Attached via covalent lipid anchor (GPI, myristoyl)', 'G-proteins, kinases, cell signaling'],
['Cholesterol', 'Intercalated between phospholipid tails', 'Stabilises fluidity (prevents extremes of fluidity/rigidity)'],
['Glycocalyx', 'Carbohydrate chains on glycoproteins and glycolipids (outer surface only)', 'Cell recognition, ABO antigens, adhesion, protection'],
],
col_widths=[4*cm, 6.5*cm, CONTENT_W-10.5*cm],
hdr_color=C_GREEN
))
story.append(sp(0.3))
story.append(section_head('Fluid Mosaic Model — Labelled Diagram'))
story.append(flowbox([
' EXTRACELLULAR FLUID',
' |',
' Glycoprotein Glycolipid Peripheral protein',
' ║ ║ |',
' ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ← Hydrophilic heads (phosphate)',
' ──────────────────────────────────────────────',
' ░░░░░░ [Integral protein] ░ [Cholesterol] ░ ← Hydrophobic tails (fatty acids)',
' ░░░░░░ [spans bilayer ] ░░░░░░░░░░░░░░░░░',
' ──────────────────────────────────────────────',
' ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ← Hydrophilic heads',
' | |',
' GPI-anchored protein Lipid-anchored protein',
' |',
' INTRACELLULAR FLUID (Cytoplasm)',
'',
'KEY: ● = hydrophilic phosphate head ░ = hydrophobic fatty acid tail',
]))
story.append(sp(0.3))
story.append(section_head('Key Properties'))
story.append(flowbox([
'FLUIDITY',
' ├── Proteins + lipids move laterally (sideways) → FLUID',
' ├── Flip-flop (transverse movement) is RARE (requires flippase enzyme)',
' ├── ↑ Unsaturated fatty acids (kinked tails) → ↑ fluidity',
' ├── ↑ Temperature → ↑ fluidity',
' └── Cholesterol → moderates fluidity (buffer at both extremes)',
'',
'ASYMMETRY (two leaflets differ)',
' ├── Outer leaflet: Phosphatidylcholine, sphingomyelin, glycolipids',
' └── Inner leaflet: Phosphatidylserine (flips out → apoptosis signal),',
' Phosphatidylethanolamine, Phosphoinositides (PIP₂, PIP₃)',
'',
'SELECTIVE PERMEABILITY',
' ├── Freely permeable: O₂, CO₂, H₂O, small uncharged lipids',
' ├── Impermeable: ions, large polar molecules, charged molecules',
' └── Require transport proteins: glucose, amino acids, ions',
]))
story.append(sp(0.3))
story.append(section_head('Functions of Plasma Membrane'))
story.append(make_table(
['Function', 'Mechanism'],
[
['Selective permeability', 'Controls entry/exit of all substances'],
['Cell signaling', 'Receptors (GPCRs, RTKs) recognise hormones/neurotransmitters'],
['Cell adhesion', 'Integrins, cadherins, selectins'],
['Cell recognition', 'Glycocalyx — ABO blood groups, MHC antigens, immune recognition'],
['Transport', 'Passive, active, and vesicular transport mechanisms'],
['Electrochemical gradient', 'Na⁺/K⁺ pump maintains resting membrane potential (−70 mV)'],
],
col_widths=[5*cm, CONTENT_W-5*cm],
hdr_color=C_GREEN
))
story.append(sp(0.2))
story.append(highlight_box(
'🔑 Key words: Singer and Nicolson 1972 | Amphipathic phospholipids | Integral vs Peripheral proteins | '
'Cholesterol = fluidity buffer | Glycocalyx = ABO/MHC | Phosphatidylserine flip = apoptosis marker',
bg=C_GREEN_LIGHT, border=C_GREEN
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# Q4 — MEMBRANE TRANSPORT
# ══════════════════════════════════════════════════════════════════════════════
story.append(qbanner(4, 'Membrane Transport Mechanisms', C_ORANGE))
story.append(sp(0.3))
story.append(section_head('Classification Flowchart'))
story.append(flowbox([
'MEMBRANE TRANSPORT',
' |',
' ┌─────┴──────────────────────────────────────────┐',
'PASSIVE (no energy) ACTIVE (energy required)',
'(↓ concentration gradient) (↑ against gradient)',
' | |',
' ├── 1. Simple Diffusion ┌──────────┴────────────┐',
' | (no protein) Primary Active Secondary Active',
' | (ATP-driven) (ion gradient)',
' ├── 2. Facilitated Diffusion | |',
' | ├── Carrier proteins Na⁺/K⁺-ATPase Symport: SGLT1',
' | └── Channel proteins H⁺-ATPase Antiport: Na⁺/H⁺',
' | Ca²⁺-ATPase',
' └── 3. Osmosis',
'',
'VESICULAR TRANSPORT',
' ├── Endocytosis:',
' | ├── Phagocytosis (particles >0.5 µm)',
' | ├── Pinocytosis (fluid/solutes)',
' | └── Receptor-mediated endocytosis (specific ligands, clathrin-coated)',
' └── Exocytosis (secretion)',
]))
story.append(sp(0.3))
story.append(section_head('1. Simple Diffusion'))
story.append(make_table(
['Aspect', 'Detail'],
[
['Definition', 'Movement DOWN concentration gradient; no energy; no proteins'],
['Substances', 'O₂, CO₂, N₂, ethanol, urea, steroid hormones, small uncharged lipids'],
['Fick\'s Law', 'Rate ∝ (Conc. gradient × Area × Permeability) / Membrane thickness'],
],
col_widths=[3.5*cm, CONTENT_W-3.5*cm],
hdr_color=C_ORANGE
))
story.append(sp(0.3))
story.append(section_head('2. Facilitated Diffusion (Passive + Protein-Mediated)'))
story.append(make_table(
['Protein Type', 'Mechanism', 'Examples', 'Regulation'],
[
['Carrier proteins', 'Bind molecule → conformational change → release on other side', 'GLUT1-4 (glucose), amino acid transporters', 'Saturable; substrate-specific'],
['Channel proteins (voltage-gated)', 'Open/close with membrane potential change', 'Na⁺, K⁺ channels in neurons', 'Depolarisation opens channel'],
['Channel proteins (ligand-gated)', 'Open when neurotransmitter binds', 'nAChR at NMJ (acetylcholine)', 'Ligand binding'],
['Channel proteins (mechanically-gated)', 'Open with physical deformation', 'Hair cells of inner ear', 'Mechanical stretch'],
],
col_widths=[3.5*cm, 4.5*cm, 4*cm, CONTENT_W-12*cm],
hdr_color=C_ORANGE
))
story.append(sp(0.3))
story.append(section_head('3. Active Transport'))
story.append(flowbox([
'PRIMARY ACTIVE TRANSPORT — Na⁺/K⁺-ATPase',
'',
' 3 Na⁺ bind INSIDE cell',
' ↓',
' ATP → ADP + Pᵢ (phosphorylation of pump)',
' ↓',
' Conformational change → 3 Na⁺ released OUTSIDE',
' ↓',
' 2 K⁺ bind OUTSIDE',
' ↓',
' Dephosphorylation → 2 K⁺ released INSIDE',
' ↓',
' Net: 3 Na⁺ OUT, 2 K⁺ IN (electrogenic → net -1 charge inside)',
'',
'SECONDARY ACTIVE TRANSPORT — uses Na⁺ gradient from Na⁺/K⁺-ATPase',
'',
' SYMPORT (same direction):',
' Na⁺ (↓ gradient) + Glucose → SGLT1 → both enter cell (intestine/kidney)',
'',
' ANTIPORT (opposite direction):',
' Na⁺ IN + H⁺ OUT via NHE (Na⁺/H⁺ exchanger) → acid-base regulation',
]))
story.append(sp(0.3))
story.append(section_head('4. Receptor-Mediated Endocytosis (RME) Flowchart'))
story.append(flowbox([
'Ligand binds specific receptor on cell surface',
' ↓',
'Receptor-ligand complex migrates to clathrin-coated pit',
' ↓',
'Membrane invaginates → clathrin-coated vesicle pinches off (dynamin-dependent)',
' ↓',
'Clathrin coat shed → early endosome formed',
' ↓',
'Acidification (H⁺-ATPase) → pH drops → ligand-receptor dissociation',
' ↓',
' ┌──────────────────────────────────────────────┐',
'Receptor recycled Ligand → late endosome',
'to cell surface ↓',
'(e.g., LDL receptor) Lysosome fusion → degradation',
'',
'Example: LDL receptor pathway → cholesterol uptake',
' Defect → Familial Hypercholesterolaemia',
]))
story.append(sp(0.3))
story.append(section_head('Clinical Correlates'))
story.append(make_table(
['Mechanism', 'Drug/Condition', 'Clinical Significance'],
[
['Na⁺/K⁺-ATPase inhibition', 'Digoxin (cardiac glycoside)', '↑ intracellular Na⁺ → ↑ Ca²⁺ via NCX → ↑ cardiac contractility (used in heart failure/AF)'],
['SGLT2 inhibition (kidney)', 'Dapagliflozin, Empagliflozin', 'Block glucose reabsorption → glucosuria → ↓ blood glucose (T2DM + heart failure treatment)'],
['RME defect', 'Familial Hypercholesterolaemia', 'LDL receptor mutation → LDL not internalised → ↑↑ plasma cholesterol → premature atherosclerosis'],
['Aquaporin channels', 'Diabetes insipidus', 'ADH stimulates AQP2 insertion in collecting duct; defect → inability to concentrate urine'],
],
col_widths=[4*cm, 4.5*cm, CONTENT_W-8.5*cm],
hdr_color=C_ORANGE
))
story.append(sp(0.2))
story.append(highlight_box(
'🔑 Key words: Na⁺/K⁺-ATPase = 3 Na⁺ out, 2 K⁺ in, 1 ATP | SGLT1 (intestine/kidney) vs SGLT2 (kidney only) | '
'Clathrin-coated pits = RME | Pinocytosis = cell drinking | Phagocytosis = cell eating',
bg=C_ORANGE_LIGHT, border=C_ORANGE
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# Q5 — CARBOHYDRATES
# ══════════════════════════════════════════════════════════════════════════════
story.append(qbanner(5, 'Carbohydrates — Definition, Classification & Glycosaminoglycans', C_TEAL))
story.append(sp(0.3))
story.append(section_head('Definition'))
story.append(body(
'Carbohydrates are <b>polyhydroxy aldehydes or polyhydroxy ketones</b>, or compounds '
'that yield these on hydrolysis. General empirical formula: <b>(CH₂O)n</b>. '
'Also called <b>saccharides</b>. Composed of C, H, and O.'
))
story.append(sp(0.3))
story.append(section_head('Classification Flowchart'))
story.append(flowbox([
'CARBOHYDRATES',
' |',
' ├── MONOSACCHARIDES (cannot be hydrolysed further)',
' | ├── Trioses (C3): Glyceraldehyde (aldose), DHAP (ketose)',
' | ├── Pentoses (C5): Ribose (RNA), Deoxyribose (DNA), Xylulose',
' | └── Hexoses (C6):',
' | ├── Aldoses: Glucose, Galactose, Mannose',
' | └── Ketoses: Fructose',
' |',
' ├── DISACCHARIDES (2 monosaccharides linked by glycosidic bond)',
' | ├── Sucrose = Glucose + Fructose (α1→β2; plants)',
' | ├── Lactose = Galactose + Glucose (β1→4; milk)',
' | └── Maltose = Glucose + Glucose (α1→4; starch digest)',
' |',
' ├── OLIGOSACCHARIDES (3–10 units): Raffinose, Stachyose',
' |',
' └── POLYSACCHARIDES (>10 units)',
' ├── HOMOPOLYSACCHARIDES (same monomer)',
' | ├── Starch: Amylose (α1→4) + Amylopectin (α1→4 + α1→6)',
' | ├── Glycogen: α1→4 + α1→6 (highly branched; liver/muscle)',
' | └── Cellulose: β1→4 (structural; plants; indigestible)',
' |',
' └── HETEROPOLYSACCHARIDES (different monomers)',
' └── GLYCOSAMINOGLYCANS (GAGs) ← see below',
]))
story.append(sp(0.3))
story.append(section_head('Key Monosaccharides'))
story.append(make_table(
['Monosaccharide', 'Carbons', 'Type', 'Biological Role'],
[
['Glucose', 'C6', 'Aldohexose', 'Primary energy fuel; blood sugar; substrate for glycolysis'],
['Fructose', 'C6', 'Ketohexose', 'Fruit sugar; enters glycolysis at fructose-6-P or DHAP'],
['Galactose', 'C6', 'Aldohexose', 'Component of lactose; brain galactolipids; converted to glucose-1-P'],
['Ribose', 'C5', 'Aldopentose', 'Component of RNA, ATP, NAD⁺, FAD, CoA'],
['Deoxyribose', 'C5', 'Aldopentose', 'Component of DNA backbone'],
['Glyceraldehyde','C3','Aldotriose', 'Glycolysis intermediate; simplest monosaccharide'],
],
col_widths=[3.5*cm, 2*cm, 3*cm, CONTENT_W-8.5*cm],
hdr_color=C_TEAL
))
story.append(sp(0.3))
story.append(section_head('Polysaccharides Comparison'))
story.append(make_table(
['Property', 'Starch', 'Glycogen', 'Cellulose'],
[
['Monomer', 'Glucose', 'Glucose', 'Glucose'],
['Bond', 'α-1,4 + α-1,6', 'α-1,4 + α-1,6', 'β-1,4'],
['Branching', 'Less branched', 'Highly branched (every 8–12 glucose)', 'Linear; no branching'],
['Location', 'Plants (potato, rice, wheat)', 'Liver + Muscle (animals)', 'Plant cell walls'],
['Function', 'Energy storage (plants)', 'Energy storage (animals)', 'Structural support'],
['Digestibility', 'Digestible (amylase)', 'Digestible', 'NOT digestible (no β-glucosidase in humans)'],
],
col_widths=[3.5*cm, 4*cm, 5*cm, CONTENT_W-12.5*cm],
hdr_color=C_TEAL
))
story.append(sp(0.3))
story.append(section_head('Glycosaminoglycans (GAGs) — Detailed Note'))
story.append(body(
'GAGs are <b>long, unbranched heteropolysaccharides</b> of repeating disaccharide units consisting of '
'an <b>amino sugar</b> (GlcNAc or GalNAc) + a <b>uronic acid</b> (GlcA or IdoA) or galactose. '
'Highly negatively charged (sulfate + carboxyl groups) → attract water → form gel-like ECM ground substance.'
))
story.append(sp(0.2))
story.append(section_head('GAG Classification Flowchart'))
story.append(flowbox([
'GLYCOSAMINOGLYCANS (GAGs)',
' |',
' ┌────┴─────────────────────────────────────────────────┐',
'Non-sulfated Sulfated GAGs',
' | ┌────────┬────────────────┼────────────┐',
'Hyaluronic acid Chondroitin-SO₄ Dermatan-SO₄ Keratan-SO₄ Heparan-SO₄/Heparin',
'(NOT protein-bound) | |',
'(no protein core) Most abundant GAG Most sulfated = Heparin',
' in cartilage',
]))
story.append(sp(0.3))
story.append(make_table(
['GAG', 'Amino Sugar', 'Uronic Acid', 'Location', 'Function'],
[
['Hyaluronic acid', 'GlcNAc', 'GlcA', 'Synovial fluid, vitreous humor, cartilage, skin', 'Lubrication, shock absorption, wound healing'],
['Chondroitin-SO₄', 'GalNAc', 'GlcA', 'Cartilage, tendon, bone, aorta', 'Structural integrity, compressive strength'],
['Dermatan-SO₄', 'GalNAc', 'IdoA', 'Skin, heart valves, blood vessels', 'Wound healing, coagulation, anticoagulation'],
['Heparan-SO₄', 'GlcNAc', 'GlcA/IdoA', 'Cell surfaces, basement membranes', 'Growth factor binding, cell adhesion, angiogenesis'],
['Heparin', 'GlcNS', 'IdoA-2-SO₄', 'Mast cell granules', 'Anticoagulant: binds antithrombin III → inhibits thrombin + Xa'],
['Keratan-SO₄', 'GlcNAc', 'Galactose', 'Cornea, cartilage, intervertebral disc', 'Corneal transparency, cartilage structure'],
],
col_widths=[3.5*cm, 2.5*cm, 3*cm, 4.5*cm, CONTENT_W-13.5*cm],
hdr_color=C_TEAL
))
story.append(sp(0.3))
story.append(section_head('Proteoglycans'))
story.append(flowbox([
'GAG chains attached covalently to CORE PROTEIN → PROTEOGLYCAN',
'',
' Core Protein',
' ├── GAG chain 1 (chondroitin sulfate)',
' ├── GAG chain 2',
' └── GAG chain 3',
'',
' Proteoglycan + Hyaluronic acid backbone → AGGRECAN aggregate',
' → Found in articular cartilage → resists compressive forces',
'',
'Examples:',
' Aggrecan → cartilage (chondroitin-SO₄ + keratan-SO₄)',
' Perlecan → basement membrane (heparan-SO₄)',
' Versican → skin, blood vessels',
' Syndecan → cell surface heparan-SO₄ proteoglycan',
]))
story.append(sp(0.3))
story.append(section_head('Clinical Significance of GAGs'))
story.append(make_table(
['Condition', 'GAG Involved', 'Mechanism / Relevance'],
[
['Osteoarthritis', 'Chondroitin, Keratan SO₄', '↓ proteoglycan in cartilage → loss of compressive strength → joint degeneration'],
['Mucopolysaccharidoses', 'All GAG types', 'Deficiency of lysosomal GAG-degrading enzymes → GAG accumulation (Hurler, Hunter, Morquio, Sanfilippo, etc.)'],
['Heparin therapy', 'Heparin', 'Binds antithrombin III → inhibits thrombin (IIa) + Factor Xa → anticoagulation (DVT/PE treatment)'],
['Corneal clouding', 'Keratan, Dermatan SO₄', 'GAG accumulation in corneal stroma → opacification (seen in Hurler\'s, Morquio)'],
['Marfan syndrome', 'Altered ECM proteoglycans', 'FBN1 mutation → disrupted ECM → aortic dilation, lens dislocation'],
],
col_widths=[3.5*cm, 4*cm, CONTENT_W-7.5*cm],
hdr_color=C_TEAL
))
story.append(sp(0.2))
story.append(highlight_box(
'🔑 Key words: (CH₂O)n formula | Reducing vs non-reducing sugars | Sucrose = non-reducing | '
'Lactose intolerance = lactase deficiency | GAGs = negatively charged | Heparin = most sulfated GAG | '
'Hyaluronic acid = only GAG not linked to protein | M6P = lysosomal targeting signal',
bg=C_MINT, border=C_TEAL
))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════════
# SUMMARY / RAPID REVIEW PAGE
# ══════════════════════════════════════════════════════════════════════════════
story.append(qbanner(0, 'RAPID REVIEW — One-Page Summary', C_NAVY))
story.append(sp(0.4))
story.append(make_table(
['Q#', 'Topic', 'Must-Know Keywords', 'Classic Exam Trap'],
[
['Q1', 'Mitochondria',
'Powerhouse; cristae; mtDNA 37 genes; maternal inheritance; Complex I–V; ATP synthase',
'MELAS vs MERRF: MELAS = stroke-like episodes; MERRF = myoclonus + ragged-red fibers'],
['Q2', 'Lysosomes',
'Acid phosphatase; M6P receptor; pH 4.5–5; autophagy vs heterophagy; ERT for Gaucher/Fabry/Pompe',
'Tay-Sachs = NO hepatosplenomegaly; Niemann-Pick = cherry-red spot + HSM'],
['Q3', 'Fluid Mosaic Model',
'Singer & Nicolson 1972; amphipathic; integral vs peripheral; cholesterol = fluidity buffer; glycocalyx',
'Cholesterol ↑ at cold temps prevents rigidity; ↑ unsaturated FA = more fluid'],
['Q4', 'Membrane Transport',
'Na⁺/K⁺-ATPase (3Na out, 2K in, 1 ATP); SGLT1/SGLT2; clathrin-coated pits; digoxin',
'Primary = ATP directly; Secondary = uses Na⁺ gradient; facilitated = still passive'],
['Q5', 'Carbohydrates + GAGs',
'Aldose vs ketose; sucrose α1→β2; lactose β1→4; Hyaluronic acid not protein-bound; heparin = anticoagulant',
'Heparin = most sulfated; Hyaluronic acid = only non-protein-linked GAG; Pompe = glycogen LSD'],
],
col_widths=[1.2*cm, 3.5*cm, 7.5*cm, CONTENT_W-12.2*cm],
hdr_color=C_NAVY
))
story.append(sp(0.4))
story.append(section_head('Disorders Quick Reference'))
story.append(make_table(
['Disorder', 'Category', 'Key Defect', 'Hallmark Feature'],
[
['MELAS', 'Mitochondrial', 'mt-tRNAᴸᵉᵘ mutation', 'Stroke-like episodes, lactic acidosis, <40 yrs'],
['MERRF', 'Mitochondrial', 'mt-tRNAᴸʸˢ mutation', 'Myoclonus, ragged-red fibers, ataxia'],
['LHON', 'Mitochondrial', 'Complex I (ND1/4/6)', 'Bilateral painless vision loss; young males'],
['Kearns-Sayre', 'Mitochondrial', 'Large mtDNA deletion', 'Ptosis, ophthalmoplegia, heart block'],
['Gaucher\'s', 'LSD (sphingolipid)','Glucocerebrosidase↓', 'Hepatosplenomegaly, bone pain, Gaucher cells'],
['Tay-Sachs', 'LSD (sphingolipid)','Hexosaminidase A↓', 'Cherry-red spot, neurodegeneration, NO HSM'],
['Hurler\'s (MPS I)', 'MPS (GAG)', 'α-L-Iduronidase↓', 'Coarse facies, corneal clouding, gargoylism'],
['Pompe\'s', 'LSD (glycogen)', 'Acid α-glucosidase↓', 'HCM, floppy baby, hepatomegaly'],
['Familial Hyperchol.', 'Transport defect', 'LDL receptor (RME defect)', 'Premature atherosclerosis, tendon xanthomas'],
],
col_widths=[4*cm, 3.5*cm, 4*cm, CONTENT_W-11.5*cm],
hdr_color=C_GREY
))
story.append(sp(0.4))
story.append(note('Sources: Guyton & Hall Textbook of Medical Physiology | Junqueira\'s Basic Histology | '
'Histology: A Text and Atlas (Pawlina) | Harper\'s Illustrated Biochemistry'))
# ── BUILD PDF ─────────────────────────────────────────────────────────────────
output_path = '/home/daytona/workspace/mbbs-revision/MBBS_Quick_Reference.pdf'
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=1.5*cm, bottomMargin=1.2*cm,
title='MBBS Quick Reference — Cell Biology & Biochemistry',
author='Orris Medical',
subject='MBBS Exam Revision'
)
doc.build(story, onFirstPage=add_page_decorations, onLaterPages=add_page_decorations)
print(f'PDF created: {output_path}')
cd /home/daytona/workspace/mbbs-revision && python3 make_pdf.py 2>&1
ls -lh /home/daytona/workspace/mbbs-revision/MBBS_Quick_Reference.pdf
MBBS Quick Reference
PDF Document · PDF
| Page | Content |
|---|---|
| Cover | Table of contents with all 5 topics and subtopics |
| Page 2 | Q1 Mitochondria - structure table, structure flowchart, ATP synthesis flowchart, functions table, disorder classification flowchart, disorders table (MELAS/MERRF/LHON/KSS/Leigh/Pearson) |
| Page 3 | Q2 Lysosomes - structure, biogenesis flowchart (ER→Golgi→lysosome), types, functions, LSD classification tree, 7-disorder table |
| Page 4 | Q3 Fluid Mosaic Model - components table, labelled ASCII diagram, properties flowchart, asymmetry, membrane functions |
| Page 5 | Q4 Membrane Transport - master classification flowchart, simple diffusion + Fick's law, facilitated diffusion table, Na⁺/K⁺-ATPase step-by-step, RME flowchart, clinical correlates (digoxin, SGLT2 inhibitors) |
| Page 6 | Q5 Carbohydrates - classification flowchart, monosaccharide table, polysaccharide comparison, GAG classification flowchart, GAG table, proteoglycan structure, clinical significance + Rapid Review one-page summary of all 5 questions |