biochemistry note by Dr Maurya Satya pdf
Dr Maurya Satya biochemistry notes PDF download
"Dr Maurya Satya" biochemistry notes medical PDF
www.mayursayta.com (contact: 9714941350), available on Course Hero. This may be what you are looking for - note the name is "Mayur Sayta" not "Maurya Satya."www.mayursayta.com directly or searching the Course Hero link above.Clarify the author name or institution for more specific results
Mayur Sayta Medical Coaching biochemistry notes PDF download MBBS
mayursayta.com biochemistry notes PDF free download
https://neetpassionate.com/2024/08/11/smci-notes-physiology-…
| Source | Link | Notes |
|---|---|---|
| Studocu | SMCI Biochemistry Notes on Studocu | Free preview/download with account |
| Course Hero | biochemistry-satya.pdf on Course Hero | Requires account/unlocks |
| Official SMCI App | smci.in | Download the SMCI app from the website - notes are available inside the app |
| Official Course Page | clhkx.courses.store/372834 | Biochemistry course with free PDF content section |
Create a summary document of these biochemistry notes
https://www.studocu.com/in/document/kaloji-narayana-rao-univ…
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"
~/smci-biochemistry/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfgen import canvas
OUTPUT = "/home/daytona/workspace/smci-biochemistry/SMCI_Biochemistry_Summary.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1A237E")
MED_BLUE = colors.HexColor("#1565C0")
LIGHT_BLUE = colors.HexColor("#E3F2FD")
ACCENT = colors.HexColor("#0288D1")
GREEN = colors.HexColor("#2E7D32")
GREEN_BG = colors.HexColor("#E8F5E9")
ORANGE = colors.HexColor("#E65100")
ORANGE_BG = colors.HexColor("#FFF3E0")
PURPLE = colors.HexColor("#4A148C")
PURPLE_BG = colors.HexColor("#F3E5F5")
GRAY = colors.HexColor("#455A64")
LIGHT_GRAY = colors.HexColor("#ECEFF1")
WHITE = colors.white
# ── Styles ───────────────────────────────────────────────────────────────────
def build_styles():
base = getSampleStyleSheet()
styles = {}
styles['cover_title'] = ParagraphStyle(
'cover_title', fontSize=28, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_CENTER, spaceAfter=8, leading=34)
styles['cover_sub'] = ParagraphStyle(
'cover_sub', fontSize=14, fontName='Helvetica',
textColor=colors.HexColor("#B3E5FC"), alignment=TA_CENTER, spaceAfter=4)
styles['cover_author'] = ParagraphStyle(
'cover_author', fontSize=12, fontName='Helvetica-Bold',
textColor=colors.HexColor("#FFD54F"), alignment=TA_CENTER, spaceAfter=4)
styles['chapter_title'] = ParagraphStyle(
'chapter_title', fontSize=18, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_LEFT, spaceAfter=6, leading=22)
styles['section'] = ParagraphStyle(
'section', fontSize=13, fontName='Helvetica-Bold',
textColor=MED_BLUE, spaceBefore=10, spaceAfter=4)
styles['subsection'] = ParagraphStyle(
'subsection', fontSize=11, fontName='Helvetica-Bold',
textColor=GREEN, spaceBefore=6, spaceAfter=3)
styles['body'] = ParagraphStyle(
'body', fontSize=10, fontName='Helvetica',
textColor=GRAY, leading=15, spaceAfter=4, alignment=TA_JUSTIFY)
styles['bullet'] = ParagraphStyle(
'bullet', fontSize=10, fontName='Helvetica',
textColor=GRAY, leading=14, spaceAfter=2,
leftIndent=14, bulletIndent=4)
styles['key_point'] = ParagraphStyle(
'key_point', fontSize=10, fontName='Helvetica-Bold',
textColor=ORANGE, leading=14, spaceAfter=2, leftIndent=14)
styles['mnemonic'] = ParagraphStyle(
'mnemonic', fontSize=10, fontName='Helvetica-BoldOblique',
textColor=PURPLE, leading=14, spaceAfter=2, leftIndent=14)
styles['table_header'] = ParagraphStyle(
'table_header', fontSize=9, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_CENTER)
styles['table_cell'] = ParagraphStyle(
'table_cell', fontSize=9, fontName='Helvetica',
textColor=GRAY, alignment=TA_LEFT)
styles['toc_entry'] = ParagraphStyle(
'toc_entry', fontSize=11, fontName='Helvetica',
textColor=GRAY, spaceAfter=4, leading=16)
styles['toc_chapter'] = ParagraphStyle(
'toc_chapter', fontSize=12, fontName='Helvetica-Bold',
textColor=MED_BLUE, spaceAfter=3, spaceBefore=4)
return styles
# ── Helpers ───────────────────────────────────────────────────────────────────
def chapter_header(title, number, styles, story):
story.append(PageBreak())
header_data = [[Paragraph(f"Chapter {number} | {title}", styles['chapter_title'])]]
t = Table(header_data, colWidths=[17*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
('ROUNDEDCORNERS', [8]),
('TOPPADDING', (0,0), (-1,-1), 10),
('BOTTOMPADDING', (0,0), (-1,-1), 10),
('LEFTPADDING', (0,0), (-1,-1), 14),
]))
story.append(t)
story.append(Spacer(1, 0.3*cm))
def section_box(title, styles, story, color=LIGHT_BLUE, text_color=MED_BLUE):
data = [[Paragraph(title, ParagraphStyle('sh', fontSize=12, fontName='Helvetica-Bold',
textColor=text_color, leading=16))]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), color),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 10),
('LINEBELOW', (0,0), (-1,-1), 1, text_color),
]))
story.append(t)
story.append(Spacer(1, 0.15*cm))
def key_box(label, content, styles, story, bg=ORANGE_BG, border=ORANGE):
data = [[Paragraph(f"<b>{label}:</b> {content}",
ParagraphStyle('kb', fontSize=9.5, fontName='Helvetica',
textColor=GRAY, leading=14))]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 10),
('LINEBEFOREA', (0,0), (0,-1), 3, border),
('LINEBEFORE', (0,0), (0,-1), 3, border),
]))
story.append(t)
story.append(Spacer(1, 0.15*cm))
def make_table(headers, rows, styles, col_widths=None):
if col_widths is None:
w = 17*cm / len(headers)
col_widths = [w] * len(headers)
header_row = [Paragraph(h, ParagraphStyle('th', fontSize=9, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_CENTER))
for h in headers]
data = [header_row]
for row in rows:
data.append([Paragraph(str(c), ParagraphStyle('td', fontSize=9, fontName='Helvetica',
textColor=GRAY, leading=13))
for c in row])
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), MED_BLUE),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#B0BEC5")),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
return t
def B(text): return f"<b>{text}</b>"
def I(text): return f"<i>{text}</i>"
# ── Document builder ──────────────────────────────────────────────────────────
def build_pdf():
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="SMCI Biochemistry Summary Notes",
author="Dr. Mayur Sayta - SMCI"
)
S = build_styles()
story = []
# ── COVER PAGE ──────────────────────────────────────────────────────────
story.append(Spacer(1, 3*cm))
cover_bg = Table([['']], colWidths=[17*cm], rowHeights=[6*cm])
cover_bg.setStyle(TableStyle([('BACKGROUND', (0,0), (-1,-1), DARK_BLUE)]))
story.append(cover_bg)
story.append(Spacer(1, -6*cm)) # overlap trick via negative space not ideal; use canvas later
# Title block
title_data = [[
Paragraph("BIOCHEMISTRY", S['cover_title']),
],[
Paragraph("Complete Summary Notes - MBBS 1st Year", S['cover_sub']),
],[
Paragraph("Sayta Medical Coaching Institute (SMCI)", S['cover_author']),
],[
Paragraph("Dr. Mayur Sayta | MBBS, MD", S['cover_author']),
]]
cover_table = Table(title_data, colWidths=[17*cm])
cover_table.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
('TOPPADDING', (0,0), (-1,-1), 8),
('BOTTOMPADDING', (0,0), (-1,-1), 8),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
]))
story.append(cover_table)
story.append(Spacer(1, 0.5*cm))
badge_data = [[
Paragraph("MBBS 1st Year", ParagraphStyle('b1', fontSize=11, fontName='Helvetica-Bold',
textColor=DARK_BLUE, alignment=TA_CENTER)),
Paragraph("All Topics Covered", ParagraphStyle('b2', fontSize=11, fontName='Helvetica-Bold',
textColor=DARK_BLUE, alignment=TA_CENTER)),
Paragraph("Exam-Ready Notes", ParagraphStyle('b3', fontSize=11, fontName='Helvetica-Bold',
textColor=DARK_BLUE, alignment=TA_CENTER)),
]]
badge_table = Table(badge_data, colWidths=[5.5*cm, 5.5*cm, 5.5*cm])
badge_table.setStyle(TableStyle([
('BACKGROUND', (0,0), (0,0), colors.HexColor("#FFF9C4")),
('BACKGROUND', (1,0), (1,0), colors.HexColor("#C8E6C9")),
('BACKGROUND', (2,0), (2,0), colors.HexColor("#BBDEFB")),
('TOPPADDING', (0,0), (-1,-1), 8),
('BOTTOMPADDING', (0,0), (-1,-1), 8),
('GRID', (0,0), (-1,-1), 1, WHITE),
]))
story.append(badge_table)
story.append(PageBreak())
# ── TABLE OF CONTENTS ───────────────────────────────────────────────────
section_box("TABLE OF CONTENTS", S, story)
story.append(Spacer(1, 0.2*cm))
toc_items = [
("1", "Amino Acids", "Structure, classification, properties, reactions"),
("2", "Proteins", "Structure, types, denaturation, plasma proteins"),
("3", "Enzymes", "Classification, kinetics, inhibition, regulation"),
("4", "Carbohydrates", "Classification, structure, digestion"),
("5", "Carbohydrate Metabolism", "Glycolysis, TCA cycle, HMP shunt, glycogen"),
("6", "Lipids & Lipid Metabolism", "Fatty acids, beta-oxidation, ketone bodies, cholesterol"),
("7", "Proteins & Amino Acid Metabolism", "Transamination, urea cycle, one-carbon metabolism"),
("8", "Nucleotides & Nucleic Acids", "Structure, synthesis, degradation"),
("9", "DNA, RNA & Molecular Biology", "Replication, transcription, translation, mutations"),
("10", "Vitamins", "Fat-soluble and water-soluble vitamins"),
("11", "Minerals & Trace Elements", "Ca, Fe, Zn, Cu, I, F, Se"),
("12", "Bioenergetics", "ATP, oxidative phosphorylation, ETC"),
("13", "Hormones & Biochemistry of Disease", "Hormones, diabetes, jaundice, PKU"),
]
for num, title, desc in toc_items:
row_data = [[
Paragraph(f"<b>Ch {num}</b>", ParagraphStyle('tn', fontSize=10, fontName='Helvetica-Bold',
textColor=MED_BLUE, alignment=TA_CENTER)),
Paragraph(f"<b>{title}</b>", ParagraphStyle('tt', fontSize=10, fontName='Helvetica-Bold',
textColor=DARK_BLUE)),
Paragraph(desc, ParagraphStyle('td2', fontSize=9, fontName='Helvetica',
textColor=GRAY, leading=13)),
]]
t = Table(row_data, colWidths=[1.5*cm, 5*cm, 10.5*cm])
t.setStyle(TableStyle([
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LINEBELOW', (0,0), (-1,-1), 0.5, colors.HexColor("#CFD8DC")),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(t)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 1 - AMINO ACIDS
# ════════════════════════════════════════════════════════════════════════
chapter_header("AMINO ACIDS", 1, S, story)
story.append(Paragraph(
"Amino acids are the building blocks of proteins. Each has an amino group (-NH2), "
"a carboxyl group (-COOH), a hydrogen atom, and a variable side chain (R group) "
"attached to the alpha carbon.", S['body']))
section_box("Classification of Amino Acids", S, story)
story.append(Paragraph(B("A. Based on R-Group (Side Chain)"), S['subsection']))
aa_class = make_table(
["Category", "Examples", "Key Feature"],
[
["Non-polar (Hydrophobic)", "Glycine, Alanine, Valine, Leucine, Isoleucine, Proline, Phenylalanine, Methionine, Tryptophan", "No charge; found in protein interior"],
["Polar Uncharged", "Serine, Threonine, Cysteine, Tyrosine, Asparagine, Glutamine", "Can H-bond with water"],
["Positively Charged (Basic)", "Lysine, Arginine, Histidine", "Carry +ve charge at pH 7"],
["Negatively Charged (Acidic)", "Aspartate, Glutamate", "Carry -ve charge at pH 7"],
],
S, col_widths=[3.5*cm, 8*cm, 5.5*cm]
)
story.append(aa_class)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(B("B. Essential vs. Non-Essential Amino Acids"), S['subsection']))
key_box("Mnemonic for Essential AAs (10)",
"PVT TIM HaLL - Phenylalanine, Valine, Threonine, Tryptophan, Isoleucine, Methionine, Histidine, Arginine (semi-essential), Leucine, Lysine",
S, story, bg=PURPLE_BG, border=PURPLE)
key_box("Conditionally Essential",
"Arginine (children), Histidine (infants), Cysteine and Tyrosine (if precursors absent)",
S, story, bg=GREEN_BG, border=GREEN)
story.append(Paragraph(B("C. Based on Metabolic Fate"), S['subsection']))
met_table = make_table(
["Type", "Definition", "Examples"],
[
["Glucogenic", "Converted to glucose via gluconeogenesis", "Alanine, Glutamate, Aspartate, Glycine, Serine, most others"],
["Ketogenic", "Converted to ketone bodies / acetyl-CoA only", "Leucine, Lysine (purely ketogenic)"],
["Both", "Can form both glucose and ketone bodies", "Isoleucine, Phenylalanine, Tyrosine, Tryptophan, Threonine"],
],
S, col_widths=[3*cm, 6*cm, 8*cm]
)
story.append(met_table)
story.append(Spacer(1, 0.2*cm))
section_box("Important Properties", S, story)
props = [
("Zwitterion", "At isoelectric point (pI), amino acid carries equal +ve and -ve charges; net charge = 0."),
("pKa Values", "pKa1 (~2) = alpha-COOH; pKa2 (~9-10) = alpha-NH3+; pKa3 (side chain, if ionisable)."),
("Ninhydrin Reaction", "All alpha-amino acids give a purple colour (Ruhemann's purple) with ninhydrin. Proline gives yellow."),
("Biuret Test", "Proteins with 2+ peptide bonds give violet colour - NOT a test for free amino acids."),
("Sulfur-containing AAs", "Methionine, Cysteine, Cystine (disulfide bond between 2 cysteines)."),
("Optical Activity", "All amino acids (except Glycine) are optically active. L-form found in proteins."),
]
for title, desc in props:
story.append(Paragraph(f"<b>• {title}:</b> {desc}", S['bullet']))
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 2 - PROTEINS
# ════════════════════════════════════════════════════════════════════════
chapter_header("PROTEINS", 2, S, story)
story.append(Paragraph(
"Proteins are polymers of amino acids linked by peptide bonds (between -COOH of one and -NH2 of another, with loss of water). "
"They perform structural, catalytic, transport, regulatory, and defense functions.", S['body']))
section_box("Levels of Protein Structure", S, story)
struct_table = make_table(
["Level", "Description", "Bonds Involved"],
[
["Primary (1°)", "Sequence of amino acids in polypeptide chain", "Peptide bonds (covalent)"],
["Secondary (2°)", "Local folding: alpha-helix or beta-pleated sheet", "Hydrogen bonds"],
["Tertiary (3°)", "3D folding of entire polypeptide", "H-bonds, disulfide bonds, hydrophobic, ionic interactions"],
["Quaternary (4°)", "Association of 2+ polypeptide subunits", "Same as tertiary (no peptide bonds between subunits)"],
],
S, col_widths=[3*cm, 7*cm, 7*cm]
)
story.append(struct_table)
story.append(Spacer(1, 0.2*cm))
section_box("Classification of Proteins", S, story)
story.append(Paragraph(B("By Shape:"), S['subsection']))
for item in [
"Fibrous proteins - insoluble, structural role (collagen, keratin, fibrin, elastin)",
"Globular proteins - soluble, dynamic role (enzymes, hormones, antibodies, haemoglobin)",
]:
story.append(Paragraph(f"• {item}", S['bullet']))
story.append(Paragraph(B("By Composition:"), S['subsection']))
comp_table = make_table(
["Type", "Prosthetic Group", "Example"],
[
["Simple proteins", "None (only amino acids)", "Albumin, Globulin"],
["Glycoproteins", "Carbohydrate", "Immunoglobulins, ABO blood group substances"],
["Lipoproteins", "Lipid", "HDL, LDL, VLDL, chylomicrons"],
["Metalloproteins", "Metal ion", "Haemoglobin (Fe), Carbonic anhydrase (Zn)"],
["Nucleoproteins", "Nucleic acid", "Chromosomes, ribosomes"],
["Phosphoproteins", "Phosphate", "Casein (milk), Ovalbumin"],
["Chromoproteins", "Pigment", "Haemoglobin, Cytochromes, Rhodopsin"],
],
S, col_widths=[4*cm, 5*cm, 8*cm]
)
story.append(comp_table)
story.append(Spacer(1, 0.2*cm))
section_box("Plasma Proteins", S, story)
plasma_table = make_table(
["Protein", "Normal Value", "Function / Clinical Significance"],
[
["Total Protein", "6–8 g/dL", "Nutritional status, liver/kidney disease"],
["Albumin", "3.5–5 g/dL", "Oncotic pressure, drug transport; LOW in cirrhosis, nephrotic syndrome"],
["Globulins", "2–3.5 g/dL", "Immunity (Ig), transport (transferrin, ceruloplasmin)"],
["Fibrinogen", "200–400 mg/dL", "Clotting; converted to fibrin by thrombin"],
["C-Reactive Protein", "< 1 mg/dL", "Acute phase reactant; marker of inflammation"],
["Transferrin", "200–360 mg/dL", "Iron transport; low in iron deficiency, high in iron overload"],
],
S, col_widths=[3.5*cm, 3.5*cm, 10*cm]
)
story.append(plasma_table)
story.append(Spacer(1, 0.2*cm))
section_box("Denaturation", S, story)
story.append(Paragraph(
"Loss of 3D structure (2°, 3°, 4°) without breaking peptide bonds (1° structure intact). "
"Caused by heat, extreme pH, urea, guanidinium, organic solvents, detergents. "
"Result: loss of biological activity, increased reactivity of -SH groups, reduced solubility.", S['body']))
key_box("Reversible vs. Irreversible",
"Reversible denaturation = renaturation possible (e.g. RNase denatured with beta-mercaptoethanol + urea). "
"Irreversible = aggregation occurs (e.g. boiled egg white).", S, story)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 3 - ENZYMES
# ════════════════════════════════════════════════════════════════════════
chapter_header("ENZYMES", 3, S, story)
story.append(Paragraph(
"Enzymes are biological catalysts (mostly proteins; ribozymes are RNA enzymes). "
"They lower the activation energy, are not consumed in reactions, and are highly specific.", S['body']))
section_box("IUB Classification (6 Classes)", S, story)
enz_table = make_table(
["Class", "Reaction Catalysed", "Example"],
[
["1. Oxidoreductases", "Oxidation-reduction (electron transfer)", "LDH, Glucose oxidase, Cytochrome oxidase"],
["2. Transferases", "Transfer of functional groups", "Aminotransferases (ALT, AST), Kinases"],
["3. Hydrolases", "Hydrolysis reactions", "Lipase, Amylase, Pepsin, Trypsin"],
["4. Lyases", "Addition/removal without water/redox", "Aldolase, Citrate synthase, Decarboxylases"],
["5. Isomerases", "Interconversion of isomers", "Phosphoglucose isomerase, Mutases"],
["6. Ligases (Synthetases)", "Joining two molecules + ATP hydrolysis", "Acetyl-CoA carboxylase, Glutamine synthetase"],
],
S, col_widths=[4.5*cm, 6.5*cm, 6*cm]
)
story.append(enz_table)
story.append(Spacer(1, 0.2*cm))
section_box("Enzyme Kinetics - Michaelis-Menten", S, story)
story.append(Paragraph(
"The Michaelis-Menten equation describes the rate of enzyme reactions:", S['body']))
story.append(Paragraph(
"V = Vmax [S] / (Km + [S])",
ParagraphStyle('eq', fontSize=12, fontName='Helvetica-Bold',
textColor=MED_BLUE, alignment=TA_CENTER, spaceAfter=6)))
kinetics = [
("Vmax", "Maximum velocity; achieved when all enzyme active sites are saturated with substrate."),
("Km (Michaelis Constant)", "Substrate concentration at half-Vmax. LOW Km = high affinity; HIGH Km = low affinity."),
("Lineweaver-Burk Plot", "Double reciprocal plot (1/V vs 1/[S]). Y-intercept = 1/Vmax; X-intercept = -1/Km."),
("Turnover Number (kcat)", "Number of substrate molecules converted to product per enzyme per second."),
]
for title, desc in kinetics:
story.append(Paragraph(f"<b>• {title}:</b> {desc}", S['bullet']))
section_box("Enzyme Inhibition", S, story)
inhib_table = make_table(
["Type", "Km", "Vmax", "Mechanism", "Example"],
[
["Competitive", "Increases", "Unchanged", "Inhibitor resembles substrate; binds active site; overcome by excess substrate", "Malonate inhibits succinate dehydrogenase; Methotrexate inhibits DHFR"],
["Non-competitive", "Unchanged", "Decreases", "Inhibitor binds allosteric site; cannot be overcome by excess substrate", "Heavy metals (Pb, Hg); Cyanide"],
["Uncompetitive", "Decreases", "Decreases", "Inhibitor binds only ES complex", "DIPF on acetylcholinesterase"],
["Irreversible", "N/A", "Decreases", "Covalent modification of enzyme", "Aspirin (COX), Organophosphates (AChE)"],
],
S, col_widths=[3*cm, 2*cm, 2*cm, 5.5*cm, 4.5*cm]
)
story.append(inhib_table)
story.append(Spacer(1, 0.2*cm))
section_box("Isoenzymes & Clinically Important Enzymes", S, story)
iso_table = make_table(
["Enzyme", "Isoforms", "Clinical Use"],
[
["LDH (Lactate Dehydrogenase)", "LDH1 (heart), LDH2, LDH3, LDH4, LDH5 (liver)", "LDH1 > LDH2 in MI (flipped pattern)"],
["CK (Creatine Kinase)", "CK-MM (muscle), CK-MB (heart), CK-BB (brain)", "CK-MB elevated in acute MI; troponin more specific"],
["Alkaline Phosphatase (ALP)", "Liver, bone, intestinal, placental isoforms", "Elevated in cholestasis, Paget's disease, bone disease"],
["Acid Phosphatase", "Prostatic, erythrocyte", "Elevated in prostatic carcinoma"],
["ALT (SGPT)", "Mainly liver", "Most specific for hepatocellular damage"],
["AST (SGOT)", "Liver, heart, muscle", "Elevated in MI, hepatitis"],
["Amylase & Lipase", "-", "Elevated in acute pancreatitis (lipase more specific)"],
],
S, col_widths=[4*cm, 6*cm, 7*cm]
)
story.append(iso_table)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 4 - CARBOHYDRATES
# ════════════════════════════════════════════════════════════════════════
chapter_header("CARBOHYDRATES", 4, S, story)
story.append(Paragraph(
"Carbohydrates are polyhydroxy aldehydes or ketones. General formula: (CH2O)n. "
"They are the primary energy source (4 kcal/g) and also serve structural and signalling roles.", S['body']))
section_box("Classification", S, story)
carb_class = make_table(
["Class", "Examples", "Key Points"],
[
["Monosaccharides", "Glucose, Fructose, Galactose, Ribose", "Cannot be hydrolysed further; D-glucose is most abundant"],
["Disaccharides", "Sucrose (Glu+Fru), Lactose (Gal+Glu), Maltose (Glu+Glu)", "Sucrose = non-reducing; Lactose & Maltose = reducing sugars"],
["Oligosaccharides", "Raffinose, Stachyose", "3-10 monosaccharide units"],
["Polysaccharides - Homopolysaccharides", "Starch (amylose + amylopectin), Glycogen, Cellulose", "Storage (starch/glycogen) or structural (cellulose)"],
["Polysaccharides - Heteropolysaccharides", "Hyaluronic acid, Heparin, Chondroitin sulfate", "Glycosaminoglycans; found in connective tissue"],
],
S, col_widths=[4.5*cm, 6.5*cm, 6*cm]
)
story.append(carb_class)
story.append(Spacer(1, 0.2*cm))
section_box("Mutarotation & Optical Activity", S, story)
for item in [
"Glucose exists as alpha (36%) and beta (64%) anomers in solution, interconverting via open-chain form - this is mutarotation.",
"All carbohydrates rotate plane-polarised light: dextrorotatory (+) or levorotatory (-).",
"D/L configuration refers to spatial arrangement around the asymmetric carbon, NOT direction of rotation.",
"Reducing sugars: have free anomeric -OH; reduce Cu2+ (Benedict's/Fehling's tests) - glucose, fructose, galactose, lactose, maltose. Sucrose is NON-reducing.",
]:
story.append(Paragraph(f"• {item}", S['bullet']))
section_box("Important Polysaccharides", S, story)
poly_table = make_table(
["Polysaccharide", "Composition", "Linkage", "Function"],
[
["Starch - Amylose", "Glucose", "alpha-1,4 only", "Storage in plants; 20-30% of starch"],
["Starch - Amylopectin", "Glucose", "alpha-1,4 + alpha-1,6 (branches every 24-30 units)", "70-80% of starch"],
["Glycogen", "Glucose", "alpha-1,4 + alpha-1,6 (branches every 8-12 units)", "Animal storage (liver, muscle)"],
["Cellulose", "Glucose", "beta-1,4", "Structural in plants; not digested by humans"],
["Chitin", "N-Acetylglucosamine", "beta-1,4", "Structural in fungi/arthropods"],
],
S, col_widths=[3.5*cm, 3*cm, 5*cm, 5.5*cm]
)
story.append(poly_table)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 5 - CARBOHYDRATE METABOLISM
# ════════════════════════════════════════════════════════════════════════
chapter_header("CARBOHYDRATE METABOLISM", 5, S, story)
section_box("Glycolysis (Embden-Meyerhof-Parnas Pathway)", S, story)
story.append(Paragraph(
"Conversion of 1 glucose (6C) to 2 pyruvate (3C) in the cytoplasm. Occurs in all cells. "
"Does not require oxygen.", S['body']))
key_box("Net Yield (Aerobic)",
"2 ATP + 2 NADH + 2 Pyruvate per glucose (starting from glucose; 4 ATP produced, 2 consumed)", S, story)
key_box("Net Yield (Anaerobic)",
"2 ATP + 2 Lactate per glucose (NADH reoxidised to NAD+ by lactate dehydrogenase)", S, story)
story.append(Paragraph(B("Irreversible (Regulatory) Steps:"), S['subsection']))
glyc_steps = make_table(
["Step", "Enzyme", "Regulator"],
[
["Glucose → Glucose-6-phosphate", "Hexokinase (all tissues) / Glucokinase (liver, beta cells)", "Hexokinase inhibited by G-6-P; Glucokinase not inhibited by G-6-P"],
["F-6-P → F-1,6-bisphosphate", "Phosphofructokinase-1 (PFK-1) - RATE LIMITING", "Activated by AMP, F-2,6-BP; Inhibited by ATP, citrate"],
["PEP → Pyruvate", "Pyruvate kinase", "Inhibited by ATP, alanine; activated by F-1,6-BP"],
],
S, col_widths=[5*cm, 5*cm, 7*cm]
)
story.append(glyc_steps)
story.append(Spacer(1, 0.2*cm))
section_box("Pyruvate Dehydrogenase Complex (PDC)", S, story)
story.append(Paragraph(
"Converts pyruvate to Acetyl-CoA (irreversible; bridges glycolysis and TCA cycle). "
"Located in mitochondrial matrix. Requires 5 coenzymes:", S['body']))
key_box("Mnemonic - Coenzymes of PDC",
"Tender Loving Care For Nancy = TPP, Lipoamide, CoA, FAD, NAD+", S, story, bg=PURPLE_BG, border=PURPLE)
for item in [
"Products: 1 Acetyl-CoA + 1 CO2 + 1 NADH per pyruvate",
"Activated by: ADP, CoA, NAD+, Ca2+, pyruvate itself",
"Inhibited by: ATP, Acetyl-CoA, NADH, Fatty acids",
"Deficiency causes: Lactic acidosis, Leigh syndrome",
]:
story.append(Paragraph(f"• {item}", S['bullet']))
section_box("TCA Cycle (Krebs / Citric Acid Cycle)", S, story)
story.append(Paragraph(
"Occurs in mitochondrial matrix. Each turn oxidises 1 Acetyl-CoA (2C) producing reducing equivalents for ATP synthesis.", S['body']))
key_box("Yield per Acetyl-CoA",
"3 NADH + 1 FADH2 + 1 GTP + 2 CO2 → yields ~10 ATP (via oxidative phosphorylation)", S, story)
tca_steps = make_table(
["Substrate → Product", "Enzyme", "Notes"],
[
["Acetyl-CoA + Oxaloacetate → Citrate", "Citrate synthase", "Condensation; regulated step"],
["Citrate → Isocitrate", "Aconitase", "Via aconitate; inhibited by fluoroacetate"],
["Isocitrate → alpha-KG", "Isocitrate dehydrogenase", "First CO2 released; NADH produced; RATE LIMITING"],
["alpha-KG → Succinyl-CoA", "alpha-KG dehydrogenase", "Second CO2; NADH; similar to PDC; requires same 5 coenzymes"],
["Succinyl-CoA → Succinate", "Succinyl-CoA synthetase", "Substrate-level phosphorylation (GTP)"],
["Succinate → Fumarate", "Succinate dehydrogenase", "FADH2 produced; Complex II of ETC; inhibited by malonate"],
["Fumarate → Malate", "Fumarase", "-"],
["Malate → Oxaloacetate", "Malate dehydrogenase", "NADH produced; regenerates OAA"],
],
S, col_widths=[5*cm, 4.5*cm, 7.5*cm]
)
story.append(tca_steps)
story.append(Spacer(1, 0.2*cm))
section_box("HMP Shunt (Pentose Phosphate Pathway)", S, story)
story.append(Paragraph(
"Occurs in cytoplasm. Purpose: generate NADPH (for reductive biosynthesis, antioxidant defence) "
"and Ribose-5-phosphate (for nucleotide synthesis). Active in liver, RBCs, adrenal cortex, lactating mammary glands.", S['body']))
key_box("Key Point",
"G6PD deficiency reduces NADPH in RBCs → increased oxidative stress → haemolytic anaemia on exposure to oxidants (primaquine, dapsone, fava beans)", S, story)
section_box("Glycogen Metabolism", S, story)
glyc_table = make_table(
["Process", "Key Enzyme", "Location", "Regulation"],
[
["Glycogenesis (synthesis)", "Glycogen synthase (rate-limiting); also requires Branching enzyme", "Liver, Muscle", "Activated by insulin, glucose-6-P; Inhibited by glucagon, epinephrine"],
["Glycogenolysis (breakdown)", "Glycogen phosphorylase (rate-limiting); Debranching enzyme", "Liver, Muscle", "Activated by glucagon (liver), epinephrine; Inhibited by insulin, glucose-6-P"],
],
S, col_widths=[3.5*cm, 4.5*cm, 3*cm, 6*cm]
)
story.append(glyc_table)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(B("Glycogen Storage Diseases (GSDs):"), S['subsection']))
gsd_table = make_table(
["GSD Type", "Enzyme Deficient", "Organ", "Features"],
[
["Type I - Von Gierke", "Glucose-6-phosphatase", "Liver, Kidney", "Hypoglycaemia, hepatomegaly, lactic acidosis, hyperuricaemia"],
["Type II - Pompe", "Acid maltase (alpha-1,4 glucosidase)", "All organs (lysosomal)", "Cardiomegaly, hypotonia; infantile form fatal"],
["Type III - Cori", "Debranching enzyme", "Liver, Muscle", "Limit dextrinosis; milder than Type I"],
["Type IV - Andersen", "Branching enzyme", "Liver", "Cirrhosis"],
["Type V - McArdle", "Muscle phosphorylase", "Muscle", "Exercise intolerance, myoglobinuria"],
["Type VI - Hers", "Liver phosphorylase", "Liver", "Mild hypoglycaemia"],
],
S, col_widths=[3.5*cm, 4.5*cm, 3*cm, 6*cm]
)
story.append(gsd_table)
section_box("Gluconeogenesis", S, story)
story.append(Paragraph(
"Synthesis of glucose from non-carbohydrate precursors (lactate, alanine, glycerol, odd-chain fatty acids). "
"Occurs mainly in liver (90%) and kidney cortex (10%). Active during fasting/starvation.", S['body']))
key_box("Precursors",
"Lactate (Cori cycle), Alanine (glucose-alanine cycle), Glycerol (from triglyceride breakdown), Propionyl-CoA (odd-chain FA), All glucogenic amino acids", S, story)
key_box("Irreversible bypass enzymes (vs glycolysis)",
"1) Pyruvate carboxylase (pyruvate → OAA) + PEPCK (OAA → PEP) | 2) Fructose-1,6-bisphosphatase (F-1,6-BP → F-6-P) | 3) Glucose-6-phosphatase (G-6-P → glucose)", S, story)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 6 - LIPIDS & LIPID METABOLISM
# ════════════════════════════════════════════════════════════════════════
chapter_header("LIPIDS & LIPID METABOLISM", 6, S, story)
story.append(Paragraph(
"Lipids are hydrophobic biomolecules soluble in organic solvents. Functions include energy storage, "
"membrane structure, signalling, insulation, and as precursors for steroid hormones, bile acids, and vitamins.", S['body']))
section_box("Classification of Lipids", S, story)
lipid_class = make_table(
["Category", "Examples"],
[
["Simple lipids", "Triglycerides (TG), Waxes"],
["Compound (Complex) lipids", "Phospholipids, Glycolipids, Lipoproteins"],
["Derived lipids", "Fatty acids, Sterols (cholesterol), Steroids (hormones), Fat-soluble vitamins"],
],
S, col_widths=[5*cm, 12*cm]
)
story.append(lipid_class)
story.append(Spacer(1, 0.2*cm))
section_box("Fatty Acid Oxidation (Beta-Oxidation)", S, story)
story.append(Paragraph(
"Fatty acids are oxidised in the mitochondrial matrix. Long-chain FAs require carnitine shuttle to enter mitochondria.", S['body']))
key_box("Carnitine Shuttle",
"Carnitine acyltransferase I (outer membrane) - rate limiting step of beta-oxidation; inhibited by malonyl-CoA (prevents simultaneous synthesis and oxidation)", S, story)
story.append(Paragraph(B("Yield per cycle of beta-oxidation:"), S['subsection']))
story.append(Paragraph("Each cycle produces: 1 Acetyl-CoA + 1 FADH2 + 1 NADH + shortened acyl chain (by 2C)", S['body']))
key_box("Example: Palmitic acid (C16)",
"8 Acetyl-CoA + 7 FADH2 + 7 NADH → Total ~129 ATP (gross); Net ~106 ATP after activation cost", S, story)
key_box("Odd-chain Fatty Acids",
"Last cycle produces Propionyl-CoA (3C) → converted to Succinyl-CoA (enters TCA) via Propionyl-CoA carboxylase (biotin-dependent)", S, story)
section_box("Ketone Body Metabolism", S, story)
story.append(Paragraph(
"Synthesised in liver mitochondria from Acetyl-CoA during fasting, starvation, diabetes, and low carbohydrate intake. "
"Ketone bodies: Acetoacetate, Beta-hydroxybutyrate, Acetone.", S['body']))
key_box("Ketogenesis - Rate limiting enzyme",
"HMG-CoA synthase (mitochondrial); HMG-CoA lyase cleaves HMG-CoA to Acetoacetate + Acetyl-CoA", S, story)
key_box("Ketolysis",
"Occurs in extrahepatic tissues (brain, muscle, heart - NOT liver). Key enzyme: Succinyl-CoA acetoacetate CoA transferase (thiophorase) - absent in liver (explains why liver cannot use its own ketone bodies)", S, story)
key_box("Diabetic Ketoacidosis (DKA)",
"Uncontrolled T1DM: insulin absent → excess Acetyl-CoA → ketone body overproduction > utilisation → metabolic acidosis, sweet/fruity breath (acetone)", S, story)
section_box("Cholesterol Metabolism", S, story)
story.append(Paragraph(
"Cholesterol is a sterol synthesised from Acetyl-CoA. Sources: dietary (~300 mg/day) and endogenous synthesis (~1000 mg/day, mainly liver).", S['body']))
key_box("Rate-Limiting Step",
"HMG-CoA → Mevalonate, catalysed by HMG-CoA reductase (inhibited by STATINS, cholesterol itself, glucagon; activated by insulin)", S, story)
lipo_table = make_table(
["Lipoprotein", "Density", "% TG", "% Chol", "Made in", "Function"],
[
["Chylomicrons", "Lowest", "88%", "4%", "Intestine", "Transport dietary TG"],
["VLDL", "Very low", "55%", "20%", "Liver", "Transport endogenous TG"],
["IDL", "Intermediate", "31%", "38%", "Plasma (from VLDL)", "Transient; becomes LDL"],
["LDL", "Low", "10%", "46%", "Plasma (from IDL)", "Deliver cholesterol to tissues; 'Bad cholesterol'"],
["HDL", "High", "5%", "20%", "Liver/Intestine", "Reverse cholesterol transport; 'Good cholesterol'"],
],
S, col_widths=[2.5*cm, 2.5*cm, 1.8*cm, 1.8*cm, 3*cm, 5.4*cm]
)
story.append(lipo_table)
section_box("Fatty Acid Synthesis", S, story)
story.append(Paragraph(
"Occurs in cytoplasm (liver, adipose, lactating mammary gland). Requires NADPH (from HMP shunt) and malonyl-CoA as 2-carbon donor.", S['body']))
key_box("Rate-Limiting Step",
"Acetyl-CoA → Malonyl-CoA by Acetyl-CoA carboxylase (ACC); requires biotin; activated by insulin, citrate; inhibited by palmitoyl-CoA, glucagon", S, story)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 7 - PROTEIN & AMINO ACID METABOLISM
# ════════════════════════════════════════════════════════════════════════
chapter_header("PROTEIN & AMINO ACID METABOLISM", 7, S, story)
section_box("Nitrogen Balance", S, story)
nb_table = make_table(
["State", "N Balance", "Examples"],
[
["Positive N balance", "Intake > Output", "Growth, pregnancy, recovery from illness, anabolism"],
["Negative N balance", "Intake < Output", "Starvation, severe illness, burns, malignancy, marasmus/kwashiorkor"],
["Zero/Equilibrium", "Intake = Output", "Healthy adults"],
],
S, col_widths=[4.5*cm, 4*cm, 8.5*cm]
)
story.append(nb_table)
story.append(Spacer(1, 0.2*cm))
section_box("Transamination", S, story)
story.append(Paragraph(
"Transfer of alpha-amino group from amino acid to alpha-keto acid. "
"Enzyme: Aminotransferases (transaminases). Coenzyme: Pyridoxal phosphate (PLP / Vitamin B6).", S['body']))
story.append(Paragraph(
"Key reactions: Alanine + alpha-KG ⇌ Pyruvate + Glutamate (ALT/GPT) | "
"Aspartate + alpha-KG ⇌ OAA + Glutamate (AST/GOT)", S['body']))
section_box("Urea Cycle (Krebs-Henseleit Cycle)", S, story)
story.append(Paragraph(
"Detoxifies ammonia (toxic to brain) into urea (non-toxic). Occurs partly in mitochondria and partly in cytoplasm of liver hepatocytes.", S['body']))
key_box("Daily urea production", "25-30 g/day; excreted by kidneys", S, story)
urea_steps = make_table(
["Step", "Enzyme", "Location"],
[
["NH3 + CO2 → Carbamoyl phosphate", "Carbamoyl phosphate synthetase I (CPS-I)", "Mitochondria - RATE LIMITING"],
["Carbamoyl-P + Ornithine → Citrulline", "Ornithine transcarbamoylase (OTC)", "Mitochondria"],
["Citrulline + Aspartate → Argininosuccinate", "Argininosuccinate synthetase", "Cytoplasm (ATP required)"],
["Argininosuccinate → Arginine + Fumarate", "Argininosuccinate lyase", "Cytoplasm"],
["Arginine → Ornithine + Urea", "Arginase", "Cytoplasm - releases urea; ornithine re-enters cycle"],
],
S, col_widths=[5.5*cm, 5.5*cm, 6*cm]
)
story.append(urea_steps)
story.append(Spacer(1, 0.2*cm))
key_box("Hyperammonaemia",
"Urea cycle enzyme defects → NH3 accumulation → cerebral oedema, hepatic encephalopathy, respiratory alkalosis. "
"CPS-I and OTC deficiencies most common; OTC deficiency is X-linked.", S, story)
section_box("One-Carbon Metabolism (Folate & B12)", S, story)
story.append(Paragraph(
"Tetrahydrofolate (THF) carries one-carbon units at various oxidation states. "
"Critical for purine synthesis, thymidylate synthesis (dTMP), and methionine regeneration.", S['body']))
key_box("Methionine cycle",
"Methionine → SAM (S-Adenosylmethionine, universal methyl donor) → SAH → Homocysteine → "
"back to Methionine (requires B12 as cofactor of Methionine synthase + MTHFR + folate)", S, story)
key_box("Homocystinuria",
"Elevated homocysteine from: CBS deficiency (classic), B6/B12/Folate deficiency. "
"Risk factor for CVD, DVT, stroke, Marfanoid features (lens dislocation downward vs. Marfan upward)", S, story)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 8 - NUCLEOTIDES & NUCLEIC ACIDS
# ════════════════════════════════════════════════════════════════════════
chapter_header("NUCLEOTIDES & NUCLEIC ACIDS", 8, S, story)
section_box("Structure of Nucleotides", S, story)
story.append(Paragraph(
"Nucleotide = Nitrogenous base + Pentose sugar + Phosphate group(s). "
"Nucleoside = Base + Sugar (no phosphate).", S['body']))
nuc_table = make_table(
["Base Type", "Bases", "Found in"],
[
["Purines (2-ring)", "Adenine (A), Guanine (G)", "DNA and RNA"],
["Pyrimidines (1-ring)", "Cytosine (C)", "DNA and RNA"],
["Pyrimidines (1-ring)", "Thymine (T) - has methyl group", "DNA only"],
["Pyrimidines (1-ring)", "Uracil (U) - no methyl group", "RNA only"],
],
S, col_widths=[4*cm, 6.5*cm, 6.5*cm]
)
story.append(nuc_table)
key_box("Mnemonic", "Purines = Pure As Gold (PAG) | CUT the PY: Cytosine, Uracil, Thymine are Pyrimidines", S, story, bg=PURPLE_BG, border=PURPLE)
section_box("Purine & Pyrimidine Synthesis", S, story)
synth_table = make_table(
["Pathway", "Purines", "Pyrimidines"],
[
["De Novo Synthesis", "Built on ribose-5-phosphate (PRPP); 11 steps; first purine nucleotide = IMP", "Ring formed first, then attached to PRPP; first product = UMP"],
["Salvage Pathway", "Hypoxanthine → IMP (HGPRT); Adenine → AMP (APRT)", "Pyrimidines recycled by specific kinases"],
["Rate-limiting enzyme", "PRPP amidotransferase (inhibited by AMP, GMP)", "Carbamoyl phosphate synthetase II (CPS-II) in cytoplasm"],
],
S, col_widths=[4*cm, 6.5*cm, 6.5*cm]
)
story.append(synth_table)
story.append(Spacer(1, 0.2*cm))
section_box("Purine Degradation & Gout", S, story)
story.append(Paragraph(
"Purines → Xanthine → Uric acid (by Xanthine oxidase). In humans, uric acid is the final product "
"(unlike most mammals that have uricase to further degrade it).", S['body']))
key_box("Gout",
"Hyperuricaemia → urate crystals in joints (esp. metatarsophalangeal joint of big toe - podagra), kidneys (urate stones). "
"Allopurinol inhibits xanthine oxidase (blocks uric acid production). Lesch-Nyhan syndrome: HGPRT deficiency (X-linked), severe hyperuricaemia, self-mutilation, neurological features.", S, story)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 9 - MOLECULAR BIOLOGY
# ════════════════════════════════════════════════════════════════════════
chapter_header("DNA, RNA & MOLECULAR BIOLOGY", 9, S, story)
section_box("DNA Structure & Replication", S, story)
for item in [
"DNA double helix: two antiparallel strands (5'→3' and 3'→5') connected by hydrogen bonds between complementary bases (A=T, G≡C).",
"Watson-Crick model (1953): B-form DNA, right-handed, 10 bp per turn, pitch = 34 Å, diameter = 20 Å.",
"Chargaff's rules: A = T, G = C in double-stranded DNA; A+G = T+C (purines = pyrimidines).",
"Semiconservative replication: each daughter DNA has one parental and one new strand (Meselson-Stahl experiment).",
"Replication is bidirectional from origins of replication (OriC).",
]:
story.append(Paragraph(f"• {item}", S['bullet']))
rep_table = make_table(
["Enzyme/Protein", "Function"],
[
["DNA Helicase", "Unwinds double helix at replication fork"],
["Primase (RNA Pol)", "Synthesises RNA primer (3'-OH needed for DNA Pol III)"],
["DNA Pol III (prokaryotes)", "Main replicating enzyme; 5'→3' synthesis; 3'→5' proofreading exonuclease"],
["DNA Pol I", "Removes RNA primer; gap-filling"],
["DNA Ligase", "Joins Okazaki fragments (lagging strand) using NAD+ (bacteria) or ATP (eukaryotes)"],
["Topoisomerases", "Relieve torsional stress: Type I nicks one strand; Type II nicks both (gyrase in bacteria - target of fluoroquinolones)"],
["SSB proteins", "Stabilise unwound ssDNA"],
],
S, col_widths=[5*cm, 12*cm]
)
story.append(rep_table)
story.append(Spacer(1, 0.2*cm))
section_box("Transcription", S, story)
story.append(Paragraph(
"DNA → mRNA. Template strand (antisense/non-coding) read 3'→5'; mRNA synthesised 5'→3'. "
"No primer needed. Key enzyme: RNA Polymerase (does not proofread).", S['body']))
key_box("RNA Types",
"mRNA (messenger) - protein coding; rRNA (ribosomal) - most abundant RNA; tRNA (transfer) - adaptor; "
"snRNA (spliceosome); miRNA/siRNA (gene silencing)", S, story)
key_box("Post-transcriptional modifications (eukaryotes)",
"5' 7-methylguanosine cap (protects mRNA, aids ribosome binding) + 3' poly-A tail (stability) + "
"Splicing of introns by spliceosomes", S, story)
section_box("Translation (Protein Synthesis)", S, story)
story.append(Paragraph(
"mRNA → Protein. Occurs on ribosomes (70S in prokaryotes: 50S + 30S; 80S in eukaryotes: 60S + 40S). "
"Direction: N-terminus to C-terminus; mRNA read 5'→3'.", S['body']))
key_box("Genetic Code Properties",
"Triplet codon (64 codons for 20 AAs) | Degenerate/Redundant (multiple codons per AA) | "
"Non-overlapping | Non-ambiguous | Universal (nearly) | Start codon AUG (Met) | "
"Stop codons: UAA, UAG, UGA (memorise: UAG=amber, UAA=ochre, UGA=opal)", S, story)
antibiotic_table = make_table(
["Drug", "Target", "Mechanism"],
[
["Streptomycin, Gentamicin", "30S ribosome", "Misreading of mRNA; bactericidal"],
["Tetracyclines", "30S ribosome", "Block aminoacyl-tRNA binding"],
["Chloramphenicol", "50S ribosome", "Inhibits peptidyl transferase"],
["Erythromycin (Macrolides)", "50S ribosome", "Block translocation"],
["Linezolid", "50S ribosome", "Prevents 70S initiation complex formation"],
["Diphtheria toxin", "EF-2 (eukaryotes)", "ADP-ribosylation of EF-2; inhibits translocation"],
["Cycloheximide", "80S (60S) ribosome", "Inhibits eukaryotic translation; used in lab"],
],
S, col_widths=[4.5*cm, 3.5*cm, 9*cm]
)
story.append(antibiotic_table)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 10 - VITAMINS
# ════════════════════════════════════════════════════════════════════════
chapter_header("VITAMINS", 10, S, story)
section_box("Fat-Soluble Vitamins (A, D, E, K)", S, story)
fat_vit = make_table(
["Vitamin", "Active Form", "Function", "Deficiency", "Toxicity"],
[
["A (Retinol)", "Retinal, Retinoic acid", "Vision (rhodopsin), epithelial integrity, immunity, bone growth", "Night blindness, xerophthalmia, Bitot spots, keratomalacia", "Raised ICP, hepatotoxicity, teratogen"],
["D (Calciferol)", "1,25-(OH)2 D3 (Calcitriol)", "Ca2+ & PO4 absorption; bone mineralisation", "Rickets (children), Osteomalacia (adults); Milk-alkali features", "Hypercalcaemia, metastatic calcification"],
["E (Tocopherol)", "alpha-tocopherol", "Antioxidant (protects PUFA membrane lipids)", "Haemolytic anaemia (premature infants), ataxia, neuropathy", "Rare; interferes with Vitamin K"],
["K (Phylloquinone/Menaquinone)", "Hydroquinone", "Carboxylation of Glu in factors II, VII, IX, X, protein C, S", "Bleeding tendency; newborns susceptible (no gut flora)", "Rare; haemolysis with menaquinone"],
],
S, col_widths=[2*cm, 3*cm, 4.5*cm, 4.5*cm, 3*cm]
)
story.append(fat_vit)
story.append(Spacer(1, 0.2*cm))
section_box("Water-Soluble Vitamins (B-complex & C)", S, story)
water_vit = make_table(
["Vitamin", "Coenzyme Form", "Key Role", "Deficiency Disease"],
[
["B1 - Thiamine", "TPP (Thiamine Pyrophosphate)", "PDC, alpha-KG dehydrogenase, Transketolase (HMP shunt)", "Beriberi (wet = cardiac; dry = peripheral neuropathy), Wernicke-Korsakoff (alcoholics)"],
["B2 - Riboflavin", "FAD, FMN", "Electron carrier in ETC, beta-oxidation, TCA", "Cheilosis, angular stomatitis, corneal vascularisation"],
["B3 - Niacin", "NAD+, NADP+", "Electron carrier; >400 enzymes; synthesised from Tryptophan", "Pellagra: 4 Ds - Dermatitis, Diarrhoea, Dementia, Death"],
["B5 - Pantothenic acid", "Coenzyme A, ACP", "Acyl transfer reactions (TCA, fatty acid synthesis/oxidation)", "Burning feet syndrome (rare in isolation)"],
["B6 - Pyridoxine", "PLP (Pyridoxal phosphate)", "Transamination, decarboxylation, glycogen phosphorylase, haem synthesis", "Sideroblastic anaemia, peripheral neuropathy, glossitis; Isoniazid causes B6 deficiency"],
["B7 - Biotin", "Biocytin", "CO2 fixation (carboxylases: ACC, Pyruvate carboxylase, Propionyl-CoA carboxylase)", "Avidin in raw egg white binds biotin; alopecia, dermatitis"],
["B9 - Folate", "THF (Tetrahydrofolate)", "One-carbon transfer, nucleotide synthesis, homocysteine remethylation", "Megaloblastic anaemia; NTDs (supplementation in pregnancy)"],
["B12 - Cobalamin", "Methylcobalamin, Adenosylcobalamin", "Methionine synthase (methylcobalamin), L-MMA mutase (adenosyl)", "Megaloblastic anaemia + subacute combined degeneration of spinal cord (SACD); only in animal products"],
["C - Ascorbic acid", "Ascorbate", "Hydroxylation of proline/lysine (collagen synthesis), antioxidant, iron absorption", "Scurvy: perifollicular haemorrhages, bleeding gums, corkscrew hairs, poor wound healing"],
],
S, col_widths=[2.5*cm, 3*cm, 5*cm, 6.5*cm]
)
story.append(water_vit)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 11 - MINERALS
# ════════════════════════════════════════════════════════════════════════
chapter_header("MINERALS & TRACE ELEMENTS", 11, S, story)
minerals_table = make_table(
["Mineral", "Absorption/Transport", "Function", "Deficiency / Excess"],
[
["Iron (Fe)", "Absorbed as Fe2+ (ferrous) in duodenum/jejunum; transported by Transferrin; stored as Ferritin/Haemosiderin", "Haemoglobin, Myoglobin, Cytochromes, Fe-S clusters", "Deficiency: Microcytic hypochromic anaemia, koilonychia, pica | Excess: Haemochromatosis (bronze diabetes, cirrhosis, cardiomyopathy)"],
["Calcium (Ca)", "Absorbed with Vitamin D (calcitriol); regulated by PTH, Calcitonin", "Bone/teeth structure, muscle contraction, clotting, nerve conduction", "Deficiency: Rickets/Osteomalacia, Tetany (Trousseau, Chvostek signs) | Hypercalcaemia: stones, bones, groans, psychic moans"],
["Zinc (Zn)", "Absorbed in small intestine; bound to metallothionein", "Enzyme cofactor (>300 enzymes), wound healing, immunity, taste/smell, DNA synthesis", "Deficiency: Acrodermatitis enteropathica, hypogonadism, growth retardation, alopecia, impaired taste"],
["Copper (Cu)", "Transported by Ceruloplasmin", "Cytochrome oxidase, Superoxide dismutase, Lysyl oxidase (collagen crosslinks), Dopamine beta-hydroxylase", "Wilson's disease (Cu accumulation): Kayser-Fleischer rings, hepatic cirrhosis, neuropsychiatric | Menkes: Cu deficiency (X-linked), kinky hair"],
["Iodine (I)", "Absorbed as iodide; concentrated in thyroid", "Thyroid hormone synthesis (T3, T4)", "Deficiency: Goitre, Cretinism (congenital hypothyroidism: mental retardation)"],
["Selenium (Se)", "Selenocysteine incorporation", "Glutathione peroxidase (antioxidant), Iodothyronine deiodinase", "Keshan disease (cardiomyopathy); excess is toxic"],
["Fluoride (F)", "Bone and teeth incorporation", "Strengthens enamel (fluorapatite), prevents dental caries", "Deficiency: Dental caries | Excess: Fluorosis (mottled teeth, skeletal fluorosis)"],
],
S, col_widths=[2*cm, 4*cm, 4.5*cm, 6.5*cm]
)
story.append(minerals_table)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 12 - BIOENERGETICS
# ════════════════════════════════════════════════════════════════════════
chapter_header("BIOENERGETICS & ELECTRON TRANSPORT CHAIN", 12, S, story)
section_box("ATP: The Energy Currency", S, story)
for item in [
"ATP (Adenosine Triphosphate) = high-energy phosphate compound; DeltaG = -7.3 kcal/mol for hydrolysis.",
"Other high-energy compounds: Phosphocreatine (immediate muscle energy reserve), PEP, 1,3-BPG.",
"Substrate-level phosphorylation: ATP synthesised directly (glycolysis: 4 ATP; TCA: 1 GTP per turn).",
"Oxidative phosphorylation: ATP synthesised using proton gradient across inner mitochondrial membrane.",
]:
story.append(Paragraph(f"• {item}", S['bullet']))
section_box("Electron Transport Chain (ETC)", S, story)
story.append(Paragraph(
"Located in inner mitochondrial membrane. Transfers electrons from NADH/FADH2 to O2, "
"pumping H+ to create electrochemical gradient used by ATP synthase (Complex V).", S['body']))
etc_table = make_table(
["Complex", "Name", "Substrates/Action", "Inhibitors"],
[
["Complex I", "NADH Dehydrogenase", "NADH → CoQ; pumps 4H+", "Rotenone, Amytal (barbiturates), Metformin (partial)"],
["Complex II", "Succinate Dehydrogenase", "FADH2 → CoQ; no H+ pumping", "Malonate (competitive), TTFA"],
["Complex III", "Cytochrome bc1", "CoQ → Cyt c; pumps 4H+", "Antimycin A, Myxothiazol"],
["Complex IV", "Cytochrome c Oxidase", "Cyt c → O2 (final e- acceptor); pumps 2H+; produces H2O", "Cyanide (CN-), CO, Azide, H2S"],
["Complex V", "ATP Synthase (F0F1)", "H+ gradient → ATP (chemiosmosis)", "Oligomycin"],
],
S, col_widths=[2*cm, 3.5*cm, 5.5*cm, 6*cm]
)
story.append(etc_table)
story.append(Spacer(1, 0.2*cm))
key_box("P/O Ratio (ATP yield)",
"NADH: ~2.5 ATP | FADH2: ~1.5 ATP (revised values; older textbooks: NADH=3, FADH2=2)", S, story)
key_box("Uncouplers",
"Dissipate proton gradient as heat without ATP synthesis. Examples: 2,4-DNP (dinitrophenol), Thermogenin/UCP1 (brown adipose tissue - thermogenesis), Aspirin overdose", S, story)
section_box("Total ATP from Complete Glucose Oxidation", S, story)
atp_table = make_table(
["Stage", "NADH", "FADH2", "ATP (direct)", "ATP Equivalent"],
[
["Glycolysis", "2", "0", "2 ATP", "2 + (2x2.5) = 7 ATP"],
["Pyruvate Dehydrogenase (x2)", "2", "0", "0", "2x2.5 = 5 ATP"],
["TCA Cycle (x2)", "6", "2", "2 GTP", "6x2.5 + 2x1.5 + 2 = 22 ATP"],
["TOTAL", "10", "2", "4", "~30-32 ATP (net, modern values)"],
],
S, col_widths=[5*cm, 2.5*cm, 2.5*cm, 3*cm, 4*cm]
)
story.append(atp_table)
# ════════════════════════════════════════════════════════════════════════
# CHAPTER 13 - HORMONES & BIOCHEMISTRY OF DISEASE
# ════════════════════════════════════════════════════════════════════════
chapter_header("HORMONES & BIOCHEMISTRY OF DISEASE", 13, S, story)
section_box("Diabetes Mellitus - Biochemical Basis", S, story)
dm_table = make_table(
["Feature", "Type 1 DM", "Type 2 DM"],
[
["Cause", "Autoimmune destruction of beta cells; absolute insulin deficiency", "Insulin resistance + relative deficiency; genetic + environmental"],
["Metabolic features", "DKA (Diabetic Ketoacidosis), hyperglycaemia, glycosuria, polyuria, polydipsia", "Hyperosmolar Hyperglycaemic State (HHS), less prone to DKA"],
["Diagnostic criteria", "Fasting glucose >= 126 mg/dL or random >= 200 mg/dL or HbA1c >= 6.5%", "Same criteria"],
["HbA1c", "Glycated Hb; reflects 2-3 months average glucose; >6.5% = diagnostic", "Same interpretation"],
],
S, col_widths=[4*cm, 6.5*cm, 6.5*cm]
)
story.append(dm_table)
story.append(Spacer(1, 0.2*cm))
section_box("Jaundice - Types & Bilirubin Metabolism", S, story)
story.append(Paragraph(
"Bilirubin is the breakdown product of haem (from RBC destruction). Normal serum bilirubin: 0.3-1.2 mg/dL.", S['body']))
jaundice_table = make_table(
["Type", "Bilirubin raised", "Cause", "Urine bilirubin", "Urobilinogen"],
[
["Pre-hepatic (Haemolytic)", "Unconjugated (indirect)", "Excess RBC haemolysis", "Absent (unconjugated not water-soluble)", "Increased"],
["Hepatic (Hepatocellular)", "Both", "Hepatitis, cirrhosis", "Present", "Variable"],
["Post-hepatic (Obstructive/Cholestatic)", "Conjugated (direct)", "Bile duct obstruction (stone, tumour)", "Present (conjugated = water-soluble)", "Absent (pale stools)"],
],
S, col_widths=[3.5*cm, 3*cm, 3.5*cm, 3*cm, 3*cm]
)
story.append(jaundice_table)
story.append(Spacer(1, 0.2*cm))
section_box("Inborn Errors of Metabolism (Key Examples)", S, story)
iem_table = make_table(
["Disease", "Deficient Enzyme/Gene", "Accumulated Metabolite", "Features"],
[
["PKU (Phenylketonuria)", "Phenylalanine hydroxylase", "Phenylalanine, phenylpyruvate", "Intellectual disability, mousy odour, fair skin/hair (low melanin); treat with low-Phe diet + BH4 (tetrahydrobiopterin)"],
["Maple Syrup Urine Disease", "BCKD (branched-chain keto acid dehydrogenase)", "Leucine, Isoleucine, Valine", "Sweet-smelling urine, encephalopathy, neonatal onset"],
["Homocystinuria", "Cystathionine beta-synthase (CBS)", "Homocysteine, Methionine", "Marfanoid habitus, downward lens dislocation, CVD, intellectual disability, thrombosis"],
["Alkaptonuria", "Homogentisate oxidase", "Homogentisic acid", "Dark urine on standing, ochronosis (dark pigment in connective tissue), arthritis"],
["Albinism", "Tyrosinase", "Reduced melanin", "Lack of pigmentation, photosensitivity, nystagmus"],
["Galactosaemia", "Galactose-1-P uridyltransferase (classic)", "Galactose-1-phosphate", "Jaundice, cataracts, liver cirrhosis, E.coli sepsis in neonates"],
],
S, col_widths=[3*cm, 4*cm, 4*cm, 6*cm]
)
story.append(iem_table)
story.append(Spacer(1, 0.2*cm))
section_box("Porphyrias", S, story)
story.append(Paragraph(
"Disorders of haem biosynthesis. Haem synthesis: Glycine + Succinyl-CoA → ALA (by ALA synthase, B6-dependent; rate-limiting) → Porphobilinogen → Haem.", S['body']))
porphyria_table = make_table(
["Porphyria", "Deficient Enzyme", "Accumulated", "Features"],
[
["AIP (Acute Intermittent Porphyria)", "PBG deaminase", "ALA, PBG", "Acute neurovisceral attacks, abdominal pain, psychosis, neuropathy; NO photosensitivity; precipitated by drugs (barbiturates, OCP)"],
["PCT (Porphyria Cutanea Tarda)", "Uroporphyrinogen decarboxylase", "Uroporphyrin", "Photosensitivity, blistering skin, most common porphyria; associated with alcohol, Hepatitis C"],
["Lead poisoning", "ALA dehydratase (inhibited)", "ALA, Coproporphyrin", "Basophilic stippling, motor neuropathy, Burton's line on gums, encephalopathy"],
],
S, col_widths=[4*cm, 4*cm, 3.5*cm, 5.5*cm]
)
story.append(porphyria_table)
# ── Final page ──────────────────────────────────────────────────────────
story.append(PageBreak())
final_data = [[
Paragraph("End of SMCI Biochemistry Summary Notes",
ParagraphStyle('fin', fontSize=14, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_CENTER)),
],[
Paragraph("Compiled from standard 1st Year MBBS Biochemistry curriculum\n"
"Sayta Medical Coaching Institute (SMCI) | www.smci.in",
ParagraphStyle('fin2', fontSize=10, fontName='Helvetica',
textColor=colors.HexColor("#B3E5FC"), alignment=TA_CENTER)),
]]
final_table = Table(final_data, colWidths=[17*cm])
final_table.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_BLUE),
('TOPPADDING', (0,0), (-1,-1), 12),
('BOTTOMPADDING', (0,0), (-1,-1), 12),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
]))
story.append(Spacer(1, 8*cm))
story.append(final_table)
# ── Build ────────────────────────────────────────────────────────────────
def add_page_number(canvas_obj, doc):
canvas_obj.saveState()
canvas_obj.setFont('Helvetica', 8)
canvas_obj.setFillColor(GRAY)
canvas_obj.drawRightString(19.5*cm, 1.2*cm, f"Page {doc.page}")
canvas_obj.drawString(2*cm, 1.2*cm, "SMCI Biochemistry Summary | Dr. Mayur Sayta")
canvas_obj.restoreState()
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print(f"PDF generated: {OUTPUT}")
if __name__ == '__main__':
build_pdf()
cd /home/daytona/workspace/smci-biochemistry && python generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/smci-biochemistry/SMCI_Biochemistry_Summary.pdf
SMCI Biochemistry Summary
PDF Document · PDF
| # | Chapter | Key Content |
|---|---|---|
| 1 | Amino Acids | Classification, essential AAs, glucogenic/ketogenic, pKa, ninhydrin, mnemonics |
| 2 | Proteins | 4 structural levels, plasma proteins table, denaturation |
| 3 | Enzymes | IUB classification, Michaelis-Menten kinetics, inhibition types, isoenzymes + clinical markers |
| 4 | Carbohydrates | Classification, reducing sugars, polysaccharides table, mutarotation |
| 5 | Carbohydrate Metabolism | Glycolysis, PDC, TCA cycle, HMP shunt, glycogen storage diseases, gluconeogenesis |
| 6 | Lipids & Lipid Metabolism | Beta-oxidation, ketone bodies, DKA, cholesterol, lipoprotein table, fatty acid synthesis |
| 7 | Protein & AA Metabolism | Nitrogen balance, transamination, urea cycle, one-carbon metabolism, homocystinuria |
| 8 | Nucleotides | Purine/pyrimidine structure, de novo vs salvage, gout, Lesch-Nyhan |
| 9 | Molecular Biology | DNA replication enzymes, transcription, translation, antibiotic targets |
| 10 | Vitamins | All fat-soluble (A/D/E/K) and water-soluble (B1-B12, C) with deficiency diseases |
| 11 | Minerals | Fe, Ca, Zn, Cu, I, Se, F - absorption, function, clinical correlates |
| 12 | Bioenergetics | ETC complexes, inhibitors, uncouplers, total ATP yield table |
| 13 | Hormones & Disease | DM, jaundice types, inborn errors (PKU, MSUD, alkaptonuria, galactosaemia), porphyrias |
Ask about this video Hello! Curious about what you're watching? We're here to help. Not sure what to ask? Choose something: Summarise the video Recommend related content What prevents lungs from collapsing? Why does carbon dioxide move faster than oxygen? How do pre-term babies struggle to breathe? Show me transcript The transcript for the video "BREATHING AND EXCHANGE OF GASES in 32 Minutes | Quick Revision PODCAST | Class 11th | NEET" is available in the provided video metadata. Due to its length, I have provided the summary of the key topics discussed so far (up to 22:26) below: Introduction to Respiration and Breathing: (0:00-0:48) The video differentiates between breathing (gas exchange) and cellular respiration (energy production). Respiratory Organs in Organisms: (0:48-2:16) Overview of respiratory mechanisms in various groups, including sponges, flatworms, annelids, arthropods, and chordates. Human Respiratory System Structure: (2:16-6:56) Detailed walkthrough from nostrils, nasal cavity, pharynx, larynx (sound box), trachea, and the branching bronchioles to the alveoli. Mechanism of Breathing: (7:50-12:20) Explains how the diaphragm and intercostal muscles alter thoracic volume to create pressure gradients for inhalation and forced exhalation. Pulmonary Volumes and Capacities: (12:20-15:52) Covers Tidal Volume, IRV, ERV, Residual Volume, and various respiratory capacities using the spirometer. Exchange of Gases: (15:52-19:00) Discusses the diffusion of gases across the alveolar-capillary membrane, influenced by partial pressures and solubility. Transport of Gases: (19:00-22:26) Discusses how and are transported in the blood, including the role of hemoglobin and the formation of oxyhemoglobin and carbaminohemoglobin. Convert into notes
~/breathing-notes/generate_notes_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/breathing-notes/Breathing_and_Exchange_of_Gases_Notes.pdf"
# ── Colours ──────────────────────────────────────────────────────────────────
DARK_TEAL = colors.HexColor("#004D40")
TEAL = colors.HexColor("#00796B")
LIGHT_TEAL = colors.HexColor("#E0F2F1")
ACCENT_TEAL = colors.HexColor("#B2DFDB")
BLUE = colors.HexColor("#1565C0")
LIGHT_BLUE = colors.HexColor("#E3F2FD")
GREEN = colors.HexColor("#2E7D32")
GREEN_BG = colors.HexColor("#E8F5E9")
ORANGE = colors.HexColor("#E65100")
ORANGE_BG = colors.HexColor("#FFF3E0")
PURPLE = colors.HexColor("#4A148C")
PURPLE_BG = colors.HexColor("#F3E5F5")
RED = colors.HexColor("#B71C1C")
RED_BG = colors.HexColor("#FFEBEE")
GRAY = colors.HexColor("#37474F")
LIGHT_GRAY = colors.HexColor("#ECEFF1")
MID_GRAY = colors.HexColor("#90A4AE")
WHITE = colors.white
# ── Style factory ─────────────────────────────────────────────────────────────
def S(name, **kwargs):
defaults = dict(fontSize=10, fontName='Helvetica', textColor=GRAY,
leading=15, spaceAfter=3)
defaults.update(kwargs)
return ParagraphStyle(name, **defaults)
STYLES = {
'cover_title': S('ct', fontSize=26, fontName='Helvetica-Bold', textColor=WHITE,
alignment=TA_CENTER, spaceAfter=6, leading=32),
'cover_sub': S('cs', fontSize=13, fontName='Helvetica',
textColor=colors.HexColor("#B2DFDB"), alignment=TA_CENTER, spaceAfter=4),
'cover_tag': S('ctag', fontSize=11, fontName='Helvetica-Bold',
textColor=colors.HexColor("#FFD54F"), alignment=TA_CENTER, spaceAfter=4),
'ch_title': S('cht', fontSize=16, fontName='Helvetica-Bold', textColor=WHITE,
alignment=TA_LEFT, leading=20),
'section': S('sec', fontSize=12, fontName='Helvetica-Bold', textColor=TEAL,
spaceBefore=8, spaceAfter=4),
'subsection': S('sub', fontSize=11, fontName='Helvetica-Bold', textColor=BLUE,
spaceBefore=5, spaceAfter=3),
'body': S('body', fontSize=10, fontName='Helvetica', textColor=GRAY,
leading=15, spaceAfter=4, alignment=TA_JUSTIFY),
'bullet': S('bul', fontSize=10, fontName='Helvetica', textColor=GRAY,
leading=14, spaceAfter=2, leftIndent=14, bulletIndent=4),
'subbullet': S('sbul', fontSize=9.5, fontName='Helvetica', textColor=GRAY,
leading=13, spaceAfter=2, leftIndent=26, bulletIndent=16),
'keypoint': S('kp', fontSize=10, fontName='Helvetica-Bold', textColor=ORANGE,
leading=14, spaceAfter=3),
'mnemonic': S('mn', fontSize=10, fontName='Helvetica-BoldOblique', textColor=PURPLE,
leading=14, spaceAfter=3),
'formula': S('fm', fontSize=11, fontName='Helvetica-Bold', textColor=BLUE,
alignment=TA_CENTER, spaceAfter=6, leading=18),
'th': S('th', fontSize=9, fontName='Helvetica-Bold', textColor=WHITE,
alignment=TA_CENTER),
'td': S('td', fontSize=9, fontName='Helvetica', textColor=GRAY,
leading=13),
'timestamp': S('ts', fontSize=8, fontName='Helvetica-Oblique',
textColor=MID_GRAY, alignment=TA_LEFT),
}
# ── Helper functions ──────────────────────────────────────────────────────────
def p(text, style='body'):
return Paragraph(text, STYLES[style])
def b(text): return f"<b>{text}</b>"
def i(text): return f"<i>{text}</i>"
def chapter_header(title, number, story):
data = [[p(f"Topic {number} | {title}", 'ch_title')]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_TEAL),
('TOPPADDING', (0,0), (-1,-1), 10),
('BOTTOMPADDING', (0,0), (-1,-1), 10),
('LEFTPADDING', (0,0), (-1,-1), 14),
]))
story.append(PageBreak())
story.append(t)
story.append(Spacer(1, 0.3*cm))
def section_box(title, story, bg=LIGHT_TEAL, fc=TEAL):
data = [[Paragraph(title, ParagraphStyle('sb', fontSize=11, fontName='Helvetica-Bold',
textColor=fc, leading=16))]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 10),
('LINEBELOW', (0,0), (-1,-1), 1.5, fc),
]))
story.append(t)
story.append(Spacer(1, 0.1*cm))
def callout(label, text, story, bg=ORANGE_BG, border=ORANGE):
data = [[Paragraph(f"<b>{label}:</b> {text}",
ParagraphStyle('co', fontSize=9.5, fontName='Helvetica',
textColor=GRAY, leading=14))]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), bg),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LEFTPADDING', (0,0), (-1,-1), 10),
('LINEBEFORE', (0,0), (0,-1), 4, border),
]))
story.append(t)
story.append(Spacer(1, 0.15*cm))
def make_table(headers, rows, col_widths=None):
if col_widths is None:
w = 17*cm / len(headers)
col_widths = [w]*len(headers)
header_row = [Paragraph(h, STYLES['th']) for h in headers]
data = [header_row] + [
[Paragraph(str(c), STYLES['td']) for c in row] for row in rows
]
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), TEAL),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#B0BEC5")),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('VALIGN', (0,0), (-1,-1), 'TOP'),
]))
return t
# ── Build PDF ─────────────────────────────────────────────────────────────────
def build():
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Breathing and Exchange of Gases - Notes",
author="Class 11 Biology | NEET"
)
story = []
# ── COVER ─────────────────────────────────────────────────────────────────
cover_rows = [
[p("BREATHING &", 'cover_title')],
[p("EXCHANGE OF GASES", 'cover_title')],
[p("Complete Quick Revision Notes", 'cover_sub')],
[p("Class 11th Biology | NEET Preparation", 'cover_tag')],
[p("Based on: 32-Minute Quick Revision Podcast", 'cover_sub')],
]
cover = Table(cover_rows, colWidths=[17*cm])
cover.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_TEAL),
('TOPPADDING', (0,0), (-1,-1), 10),
('BOTTOMPADDING', (0,0), (-1,-1), 10),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
]))
story.append(Spacer(1, 2*cm))
story.append(cover)
story.append(Spacer(1, 0.5*cm))
badges = [[
Paragraph("7 Topics Covered", ParagraphStyle('b1', fontSize=10, fontName='Helvetica-Bold',
textColor=DARK_TEAL, alignment=TA_CENTER)),
Paragraph("NEET High-Yield", ParagraphStyle('b2', fontSize=10, fontName='Helvetica-Bold',
textColor=DARK_TEAL, alignment=TA_CENTER)),
Paragraph("Tables & Mnemonics", ParagraphStyle('b3', fontSize=10, fontName='Helvetica-Bold',
textColor=DARK_TEAL, alignment=TA_CENTER)),
]]
badge_t = Table(badges, colWidths=[5.5*cm, 5.5*cm, 5.5*cm])
badge_t.setStyle(TableStyle([
('BACKGROUND', (0,0), (0,0), colors.HexColor("#FFF9C4")),
('BACKGROUND', (1,0), (1,0), colors.HexColor("#C8E6C9")),
('BACKGROUND', (2,0), (2,0), colors.HexColor("#B2EBF2")),
('TOPPADDING', (0,0), (-1,-1), 8),
('BOTTOMPADDING', (0,0), (-1,-1), 8),
('GRID', (0,0), (-1,-1), 1, WHITE),
]))
story.append(badge_t)
story.append(PageBreak())
# ── TABLE OF CONTENTS ─────────────────────────────────────────────────────
section_box("TABLE OF CONTENTS", story)
toc = [
("1", "Respiration vs Breathing", "0:00 - 0:48"),
("2", "Respiratory Organs Across Organisms", "0:48 - 2:16"),
("3", "Human Respiratory System", "2:16 - 6:56"),
("4", "Mechanism of Breathing", "7:50 - 12:20"),
("5", "Pulmonary Volumes & Capacities", "12:20 - 15:52"),
("6", "Exchange of Gases", "15:52 - 19:00"),
("7", "Transport of Gases", "19:00 - 22:26"),
]
for num, title, ts in toc:
row = [[
Paragraph(f"<b>{num}</b>", ParagraphStyle('tn', fontSize=11, fontName='Helvetica-Bold',
textColor=TEAL, alignment=TA_CENTER)),
Paragraph(f"<b>{title}</b>", ParagraphStyle('tt', fontSize=11, fontName='Helvetica-Bold',
textColor=DARK_TEAL)),
Paragraph(ts, ParagraphStyle('ts2', fontSize=9, fontName='Helvetica-Oblique',
textColor=MID_GRAY, alignment=TA_CENTER)),
]]
t = Table(row, colWidths=[1.5*cm, 12*cm, 3.5*cm])
t.setStyle(TableStyle([
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
('LINEBELOW', (0,0), (-1,-1), 0.5, colors.HexColor("#CFD8DC")),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
]))
story.append(t)
# ════════════════════════════════════════════════════════════════════════
# TOPIC 1 - RESPIRATION vs BREATHING
# ════════════════════════════════════════════════════════════════════════
chapter_header("RESPIRATION vs BREATHING", 1, story)
story.append(p("Timestamp: 0:00 - 0:48", 'timestamp'))
story.append(Spacer(1, 0.2*cm))
diff_table = make_table(
["Feature", "Breathing", "Cellular Respiration"],
[
["Definition", "Physical process of inhaling O2 and exhaling CO2", "Biochemical process of breaking down glucose to produce ATP (energy)"],
["Type", "Mechanical / Physical", "Chemical / Metabolic"],
["Location", "Lungs and respiratory tract", "Inside cells (cytoplasm and mitochondria)"],
["Products", "CO2 and H2O (exhaled)", "ATP + CO2 + H2O (+ heat)"],
["Also called", "External respiration / Ventilation", "Internal respiration / Tissue respiration"],
],
col_widths=[3.5*cm, 6.5*cm, 7*cm]
)
story.append(diff_table)
story.append(Spacer(1, 0.3*cm))
callout("Key Distinction",
"Breathing = movement of air in and out of lungs (a physical act). "
"Cellular Respiration = ATP production inside cells (a biochemical reaction). "
"Both together constitute the complete process of respiration.", story)
# ════════════════════════════════════════════════════════════════════════
# TOPIC 2 - RESPIRATORY ORGANS ACROSS ORGANISMS
# ════════════════════════════════════════════════════════════════════════
chapter_header("RESPIRATORY ORGANS ACROSS ORGANISMS", 2, story)
story.append(p("Timestamp: 0:48 - 2:16", 'timestamp'))
story.append(Spacer(1, 0.2*cm))
org_table = make_table(
["Organism Group", "Respiratory Organ / Method", "Notes"],
[
["Sponges, Cnidarians, Flatworms", "Simple diffusion through body surface", "No special respiratory organs; thin body allows direct gas exchange"],
["Earthworm (Annelids)", "Moist skin (cutaneous respiration)", "Skin must remain moist; mucus secreted to maintain moisture"],
["Insects (Arthropods)", "Tracheal system (tracheae and tracheoles)", "Air enters via spiracles; tracheoles deliver O2 directly to cells; no blood involvement"],
["Aquatic Arthropods / Fish", "Gills (branchial respiration)", "Counter-current mechanism in fish gills maximises O2 extraction"],
["Amphibians", "Skin + Lungs (bimodal respiration)", "Aquatic larvae use gills; adults use both skin and lungs"],
["Reptiles, Birds, Mammals", "Lungs (pulmonary respiration)", "Birds have unique parabronchial lungs with air sacs for continuous flow"],
],
col_widths=[4*cm, 5*cm, 8*cm]
)
story.append(org_table)
story.append(Spacer(1, 0.2*cm))
callout("NEET Tip",
"Insects use tracheae - NOT lungs or gills. "
"Earthworm breathes through moist skin. "
"Aquatic insects like mosquito larvae use siphon tubes.", story)
# ════════════════════════════════════════════════════════════════════════
# TOPIC 3 - HUMAN RESPIRATORY SYSTEM
# ════════════════════════════════════════════════════════════════════════
chapter_header("HUMAN RESPIRATORY SYSTEM", 3, story)
story.append(p("Timestamp: 2:16 - 6:56", 'timestamp'))
story.append(Spacer(1, 0.2*cm))
section_box("Parts of the Respiratory Tract (in order)", story)
tract_items = [
("Nostrils (External Nares)",
"Entry point for air. Lined with hair (vibrissae) to filter large dust particles."),
("Nasal Cavity",
"Air is warmed, humidified, and filtered. Lined with ciliated mucous epithelium. "
"Contains turbinate bones (conchae) to increase surface area."),
("Pharynx",
"Common passage for air and food. Divided into nasopharynx, oropharynx, and laryngopharynx."),
("Larynx (Voice Box / Adam's Apple)",
"Contains vocal cords (true and false). Epiglottis (a flap of elastic cartilage) "
"closes during swallowing to prevent food entering trachea."),
("Trachea (Windpipe)",
"~12 cm long. Supported by C-shaped cartilaginous rings (prevents collapse). "
"Lined with ciliated pseudostratified columnar epithelium + goblet cells (mucus)."),
("Primary Bronchi (Right & Left)",
"Trachea divides at Carina (T4-T5 level) into right and left bronchi. "
"Right bronchus is wider, shorter, and more vertical - aspirated objects lodge here more often."),
("Secondary (Lobar) Bronchi",
"3 on right (3 lobes), 2 on left (2 lobes - cardiac notch accommodates heart)."),
("Tertiary (Segmental) Bronchi",
"Supply bronchopulmonary segments."),
("Bronchioles",
"No cartilage. Smooth muscle wall. Terminal bronchioles lead to respiratory bronchioles."),
("Alveolar Ducts → Alveolar Sacs → Alveoli",
"Site of actual gas exchange. ~300 million alveoli in adult human lungs. "
"Total surface area ~70 m2 (size of a tennis court)."),
]
for num, (part, desc) in enumerate(tract_items, 1):
story.append(p(f"<b>{num}. {part}</b>", 'subsection'))
story.append(p(desc))
section_box("Alveoli - Structure & Function", story)
for item in [
"Type I pneumocytes (squamous) - thin wall for gas exchange (form 95% of alveolar surface)",
"Type II pneumocytes (cuboidal) - secrete surfactant (dipalmitoyl phosphatidylcholine / DPPC); prevent alveolar collapse",
"Alveolar macrophages (dust cells) - phagocytose inhaled particles",
"Alveolar wall = 0.2 micrometres thick (extremely thin for rapid diffusion)",
"Alveoli are surrounded by dense capillary network - blood flow from pulmonary arteries",
]:
story.append(p(f"• {item}", 'bullet'))
callout("Surfactant",
"Reduces surface tension inside alveoli. Prevents collapse during expiration. "
"Deficient in premature babies (< 28 weeks) → Neonatal Respiratory Distress Syndrome (NRDS / Hyaline Membrane Disease). "
"Treated with exogenous surfactant + corticosteroids antenatally.", story)
section_box("Lungs - Key Facts", story)
lung_table = make_table(
["Feature", "Right Lung", "Left Lung"],
[
["Lobes", "3 (Upper, Middle, Lower)", "2 (Upper, Lower)"],
["Fissures", "2 (Oblique + Horizontal)", "1 (Oblique only)"],
["Size", "Larger and heavier", "Smaller (cardiac notch for heart)"],
["Bronchopulmonary segments", "10", "8-10"],
],
col_widths=[4.5*cm, 6.5*cm, 6*cm]
)
story.append(lung_table)
# ════════════════════════════════════════════════════════════════════════
# TOPIC 4 - MECHANISM OF BREATHING
# ════════════════════════════════════════════════════════════════════════
chapter_header("MECHANISM OF BREATHING", 4, story)
story.append(p("Timestamp: 7:50 - 12:20", 'timestamp'))
story.append(Spacer(1, 0.2*cm))
story.append(p(
"Breathing works on the principle of Boyle's Law: "
b("Pressure x Volume = constant") + " (at constant temperature). "
"Increasing thoracic volume decreases pressure, drawing air in; decreasing volume raises pressure, pushing air out.",
'body'))
story.append(Spacer(1, 0.2*cm))
section_box("Inhalation (Inspiration)", story, bg=GREEN_BG, fc=GREEN)
for item in [
"Diaphragm contracts and flattens (dome-shaped → flatter) - moves downward",
"External intercostal muscles contract - ribs move upward and outward",
"Thoracic cavity volume INCREASES",
"Intrapulmonary (intra-alveolar) pressure DECREASES below atmospheric pressure",
"Air flows IN (from high to low pressure)",
"Normal quiet inspiration: active process (muscles contract)",
]:
story.append(p(f"• {item}", 'bullet'))
section_box("Exhalation (Expiration)", story, bg=RED_BG, fc=RED)
for item in [
"Diaphragm relaxes - returns to dome shape (moves upward)",
"Internal intercostal muscles relax (quiet expiration) or contract (forced expiration)",
"Thoracic cavity volume DECREASES",
"Intrapulmonary pressure INCREASES above atmospheric pressure",
"Air flows OUT",
"Normal quiet expiration: passive process (recoil of elastic lungs)",
"Forced expiration (e.g. coughing): active - internal intercostals + abdominal muscles contract",
]:
story.append(p(f"• {item}", 'bullet'))
section_box("Pressures Involved", story)
press_table = make_table(
["Pressure Type", "Definition", "Normal Value"],
[
["Atmospheric pressure", "Pressure of outside air", "760 mmHg (at sea level)"],
["Intrapulmonary pressure", "Pressure inside alveoli", "760 mmHg at rest; drops to ~758 during inspiration"],
["Intrapleural pressure", "Pressure in pleural space between lungs and chest wall", "Always negative: ~756 mmHg (4 mmHg below atmospheric); prevents lung collapse"],
],
col_widths=[4.5*cm, 6*cm, 6.5*cm]
)
story.append(press_table)
callout("Why do lungs NOT collapse?",
"The intrapleural pressure is always NEGATIVE (sub-atmospheric). "
"This keeps the lungs pulled against the chest wall at all times. "
"If air enters the pleural space (pneumothorax), this negative pressure is lost and the lung collapses.", story)
# ════════════════════════════════════════════════════════════════════════
# TOPIC 5 - PULMONARY VOLUMES & CAPACITIES
# ════════════════════════════════════════════════════════════════════════
chapter_header("PULMONARY VOLUMES & CAPACITIES", 5, story)
story.append(p("Timestamp: 12:20 - 15:52", 'timestamp'))
story.append(Spacer(1, 0.2*cm))
story.append(p(b("Spirometer") + " - instrument used to measure lung volumes and capacities.", 'body'))
story.append(Spacer(1, 0.15*cm))
section_box("Pulmonary Volumes (4 Basic)", story)
vol_table = make_table(
["Volume", "Abbreviation", "Definition", "Normal Value"],
[
["Tidal Volume", "TV", "Air inhaled or exhaled in one normal quiet breath", "500 mL (0.5 L)"],
["Inspiratory Reserve Volume", "IRV", "Extra air that can be forcibly inhaled after normal inspiration", "2500-3000 mL"],
["Expiratory Reserve Volume", "ERV", "Extra air that can be forcibly exhaled after normal expiration", "1000-1200 mL"],
["Residual Volume", "RV", "Air remaining in lungs even after maximum forcible expiration; cannot be measured by spirometer", "1100-1200 mL"],
],
col_widths=[4*cm, 2.5*cm, 6*cm, 4.5*cm]
)
story.append(vol_table)
story.append(Spacer(1, 0.2*cm))
section_box("Pulmonary Capacities (Combinations of Volumes)", story)
cap_table = make_table(
["Capacity", "Formula", "Normal Value", "Significance"],
[
["Inspiratory Capacity (IC)", "TV + IRV", "~3500 mL", "Maximum air inhaled from end of normal expiration"],
["Expiratory Capacity (EC)", "TV + ERV", "~1700 mL", "Maximum air exhaled from end of normal inspiration"],
["Functional Residual Capacity (FRC)", "ERV + RV", "~2200-2400 mL", "Air remaining after normal (passive) expiration; keeps alveoli open"],
["Vital Capacity (VC)", "IRV + TV + ERV", "~4600 mL (men); ~3100 mL (women)", "Maximum air moved in one breath; indicator of respiratory fitness"],
["Total Lung Capacity (TLC)", "IRV + TV + ERV + RV = VC + RV", "~6000 mL (6 L)", "Total air lungs can hold"],
],
col_widths=[3.5*cm, 3*cm, 3*cm, 7.5*cm]
)
story.append(cap_table)
story.append(Spacer(1, 0.2*cm))
callout("NEET Mnemonic - Order of volumes",
"TV IRV ERV RV = 'Tiny Insects Eat Rapidly'", story, bg=PURPLE_BG, border=PURPLE)
callout("Important",
"Residual Volume (RV) CANNOT be measured by spirometer (air cannot be expelled). "
"Any capacity including RV (FRC, TLC) also cannot be directly measured by spirometer - "
"requires gas dilution or body plethysmography.", story)
# ════════════════════════════════════════════════════════════════════════
# TOPIC 6 - EXCHANGE OF GASES
# ════════════════════════════════════════════════════════════════════════
chapter_header("EXCHANGE OF GASES", 6, story)
story.append(p("Timestamp: 15:52 - 19:00", 'timestamp'))
story.append(Spacer(1, 0.2*cm))
section_box("Principle: Diffusion across Alveolar-Capillary Membrane", story)
story.append(p(
"Gas exchange occurs by " + b("simple diffusion") + " - gases move from higher partial pressure "
"to lower partial pressure. No energy (ATP) is required. "
"Governed by " + b("Fick's Law of Diffusion") + ".", 'body'))
story.append(Spacer(1, 0.1*cm))
story.append(p("Rate of Diffusion ∝ (Surface Area × Solubility × ΔP) / (Thickness × √Molecular Weight)", 'formula'))
section_box("Partial Pressures of Gases", story)
pp_table = make_table(
["Gas", "Atmospheric Air", "Alveolar Air", "Deoxygenated Blood (entering lungs)", "Oxygenated Blood (leaving lungs)"],
[
["O2 (pO2)", "159 mmHg", "104 mmHg", "40 mmHg", "95 mmHg"],
["CO2 (pCO2)", "0.3 mmHg", "40 mmHg", "45 mmHg", "40 mmHg"],
["N2", "597 mmHg", "569 mmHg", "569 mmHg", "569 mmHg"],
["H2O vapour", "~4 mmHg", "47 mmHg", "47 mmHg", "47 mmHg"],
],
col_widths=[3*cm, 3*cm, 3*cm, 4*cm, 4*cm]
)
story.append(pp_table)
story.append(Spacer(1, 0.2*cm))
section_box("Direction of Gas Movement", story)
for item in [
b("O2 at alveolus:") + " pO2 alveoli (104) > pO2 capillary blood (40) → O2 diffuses INTO blood",
b("CO2 at alveolus:") + " pCO2 capillary blood (45) > pCO2 alveoli (40) → CO2 diffuses OUT into alveoli",
b("O2 at tissues:") + " pO2 capillary blood (95) > pO2 tissue cells (40) → O2 diffuses INTO tissues",
b("CO2 at tissues:") + " pCO2 tissue cells (45) > pCO2 capillary blood (40) → CO2 diffuses INTO blood",
]:
story.append(p(f"• {item}", 'bullet'))
section_box("Why CO2 Diffuses Faster than O2", story)
story.append(p(
"Despite having a lower partial pressure difference, CO2 diffuses approximately "
b("20-25 times faster") + " than O2 across the alveolar membrane.", 'body'))
for item in [
b("Higher solubility") + " of CO2 in plasma and biological membranes (CO2 solubility ~24x > O2)",
b("Molecular weight") + " of CO2 (44) vs O2 (32) - CO2 is heavier but solubility advantage overwhelms this",
"Net result: CO2 diffuses much more readily despite smaller pressure gradient",
]:
story.append(p(f"• {item}", 'bullet'))
section_box("Factors Affecting Gas Exchange", story)
factors_table = make_table(
["Factor", "Effect on Diffusion Rate", "Clinical Example"],
[
["Surface area", "Directly proportional - more area = faster diffusion", "Emphysema destroys alveolar walls → reduced surface area → hypoxia"],
["Membrane thickness", "Inversely proportional - thicker membrane = slower", "Pulmonary fibrosis / oedema → thickened membrane → impaired O2 exchange"],
["Partial pressure difference", "Directly proportional", "High altitude: lower pO2 → reduced gradient → less O2 absorbed"],
["Solubility of gas", "Directly proportional", "CO2 more soluble than O2 → diffuses faster"],
["Molecular weight", "Inversely proportional (Graham's Law)", "Lighter gases diffuse faster"],
],
col_widths=[3.5*cm, 4.5*cm, 9*cm]
)
story.append(factors_table)
# ════════════════════════════════════════════════════════════════════════
# TOPIC 7 - TRANSPORT OF GASES
# ════════════════════════════════════════════════════════════════════════
chapter_header("TRANSPORT OF GASES", 7, story)
story.append(p("Timestamp: 19:00 - 22:26", 'timestamp'))
story.append(Spacer(1, 0.2*cm))
section_box("Transport of Oxygen (O2)", story, bg=LIGHT_BLUE, fc=BLUE)
story.append(p(b("97%") + " carried bound to Haemoglobin (Hb) as " + b("Oxyhaemoglobin (HbO2)") +
" inside RBCs. Only " + b("3%") + " dissolved in plasma.", 'body'))
story.append(p(b("Haemoglobin Structure:"), 'subsection'))
for item in [
"4 subunits: 2 alpha + 2 beta chains (in adult HbA)",
"Each subunit has 1 haem group containing Fe2+ (ferrous iron)",
"Each Hb molecule can bind 4 O2 molecules (one per haem)",
"1 g of Hb can carry 1.34 mL of O2",
"Normal Hb: 14-16 g/dL in adults",
]:
story.append(p(f"• {item}", 'bullet'))
story.append(p(b("Oxyhaemoglobin Dissociation Curve (ODC):"), 'subsection'))
story.append(p("S-shaped (sigmoid) curve. X-axis = pO2; Y-axis = % Hb saturation.", 'body'))
odc_table = make_table(
["Shift", "Direction", "Cause", "Effect"],
[
["Right shift", "Decreased O2 affinity of Hb", "↑ Temperature, ↑ pCO2, ↑ H+ (↓pH), ↑ 2,3-BPG", "O2 released more readily to tissues (Bohr Effect)"],
["Left shift", "Increased O2 affinity of Hb", "↓ Temperature, ↓ pCO2, ↓ H+ (↑pH), ↓ 2,3-BPG, Fetal Hb (HbF)", "O2 held more tightly; less release to tissues"],
],
col_widths=[2.5*cm, 3.5*cm, 5.5*cm, 5.5*cm]
)
story.append(odc_table)
story.append(Spacer(1, 0.2*cm))
callout("Bohr Effect",
"Increased CO2 and H+ (during exercise/active metabolism) cause RIGHT shift of ODC → "
"Hb releases more O2 to working tissues. This is a physiological adaptation.", story)
callout("Fetal Haemoglobin (HbF)",
"Has 2 alpha + 2 gamma chains. Greater O2 affinity than adult HbA (left-shifted ODC). "
"This allows fetus to extract O2 from maternal blood across placenta.", story)
section_box("Transport of Carbon Dioxide (CO2)", story, bg=ORANGE_BG, fc=ORANGE)
story.append(p("CO2 is produced in tissues during cellular respiration and must be transported to lungs for removal:", 'body'))
co2_table = make_table(
["Method", "% of CO2 Transported", "Mechanism"],
[
["As Bicarbonate (HCO3-)", "70%", "CO2 + H2O → H2CO3 → H+ + HCO3- (catalysed by Carbonic Anhydrase inside RBCs). HCO3- exits RBC to plasma; Cl- enters (Chloride Shift / Hamburger Phenomenon)"],
["Bound to Hb as Carbaminohaemoglobin (HbCO2)", "23%", "CO2 binds to -NH2 (amino) groups of globin protein chains (NOT to haem iron). CO2 + Hb-NH2 → Hb-NHCOO- + H+"],
["Dissolved in plasma", "7%", "CO2 physically dissolved in blood plasma"],
],
col_widths=[4*cm, 2.5*cm, 10.5*cm]
)
story.append(co2_table)
story.append(Spacer(1, 0.2*cm))
callout("Chloride Shift (Hamburger Phenomenon)",
"When HCO3- is produced in RBCs at tissues, it moves out of RBC into plasma. "
"To maintain electrical neutrality, Cl- moves into RBC. "
"This is the Chloride Shift. The reverse happens at the lungs.", story)
callout("Haldane Effect",
"Oxygenation of Hb at lungs reduces its affinity for CO2 → CO2 is released. "
"Deoxygenated Hb (in tissues) binds CO2 more readily. "
"Complements Bohr Effect.", story)
section_box("Summary Comparison: O2 vs CO2 Transport", story)
compare_table = make_table(
["Feature", "O2", "CO2"],
[
["Primary carrier", "Haemoglobin (97%)", "Bicarbonate ions (70%)"],
["Plasma dissolved", "3%", "7%"],
["Protein-bound", "97% (as oxyhaemoglobin)", "23% (as carbaminohaemoglobin)"],
["Binding site on Hb", "Haem group (Fe2+)", "Amino groups of globin chains"],
["Rate of diffusion", "Slower", "20-25x faster (higher solubility)"],
["Effect of exercise", "More O2 released (Bohr effect)", "More CO2 carried (Haldane effect)"],
],
col_widths=[5*cm, 6*cm, 6*cm]
)
story.append(compare_table)
# ── QUICK REVISION SUMMARY ────────────────────────────────────────────────
story.append(PageBreak())
section_box("QUICK REVISION - HIGH YIELD NEET POINTS", story, bg=PURPLE_BG, fc=PURPLE)
neet_points = [
"Insects breathe via tracheae (spiracles); earthworms via moist skin",
"Right bronchus: wider, shorter, more vertical → foreign body aspiration site",
"Alveoli: Type I = gas exchange; Type II = surfactant (DPPC); Macrophages = defence",
"Surfactant deficiency in premature babies → NRDS (Hyaline Membrane Disease)",
"Intrapleural pressure is ALWAYS negative (prevents lung collapse)",
"TV = 500 mL; RV = 1100-1200 mL; VC = ~4600 mL; TLC = ~6000 mL",
"RV cannot be measured by spirometer",
"CO2 diffuses 20-25x faster than O2 (due to higher solubility)",
"O2 transport: 97% as oxyhaemoglobin; 3% dissolved in plasma",
"CO2 transport: 70% bicarbonate; 23% carbaminohaemoglobin; 7% dissolved",
"Bohr Effect: ↑CO2/↑H+/↑Temp/↑2,3-BPG → right shift ODC → more O2 released",
"Haldane Effect: oxygenation of Hb → reduced CO2 affinity → CO2 released at lungs",
"HbF has higher O2 affinity than HbA (left-shifted ODC) → fetus extracts O2 from mother",
"Chloride Shift: HCO3- moves OUT of RBC, Cl- moves IN (at tissues); reverse at lungs",
"CO2 + Hb-NH2 → Carbaminohaemoglobin (binds to PROTEIN not haem)",
]
for pt in neet_points:
story.append(p(f"✓ {pt}", 'bullet'))
# ── BACK COVER ────────────────────────────────────────────────────────────
story.append(Spacer(1, 0.5*cm))
end_data = [[
Paragraph("End of Notes: Breathing & Exchange of Gases",
ParagraphStyle('fin', fontSize=13, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_CENTER)),
],[
Paragraph("Class 11 Biology | NEET Preparation",
ParagraphStyle('fin2', fontSize=10, fontName='Helvetica',
textColor=ACCENT_TEAL, alignment=TA_CENTER)),
]]
end_t = Table(end_data, colWidths=[17*cm])
end_t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), DARK_TEAL),
('TOPPADDING', (0,0), (-1,-1), 12),
('BOTTOMPADDING', (0,0), (-1,-1), 12),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
]))
story.append(end_t)
# ── Page numbers ──────────────────────────────────────────────────────────
def add_page_number(canvas_obj, doc):
canvas_obj.saveState()
canvas_obj.setFont('Helvetica', 8)
canvas_obj.setFillColor(MID_GRAY)
canvas_obj.drawRightString(19.5*cm, 1.2*cm, f"Page {doc.page}")
canvas_obj.drawString(2*cm, 1.2*cm, "Breathing & Exchange of Gases | Class 11 Biology | NEET")
canvas_obj.restoreState()
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print(f"PDF created: {OUTPUT}")
if __name__ == '__main__':
build()
cd /home/daytona/workspace/breathing-notes && python generate_notes_pdf.py 2>&1
~/breathing-notes/generate_notes_pdf.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/breathing-notes/generate_notes_pdf.py'
cd /home/daytona/workspace/breathing-notes && python generate_notes_pdf.py 2>&1
cd /home/daytona/workspace/breathing-notes && python3 -c " content = open('generate_notes_pdf.py').read() import re # Fix pattern: 'some string'\n b('...') -> 'some string' +\n b('...') # This finds a quoted string at end of line followed by b( on next line inside a p() call fixed = re.sub(r'(\"[^\"]*\")\n(\s+)(b\()', r'\1 +\n\2\3', content) open('generate_notes_pdf.py', 'w').write(fixed) print('Done, lines fixed:', content.count('\n b(')) "
cd /home/daytona/workspace/breathing-notes && python generate_notes_pdf.py 2>&1
Breathing and Exchange of Gases Notes
PDF Document · PDF
| Feature | Breathing | Cellular Respiration |
|---|---|---|
| Type | Physical/Mechanical | Chemical/Metabolic |
| Location | Lungs | Cytoplasm + Mitochondria |
| Products | CO2 + H2O exhaled | ATP + CO2 + H2O + heat |
| Volume | Value | Capacity | Formula | Value |
|---|---|---|---|---|
| TV | 500 mL | IC | TV+IRV | ~3500 mL |
| IRV | 2500-3000 mL | FRC | ERV+RV | ~2300 mL |
| ERV | 1000-1200 mL | VC | IRV+TV+ERV | ~4600 mL |
| RV | 1100-1200 mL | TLC | VC+RV | ~6000 mL |
https://youtu.be/i5IgO0erWE0?si=9yPrurewDDsgvMQ_ convert into notes
youtube i5IgO0erWE0 title topic
https://www.youtube.com/watch?v=i5IgO0erWE0
https://youtu.be/i5IgO0erWE0 does not return accessible content through my web tools - YouTube blocks direct extraction. Once you share the transcript or topic, I'll convert it into a well-structured PDF notes document just like the previous ones.