Hello I am the medical student you can help me

Hello! Welcome. I'm Orris, and I'm glad to help you on your medical studies journey.
Whether you need help with:
  • Anatomy, Physiology, Pathology - understanding how the body works
  • Pharmacology - drug mechanisms, dosing, side effects
  • Clinical reasoning - working through diagnoses and management
  • Specific diseases or conditions - from common to rare
  • Exam prep - USMLE, MBBS, PLAB, or any other exam
...just ask away! What topic are you working on today?

I am BNYS students under MGR University

That's great! BNYS (Bachelor of Naturopathy and Yogic Sciences) under MGR University (The Tamil Nadu Dr. M.G.R. Medical University) is a fantastic program that blends naturopathic medicine with modern biomedical sciences.
As a BNYS student, your curriculum typically covers:
Basic Sciences (Early Years)
  • Anatomy, Physiology, Biochemistry
  • Pathology, Microbiology, Pharmacology
Naturopathy Subjects
  • Principles of Naturopathy
  • Hydrotherapy, Mud therapy, Massage therapy
  • Dietetics & Nutrition
  • Acupuncture & Acupressure
Yoga Sciences
  • Yoga philosophy & anatomy
  • Therapeutic yoga
  • Pranayama & meditation
Clinical Subjects
  • Medicine, Surgery, Obstetrics & Gynecology
  • Naturopathic diagnosis & treatment

I can help you with any subject in your syllabus - whether it's understanding a concept, preparing for exams, or working through clinical cases.
What are you currently studying or struggling with? Which year are you in? πŸŽ“

Create study notes or a summary document for your courses

Asking for Preferences
Asking for Preferences
Reading File
Searching the Web

BNYS 1st year Physiology syllabus MGR University topics

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Running Command

mkdir -p /home/daytona/workspace/bnys-physiology && ls /home/daytona/workspace/b…

Writing File

~/bnys-physiology/generate_notes.py

#!/usr/bin/env python3
"""
BNYS 1st Year Physiology Study Notes PDF Generator
MGR University | Generated: July 2026
"""

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.colors import HexColor, white, black
from reportlab.lib.units import cm, mm
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.platypus import BaseDocTemplate, Frame, PageTemplate

OUTPUT = "/home/daytona/workspace/bnys-physiology/BNYS_Physiology_Notes.pdf"

# ── Colours ──────────────────────────────────────────────────────────────────
DARK_BLUE   = HexColor("#1A3A5C")
MID_BLUE    = HexColor("#2E6DA4")
LIGHT_BLUE  = HexColor("#D6E8F7")
ACCENT      = HexColor("#E8941A")
LIGHT_GREY  = HexColor("#F5F5F5")
DARK_GREY   = HexColor("#444444")
GREEN       = HexColor("#2E7D32")
RED         = HexColor("#C62828")
PURPLE      = HexColor("#6A1B9A")
TEAL        = HexColor("#00695C")

def make_styles():
    base = getSampleStyleSheet()

    styles = {
        "title": ParagraphStyle("title",
            fontSize=28, fontName="Helvetica-Bold",
            textColor=white, alignment=TA_CENTER,
            spaceAfter=6),
        "subtitle": ParagraphStyle("subtitle",
            fontSize=14, fontName="Helvetica",
            textColor=LIGHT_BLUE, alignment=TA_CENTER,
            spaceAfter=4),
        "cover_small": ParagraphStyle("cover_small",
            fontSize=11, fontName="Helvetica",
            textColor=LIGHT_BLUE, alignment=TA_CENTER,
            spaceAfter=2),
        "chapter_title": ParagraphStyle("chapter_title",
            fontSize=20, fontName="Helvetica-Bold",
            textColor=white, alignment=TA_LEFT,
            spaceAfter=4, spaceBefore=2),
        "section_head": ParagraphStyle("section_head",
            fontSize=14, fontName="Helvetica-Bold",
            textColor=DARK_BLUE, spaceAfter=6, spaceBefore=12,
            borderPad=4),
        "subsection_head": ParagraphStyle("subsection_head",
            fontSize=12, fontName="Helvetica-Bold",
            textColor=MID_BLUE, spaceAfter=4, spaceBefore=8),
        "body": ParagraphStyle("body",
            fontSize=10, fontName="Helvetica",
            textColor=DARK_GREY, spaceAfter=4, leading=15,
            alignment=TA_JUSTIFY),
        "bullet": ParagraphStyle("bullet",
            fontSize=10, fontName="Helvetica",
            textColor=DARK_GREY, spaceAfter=3, leading=14,
            leftIndent=16, bulletIndent=4),
        "key_box": ParagraphStyle("key_box",
            fontSize=10, fontName="Helvetica-Bold",
            textColor=DARK_BLUE, spaceAfter=2, leading=14),
        "note": ParagraphStyle("note",
            fontSize=9, fontName="Helvetica-Oblique",
            textColor=HexColor("#555555"), spaceAfter=3, leading=13,
            leftIndent=8),
        "table_header": ParagraphStyle("table_header",
            fontSize=10, fontName="Helvetica-Bold",
            textColor=white, alignment=TA_CENTER),
        "table_cell": ParagraphStyle("table_cell",
            fontSize=9, fontName="Helvetica",
            textColor=DARK_GREY, alignment=TA_LEFT, leading=13),
        "toc_entry": ParagraphStyle("toc_entry",
            fontSize=11, fontName="Helvetica",
            textColor=DARK_BLUE, spaceAfter=3, leading=16,
            leftIndent=10),
        "toc_title": ParagraphStyle("toc_title",
            fontSize=16, fontName="Helvetica-Bold",
            textColor=DARK_BLUE, spaceAfter=10, alignment=TA_CENTER),
    }
    return styles

S = make_styles()

def hr(color=MID_BLUE, thickness=1):
    return HRFlowable(width="100%", thickness=thickness, color=color, spaceAfter=6, spaceBefore=2)

def chapter_banner(title, color=DARK_BLUE):
    data = [[Paragraph(title, S["chapter_title"])]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), color),
        ("ROWBACKGROUNDS", (0,0), (-1,-1), [color]),
        ("LEFTPADDING",  (0,0), (-1,-1), 14),
        ("RIGHTPADDING", (0,0), (-1,-1), 14),
        ("TOPPADDING",   (0,0), (-1,-1), 10),
        ("BOTTOMPADDING",(0,0), (-1,-1), 10),
        ("ROUNDEDCORNERS", [6]),
    ]))
    return t

def key_point_box(items, title="Key Points", color=LIGHT_BLUE, title_color=DARK_BLUE):
    rows = [[Paragraph(f"<b>{title}</b>", ParagraphStyle("kh",
                fontSize=11, fontName="Helvetica-Bold",
                textColor=title_color))]]
    for item in items:
        rows.append([Paragraph(f"β€’ {item}", S["key_box"])])
    t = Table(rows, colWidths=[16.5*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (0,0), color),
        ("BACKGROUND", (0,1), (-1,-1), HexColor("#EAF3FB")),
        ("LEFTPADDING",  (0,0), (-1,-1), 10),
        ("RIGHTPADDING", (0,0), (-1,-1), 10),
        ("TOPPADDING",   (0,0), (-1,-1), 5),
        ("BOTTOMPADDING",(0,0), (-1,-1), 5),
        ("BOX", (0,0), (-1,-1), 1, MID_BLUE),
        ("INNERGRID", (0,0), (-1,-1), 0.25, HexColor("#BBDEFB")),
    ]))
    return t

def simple_table(headers, rows, col_widths=None):
    if col_widths is None:
        n = len(headers)
        col_widths = [16.5*cm / n] * n
    header_row = [Paragraph(h, S["table_header"]) for h in headers]
    data = [header_row]
    for row in rows:
        data.append([Paragraph(str(c), S["table_cell"]) for c in row])
    t = Table(data, colWidths=col_widths)
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,0), DARK_BLUE),
        ("ROWBACKGROUNDS",(0,1), (-1,-1), [white, LIGHT_GREY]),
        ("GRID",          (0,0), (-1,-1), 0.5, HexColor("#BBBBBB")),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
        ("RIGHTPADDING",  (0,0), (-1,-1), 6),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ]))
    return t


# ══════════════════════════════════════════════════════════════════════════════
# CONTENT SECTIONS
# ══════════════════════════════════════════════════════════════════════════════

def cover_page():
    elems = []
    # Big banner
    data = [[
        Paragraph("BNYS 1st Year", S["subtitle"]),
    ],[
        Paragraph("Human Physiology", S["title"]),
    ],[
        Paragraph("Comprehensive Study Notes", S["subtitle"]),
    ]]
    t = Table(data, colWidths=[17*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
        ("LEFTPADDING",  (0,0), (-1,-1), 20),
        ("RIGHTPADDING", (0,0), (-1,-1), 20),
        ("TOPPADDING",   (0,0), (0,0),   30),
        ("BOTTOMPADDING",(0,-1), (-1,-1), 30),
        ("TOPPADDING",   (0,1), (-1,1),   5),
        ("BOTTOMPADDING",(0,1), (-1,1),   5),
    ]))
    elems.append(t)
    elems.append(Spacer(1, 1*cm))

    info_data = [
        ["University", "The Tamil Nadu Dr. M.G.R. Medical University"],
        ["Program",    "Bachelor of Naturopathy & Yogic Sciences (BNYS)"],
        ["Year",       "1st Year"],
        ["Subject",    "Human Physiology I & II"],
        ["Reference",  "Ganong's / Guyton & Hall / Costanzo Physiology"],
        ["Prepared",   "July 2026"],
    ]
    t2 = Table(info_data, colWidths=[4.5*cm, 12*cm])
    t2.setStyle(TableStyle([
        ("ROWBACKGROUNDS", (0,0), (-1,-1), [LIGHT_BLUE, white]),
        ("FONTNAME",  (0,0), (0,-1), "Helvetica-Bold"),
        ("FONTNAME",  (1,0), (1,-1), "Helvetica"),
        ("FONTSIZE",  (0,0), (-1,-1), 10),
        ("LEFTPADDING",  (0,0), (-1,-1), 8),
        ("TOPPADDING",   (0,0), (-1,-1), 5),
        ("BOTTOMPADDING",(0,0), (-1,-1), 5),
        ("BOX",  (0,0), (-1,-1), 1, MID_BLUE),
        ("INNERGRID", (0,0), (-1,-1), 0.3, HexColor("#BBBBBB")),
    ]))
    elems.append(t2)
    elems.append(Spacer(1, 0.8*cm))

    chapters = [
        "1. Cell Physiology", "2. Blood & Hematology",
        "3. Cardiovascular System", "4. Respiratory System",
        "5. Digestive System", "6. Nervous System",
        "7. Endocrine System", "8. Renal Physiology",
        "9. Muscle Physiology", "10. Reproductive Physiology",
    ]
    elems.append(Paragraph("Contents at a Glance", S["toc_title"]))
    for ch in chapters:
        elems.append(Paragraph(ch, S["toc_entry"]))
    elems.append(PageBreak())
    return elems


def chapter_1():
    """Cell Physiology"""
    elems = []
    elems.append(chapter_banner("Chapter 1: Cell Physiology"))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("1.1 Cell Structure", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "The cell is the fundamental structural and functional unit of all living organisms. "
        "Human cells are <b>eukaryotic</b> - they possess a membrane-bound nucleus and specialised organelles.",
        S["body"]))

    organelles = [
        ["Organelle", "Structure", "Function"],
        ["Nucleus", "Double membrane, contains DNA", "Controls cell activities; stores genetic info"],
        ["Mitochondria", "Double membrane, cristae", "ATP production (cellular respiration)"],
        ["Endoplasmic Reticulum (RER)", "Ribosomes on surface", "Protein synthesis & modification"],
        ["Endoplasmic Reticulum (SER)", "Smooth, no ribosomes", "Lipid synthesis; detoxification"],
        ["Golgi Apparatus", "Flattened membrane sacs", "Protein packaging & secretion"],
        ["Lysosomes", "Membrane-bound vesicles", "Intracellular digestion (hydrolytic enzymes)"],
        ["Ribosomes", "rRNA + protein", "Site of protein synthesis"],
        ["Cytoskeleton", "Microfilaments, microtubules", "Cell shape, movement, organelle transport"],
    ]
    elems.append(simple_table(organelles[0], organelles[1:], [4*cm, 5.5*cm, 7*cm]))
    elems.append(Spacer(1, 0.3*cm))

    elems.append(Paragraph("1.2 Cell Membrane", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "The <b>Fluid Mosaic Model</b> (Singer & Nicolson, 1972) describes the plasma membrane as a "
        "phospholipid bilayer with embedded proteins that can move laterally.",
        S["body"]))
    elems.append(Paragraph("<b>Components:</b>", S["subsection_head"]))
    for item in [
        "Phospholipids - hydrophilic head (faces water) + hydrophobic tail (faces inward)",
        "Cholesterol - stabilises membrane fluidity; prevents crystallisation at low temperatures",
        "Integral proteins - span the bilayer; include ion channels, transporters, receptors",
        "Peripheral proteins - attached to inner/outer surface; include enzymes and structural proteins",
        "Glycoproteins & Glycolipids - cell recognition, immune function",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("1.3 Membrane Transport", S["section_head"]))
    elems.append(hr())
    transport = [
        ["Type", "Energy", "Carrier?", "Direction", "Example"],
        ["Simple Diffusion", "None", "No", "High β†’ Low", "Oβ‚‚, COβ‚‚, lipids"],
        ["Facilitated Diffusion", "None", "Yes", "High β†’ Low", "Glucose (GLUT), ions"],
        ["Active Transport (Primary)", "ATP", "Yes", "Low β†’ High", "Na⁺/K⁺ ATPase"],
        ["Active Transport (Secondary)", "Gradient", "Yes", "Coupled", "Na⁺/Glucose cotransport"],
        ["Osmosis", "None", "No", "Hβ‚‚O moves", "Red cell in hypotonic"],
        ["Endocytosis", "ATP", "Vesicle", "Into cell", "Phagocytosis"],
        ["Exocytosis", "ATP", "Vesicle", "Out of cell", "Neurotransmitter release"],
    ]
    elems.append(simple_table(transport[0], transport[1:], [3.5*cm, 2.5*cm, 2*cm, 3*cm, 5.5*cm]))

    elems.append(Spacer(1, 0.3*cm))
    elems.append(key_point_box([
        "Na⁺/K⁺ ATPase pumps 3 Na⁺ out and 2 K⁺ in per ATP hydrolysed - maintains RMP",
        "Osmolarity of plasma = ~285-295 mOsm/kg",
        "Isotonic = 0.9% NaCl (normal saline) or 5% dextrose",
        "Oncotic pressure (colloid osmotic) is mainly due to albumin (~25 mmHg)",
    ], "Key Points - Cell Membrane"))

    elems.append(Paragraph("1.4 Resting Membrane Potential (RMP)", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "RMP is the electrical potential difference across the plasma membrane of a cell at rest. "
        "It is <b>-70 mV</b> in neurons (inside negative relative to outside).",
        S["body"]))
    for item in [
        "Maintained by Na⁺/K⁺ ATPase and differential permeability",
        "K⁺ is the main determinant of RMP (high intracellular K⁺ leaks out)",
        "Na⁺ is high outside, low inside",
        "Cl⁻ is high outside, low inside",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("1.5 Action Potential", S["section_head"]))
    elems.append(hr())
    phases = [
        ["Phase", "Membrane Potential", "Ion Movement", "Channel State"],
        ["Resting", "-70 mV", "K⁺ leaks out slightly", "K⁺ leak channels open"],
        ["Depolarisation", "-70 β†’ +30 mV", "Na⁺ rushes IN", "Voltage-gated Na⁺ opens"],
        ["Repolarisation", "+30 β†’ -70 mV", "K⁺ rushes OUT", "K⁺ opens, Na⁺ closes"],
        ["Hyperpolarisation", "< -70 mV", "Excess K⁺ exits", "K⁺ slow to close"],
        ["Recovery (Refractory)", "Returns to -70 mV", "Pump restores gradient", "Na⁺/K⁺ ATPase active"],
    ]
    elems.append(simple_table(phases[0], phases[1:], [3.5*cm, 3.5*cm, 5*cm, 5*cm]))
    elems.append(Paragraph(
        "<i>Note: All-or-none law - once threshold (-55 mV) is reached, full AP fires regardless of stimulus strength.</i>",
        S["note"]))
    elems.append(PageBreak())
    return elems


def chapter_2():
    """Blood & Hematology"""
    elems = []
    elems.append(chapter_banner("Chapter 2: Blood & Hematology", TEAL))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("2.1 Composition of Blood", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "Blood is a connective tissue consisting of <b>plasma (55%)</b> and <b>formed elements (45%)</b>. "
        "Total blood volume in adults = <b>5-6 litres</b> (70 mL/kg body weight).",
        S["body"]))

    comp = [
        ["Component", "% of Blood", "Normal Value", "Function"],
        ["Plasma", "55%", "β€”", "Transport medium, homeostasis"],
        ["Red Blood Cells (RBC)", "44%", "M: 5.0-5.5 million/Β΅L; F: 4.5-5.0 million/Β΅L", "Oβ‚‚ and COβ‚‚ transport"],
        ["White Blood Cells (WBC)", "<1%", "4,000-11,000/Β΅L", "Immunity, defence"],
        ["Platelets", "<1%", "1,50,000-4,00,000/Β΅L", "Haemostasis, clotting"],
    ]
    elems.append(simple_table(comp[0], comp[1:], [3.5*cm, 2.5*cm, 5.5*cm, 6*cm]))

    elems.append(Paragraph("2.2 Plasma", S["section_head"]))
    elems.append(hr())
    for item in [
        "Water: 90-92% of plasma",
        "Proteins: 7-8% - Albumin (60%), Globulins (35%), Fibrinogen (4%), others",
        "Albumin - maintains oncotic pressure, transports hormones/drugs/bilirubin",
        "Globulins - alpha/beta (transport), gamma (antibodies/immunoglobulins)",
        "Fibrinogen - clotting; converted to fibrin by thrombin",
        "Inorganic salts: Na⁺, K⁺, Ca²⁺, HCO₃⁻, Cl⁻",
        "Glucose: 70-100 mg/dL (fasting)",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("2.3 Red Blood Cells (Erythrocytes)", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph("<b>Normal Values:</b>", S["subsection_head"]))
    rbc_vals = [
        ["Parameter", "Male", "Female"],
        ["RBC count", "5.0-5.5 million/Β΅L", "4.5-5.0 million/Β΅L"],
        ["Haemoglobin (Hb)", "13-17 g/dL", "12-15 g/dL"],
        ["Haematocrit (PCV)", "40-50%", "36-46%"],
        ["MCV", "80-100 fL", "80-100 fL"],
        ["MCH", "27-32 pg", "27-32 pg"],
        ["MCHC", "32-36 g/dL", "32-36 g/dL"],
        ["Reticulocytes", "0.5-1.5%", "0.5-1.5%"],
    ]
    elems.append(simple_table(rbc_vals[0], rbc_vals[1:], [5*cm, 5.5*cm, 6*cm]))

    elems.append(Paragraph("<b>Life cycle of RBC:</b>", S["subsection_head"]))
    for item in [
        "Site of production: Red bone marrow (adults) - process = Erythropoiesis",
        "Stimulus: Erythropoietin (EPO) from kidney in response to hypoxia",
        "RBC has no nucleus, no mitochondria - cannot divide or do oxidative phosphorylation",
        "Lifespan: 120 days",
        "Destruction: Spleen (graveyard of RBCs), liver - by macrophages",
        "Hb breakdown β†’ Haem β†’ Biliverdin β†’ Bilirubin β†’ conjugated in liver β†’ bile",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("2.4 Haemoglobin", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "Haemoglobin (Hb) is a protein made of <b>4 polypeptide chains</b> each carrying a <b>haem</b> group. "
        "Each haem contains one Fe²⁺ ion that binds one Oβ‚‚ molecule β†’ each Hb carries 4 Oβ‚‚.",
        S["body"]))
    for item in [
        "HbA (adult): 2Ξ± + 2Ξ² chains - 97% of adult Hb",
        "HbAβ‚‚: 2Ξ± + 2Ξ΄ chains - 2.5% of adult Hb",
        "HbF (fetal): 2Ξ± + 2Ξ³ chains - higher Oβ‚‚ affinity than HbA",
        "Oβ‚‚ carrying capacity of blood = 1.34 mL Oβ‚‚ per gram of Hb",
        "Oxyhaemoglobin (HbOβ‚‚) = bright red; Deoxyhaemoglobin = dark red",
        "Carbaminohaemoglobin = COβ‚‚ carried on Hb (23% of COβ‚‚ transport)",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("2.5 White Blood Cells (Leukocytes)", S["section_head"]))
    elems.append(hr())
    wbc = [
        ["WBC Type", "% of WBC", "Function"],
        ["Neutrophils", "60-70%", "Phagocytosis (first responders to bacterial infection)"],
        ["Eosinophils", "2-4%", "Allergic reactions; parasite defence"],
        ["Basophils", "0-1%", "Release histamine and heparin; allergic response"],
        ["Monocytes", "2-8%", "Become macrophages; phagocytosis, antigen presentation"],
        ["Lymphocytes", "20-30%", "B cells (antibody production); T cells (cell-mediated immunity)"],
    ]
    elems.append(simple_table(wbc[0], wbc[1:], [4*cm, 3*cm, 9.5*cm]))
    elems.append(Paragraph(
        "<i>Mnemonic: Never Let Monkeys Eat Bananas = Neutrophils, Lymphocytes, Monocytes, Eosinophils, Basophils (most to least common)</i>",
        S["note"]))

    elems.append(Paragraph("2.6 Blood Groups", S["section_head"]))
    elems.append(hr())
    bg = [
        ["Blood Group", "Antigen on RBC", "Antibody in Plasma", "Can Donate To", "Can Receive From"],
        ["A", "A", "Anti-B", "A, AB", "A, O"],
        ["B", "B", "Anti-A", "B, AB", "B, O"],
        ["AB", "A and B", "None", "AB only", "A, B, AB, O (Universal Recipient)"],
        ["O", "None", "Anti-A & Anti-B", "A, B, AB, O (Universal Donor)", "O only"],
    ]
    elems.append(simple_table(bg[0], bg[1:], [2.5*cm, 3*cm, 3.5*cm, 4*cm, 4.5*cm]))
    elems.append(Paragraph(
        "<b>Rh System:</b> Rh positive = has D antigen. Rh negative = no D antigen. "
        "Significance: Erythroblastosis fetalis when Rh-ve mother carries Rh+ve fetus in 2nd+ pregnancy.",
        S["body"]))

    elems.append(Paragraph("2.7 Haemostasis & Coagulation", S["section_head"]))
    elems.append(hr())
    for item in [
        "Haemostasis = stoppage of bleeding - involves 3 steps:",
        "  1. Vascular spasm - immediate vasoconstriction at injury site",
        "  2. Platelet plug formation - platelet adhesion (vWF) β†’ activation β†’ aggregation",
        "  3. Coagulation cascade - fibrin mesh formation",
        "Extrinsic pathway - triggered by tissue factor (TF/Factor III) - faster (seconds)",
        "Intrinsic pathway - triggered by contact with damaged vessel (Factor XII) - slower",
        "Both converge at Factor X β†’ Prothrombin β†’ Thrombin β†’ Fibrinogen β†’ Fibrin",
        "Vitamin K required for Factors II, VII, IX, X (mnemonic: 1972)",
        "Anticoagulants: Heparin (activates antithrombin III); Warfarin (inhibits Vit K)",
        "PT (Prothrombin Time): tests extrinsic pathway; normal 11-13 sec",
        "aPTT: tests intrinsic pathway; normal 25-35 sec",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(PageBreak())
    return elems


def chapter_3():
    """Cardiovascular System"""
    elems = []
    elems.append(chapter_banner("Chapter 3: Cardiovascular System", HexColor("#B71C1C")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("3.1 Heart - Structure & Function", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "The heart is a hollow, muscular organ located in the mediastinum. "
        "It has 4 chambers: 2 atria (receiving) and 2 ventricles (pumping). "
        "Weight: ~250-300g in adults.",
        S["body"]))
    for item in [
        "Right side: receives deoxygenated blood β†’ pumps to lungs (pulmonary circulation)",
        "Left side: receives oxygenated blood from lungs β†’ pumps to body (systemic circulation)",
        "Valves: Tricuspid (RA→RV), Pulmonary (RV→PA), Mitral/Bicuspid (LA→LV), Aortic (LV→Ao)",
        "Cardiac muscle = involuntary, striated, branched, connected by intercalated discs",
        "Intercalated discs contain gap junctions β†’ electrical coupling β†’ functional syncytium",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("3.2 Cardiac Cycle", S["section_head"]))
    elems.append(hr())
    cycle = [
        ["Phase", "Duration", "Pressure/Volume Change", "Valves"],
        ["Isovolumetric Contraction", "0.05 sec", "LV pressure rises rapidly; volume constant", "All closed"],
        ["Rapid Ejection", "0.09 sec", "Blood ejected; LV pressure peaks (~120 mmHg)", "Aortic open"],
        ["Reduced Ejection", "0.13 sec", "Continued ejection at slowing rate", "Aortic open"],
        ["Isovolumetric Relaxation", "0.08 sec", "LV pressure falls; volume constant", "All closed"],
        ["Rapid Filling", "0.11 sec", "LV fills rapidly; volume rises fast", "Mitral open"],
        ["Reduced Filling (Diastasis)", "0.19 sec", "Slow filling; low pressure gradient", "Mitral open"],
        ["Atrial Systole", "0.11 sec", "Atrial contraction adds 20% more volume", "Mitral open"],
    ]
    elems.append(simple_table(cycle[0], cycle[1:], [4*cm, 2.5*cm, 5.5*cm, 5*cm]))
    elems.append(Paragraph(
        "<i>Total cardiac cycle duration = 0.8 sec at HR 75 bpm. Systole = 0.3 sec; Diastole = 0.5 sec.</i>",
        S["note"]))

    elems.append(Paragraph("3.3 Cardiac Output (CO)", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "<b>CO = Stroke Volume (SV) Γ— Heart Rate (HR)</b><br/>"
        "Normal CO = 70 mL Γ— 75 bpm = 5,250 mL/min β‰ˆ 5 L/min",
        S["body"]))
    for item in [
        "Stroke Volume = End-Diastolic Volume (EDV) - End-Systolic Volume (ESV)",
        "EDV (preload) β‰ˆ 120-130 mL; ESV β‰ˆ 50-60 mL; SV β‰ˆ 70 mL",
        "Ejection Fraction (EF) = SV/EDV Γ— 100 = normal 55-70%",
        "Frank-Starling Law: ↑ preload β†’ ↑ stretch of myocardium β†’ ↑ force of contraction",
        "Afterload: resistance ventricle must overcome to eject blood (= aortic pressure for LV)",
        "Contractility (Inotropy): intrinsic ability of cardiac muscle to develop force",
        "Cardiac Index = CO / Body Surface Area = 2.5-4.0 L/min/mΒ²",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("3.4 Blood Pressure (BP)", S["section_head"]))
    elems.append(hr())
    bp_data = [
        ["Category", "Systolic (mmHg)", "Diastolic (mmHg)"],
        ["Normal", "< 120", "< 80"],
        ["Elevated", "120-129", "< 80"],
        ["Hypertension Stage 1", "130-139", "80-89"],
        ["Hypertension Stage 2", "β‰₯ 140", "β‰₯ 90"],
        ["Hypotension", "< 90", "< 60"],
    ]
    elems.append(simple_table(bp_data[0], bp_data[1:], [5*cm, 5*cm, 5*cm]))
    for item in [
        "Pulse Pressure = Systolic - Diastolic = 120 - 80 = 40 mmHg",
        "Mean Arterial Pressure (MAP) = Diastolic + 1/3 Pulse Pressure = 80 + 13 = 93 mmHg",
        "MAP = CO Γ— Total Peripheral Resistance (TPR)",
        "Korotkoff sounds: Phase I (systolic BP) β†’ Phase V (diastolic BP)",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("3.5 ECG (Electrocardiogram)", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "ECG records the electrical activity of the heart from the body surface.",
        S["body"]))
    ecg = [
        ["Wave/Interval", "Represents", "Normal Duration/Value"],
        ["P wave", "Atrial depolarisation (SA node β†’ AV node)", "< 0.12 sec; < 0.25 mV"],
        ["PR interval", "AV conduction time", "0.12 - 0.20 sec"],
        ["QRS complex", "Ventricular depolarisation", "< 0.12 sec"],
        ["ST segment", "Plateau of ventricular AP", "Isoelectric (flat)"],
        ["T wave", "Ventricular repolarisation", "Upright in most leads"],
        ["QT interval", "Total ventricular systole", "< 0.44 sec (corrected)"],
    ]
    elems.append(simple_table(ecg[0], ecg[1:], [3.5*cm, 7*cm, 6*cm]))

    elems.append(Paragraph("3.6 Cardiac Conduction System", S["section_head"]))
    elems.append(hr())
    for item in [
        "SA Node (Sinoatrial) β†’ pace maker of the heart β†’ 60-100 impulses/min",
        "AV Node (Atrioventricular) β†’ delays impulse by 0.1 sec (allows atrial filling)",
        "Bundle of His β†’ transmits to ventricles",
        "Right & Left Bundle Branches β†’ divide for each ventricle",
        "Purkinje Fibres β†’ rapid distribution to ventricular myocardium",
        "Intrinsic rate: SA node 60-100; AV node 40-60; Purkinje 20-40 bpm",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))
    elems.append(PageBreak())
    return elems


def chapter_4():
    """Respiratory System"""
    elems = []
    elems.append(chapter_banner("Chapter 4: Respiratory System", HexColor("#1B5E20")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("4.1 Anatomy Overview", S["section_head"]))
    elems.append(hr())
    for item in [
        "Upper airways: nose, nasopharynx, oropharynx, larynx",
        "Lower airways: trachea β†’ primary bronchi β†’ secondary bronchi β†’ tertiary β†’ bronchioles β†’ respiratory bronchioles β†’ alveolar ducts β†’ alveoli",
        "Alveoli: ~300-500 million; total surface area ~70-80 mΒ²",
        "Type I pneumocytes: gas exchange (thin, flat - 95% of surface)",
        "Type II pneumocytes: produce surfactant, repair epithelium",
        "Surfactant: dipalmitoyl phosphatidylcholine (DPPC); reduces surface tension, prevents alveolar collapse",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("4.2 Lung Volumes & Capacities", S["section_head"]))
    elems.append(hr())
    lung_vol = [
        ["Parameter", "Definition", "Normal Value"],
        ["Tidal Volume (TV)", "Air moved per normal breath", "500 mL"],
        ["Inspiratory Reserve Vol (IRV)", "Extra air inspired forcibly", "3,000 mL"],
        ["Expiratory Reserve Vol (ERV)", "Extra air expired forcibly", "1,100 mL"],
        ["Residual Volume (RV)", "Air remaining after max expiration", "1,200 mL"],
        ["Inspiratory Capacity (IC)", "TV + IRV", "3,500 mL"],
        ["Functional Residual Capacity (FRC)", "ERV + RV", "2,300 mL"],
        ["Vital Capacity (VC)", "TV + IRV + ERV", "4,600 mL"],
        ["Total Lung Capacity (TLC)", "VC + RV", "5,800 mL"],
        ["FEV₁", "Forced expiration in 1st second", ">80% of FVC"],
    ]
    elems.append(simple_table(lung_vol[0], lung_vol[1:], [4.5*cm, 6*cm, 6*cm]))

    elems.append(Paragraph("4.3 Mechanics of Breathing", S["section_head"]))
    elems.append(hr())
    for item in [
        "Inspiration = active process; diaphragm contracts (descends 1.5 cm)",
        "External intercostals contract β†’ ribs elevate β†’ thoracic volume ↑",
        "Intrathoracic pressure falls below atmospheric β†’ air flows IN",
        "Expiration = passive at rest (elastic recoil of lungs)",
        "Forced expiration uses internal intercostals, abdominal muscles",
        "Compliance = change in volume per unit change in pressure (normal ~200 mL/cmHβ‚‚O)",
        "Airway resistance: mainly in medium bronchi; increases in asthma (bronchoconstriction)",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("4.4 Gas Exchange & Transport", S["section_head"]))
    elems.append(hr())
    gas_transport = [
        ["Gas", "Transport in Blood", "% of Total"],
        ["Oβ‚‚ dissolved in plasma", "Henry's law", "1.5%"],
        ["Oβ‚‚ bound to haemoglobin", "HbOβ‚‚", "98.5%"],
        ["COβ‚‚ as bicarbonate (HCO₃⁻)", "Chloride shift (Band 3 protein)", "70%"],
        ["COβ‚‚ as carbaminohaemoglobin", "Bound to Hb (globin chains)", "23%"],
        ["COβ‚‚ dissolved in plasma", "Henry's law", "7%"],
    ]
    elems.append(simple_table(gas_transport[0], gas_transport[1:], [5*cm, 6.5*cm, 5*cm]))
    elems.append(Paragraph(
        "<b>Chloride Shift (Hamburger Shift):</b> COβ‚‚ β†’ Hβ‚‚CO₃ (carbonic anhydrase) β†’ H⁺ + HCO₃⁻. "
        "HCO₃⁻ exits RBC β†’ Cl⁻ enters to maintain electrical neutrality.",
        S["body"]))

    elems.append(Paragraph("4.5 Regulation of Respiration", S["section_head"]))
    elems.append(hr())
    for item in [
        "Respiratory centres in brainstem: Dorsal (DRG) and Ventral (VRG) respiratory groups in medulla",
        "Pneumotaxic centre (upper pons): limits inspiration, controls rate",
        "Apneustic centre (lower pons): prolongs inspiration",
        "Central chemoreceptors (medulla): respond to H⁺ (from COβ‚‚); most powerful stimulus to breathe",
        "Peripheral chemoreceptors (carotid & aortic bodies): respond to ↓PaOβ‚‚, ↑PaCOβ‚‚, ↓pH",
        "Normal PaOβ‚‚ = 95-100 mmHg; PaCOβ‚‚ = 35-45 mmHg",
        "Hering-Breuer reflex: stretch receptors in lungs β†’ inhibit further inspiration (prevent over-inflation)",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))
    elems.append(PageBreak())
    return elems


def chapter_5():
    """Digestive System"""
    elems = []
    elems.append(chapter_banner("Chapter 5: Digestive System", HexColor("#4A148C")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("5.1 Overview of GI Tract", S["section_head"]))
    elems.append(hr())
    for item in [
        "Mouth β†’ Oesophagus β†’ Stomach β†’ Small intestine (duodenum, jejunum, ileum) β†’ Large intestine β†’ Rectum β†’ Anus",
        "Accessory organs: Salivary glands, Pancreas, Liver, Gallbladder",
        "4 layers of GI wall: Mucosa, Submucosa, Muscularis externa, Serosa",
        "Enteric Nervous System (ENS): Meissner's plexus (submucosa) & Auerbach's plexus (myenteric) - the 'gut brain'",
        "Motility: Peristalsis (propulsion) and Segmentation (mixing)",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("5.2 Gastric Secretion", S["section_head"]))
    elems.append(hr())
    gastric = [
        ["Cell Type", "Location", "Secretion", "Function"],
        ["Chief cells", "Fundus/body", "Pepsinogen", "Converted to pepsin by HCl; digests protein"],
        ["Parietal cells", "Fundus/body", "HCl & Intrinsic factor", "Kills bacteria; activates pepsin; IF for B12 absorption"],
        ["G cells", "Antrum/pylorus", "Gastrin", "Stimulates parietal cells to secrete HCl"],
        ["Mucous neck cells", "Throughout", "Mucus", "Protects stomach wall"],
        ["Enterochromaffin-like (ECL) cells", "Fundus", "Histamine", "Stimulates acid secretion"],
    ]
    elems.append(simple_table(gastric[0], gastric[1:], [4*cm, 3*cm, 3.5*cm, 6.5*cm]))

    elems.append(Paragraph("5.3 Intestinal Digestion & Absorption", S["section_head"]))
    elems.append(hr())
    absorb = [
        ["Nutrient", "Site of Absorption", "Mechanism"],
        ["Glucose/Fructose", "Duodenum/Jejunum", "Na⁺-glucose cotransport (SGLT1); GLUT5 for fructose"],
        ["Amino acids", "Jejunum", "Na⁺-dependent cotransport"],
        ["Fatty acids/Glycerol", "Jejunum", "Diffusion; form chylomicrons β†’ lymphatics"],
        ["Fat-soluble vit (A,D,E,K)", "Jejunum/Ileum", "Bile-dependent absorption"],
        ["Vitamin B12", "Terminal Ileum", "Requires Intrinsic Factor (IF)"],
        ["Iron (Fe²⁺)", "Duodenum", "DMT1 transporter; enhanced by Vit C"],
        ["Calcium", "Duodenum", "Active transport; enhanced by Vit D & PTH"],
        ["Water", "Small & Large intestine", "Osmosis - follows solute absorption"],
    ]
    elems.append(simple_table(absorb[0], absorb[1:], [4*cm, 4*cm, 8.5*cm]))

    elems.append(Paragraph("5.4 Liver Functions", S["section_head"]))
    elems.append(hr())
    for item in [
        "Metabolism: carbohydrate (glycogenesis, glycogenolysis, gluconeogenesis), protein (transamination, deamination, urea cycle), fat (fatty acid oxidation, ketogenesis, lipoprotein synthesis)",
        "Bile production: 600-1000 mL/day; bile salts emulsify fats",
        "Detoxification: cytochrome P450 enzymes; first-pass metabolism of drugs",
        "Synthesis: albumin, clotting factors (fibrinogen, prothrombin), complement proteins",
        "Storage: glycogen (glucose), Vit A, D, B12, iron (as ferritin)",
        "Bilirubin metabolism: unconjugated (indirect) β†’ conjugated (direct) β†’ bile β†’ gut β†’ urobilinogen",
        "Kupffer cells: resident macrophages in liver sinusoids",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))
    elems.append(PageBreak())
    return elems


def chapter_6():
    """Nervous System"""
    elems = []
    elems.append(chapter_banner("Chapter 6: Nervous System", HexColor("#1A237E")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("6.1 Organisation", S["section_head"]))
    elems.append(hr())
    for item in [
        "Central Nervous System (CNS): Brain + Spinal cord",
        "Peripheral Nervous System (PNS): Somatic (voluntary) + Autonomic (involuntary)",
        "Autonomic NS: Sympathetic ('fight or flight') vs Parasympathetic ('rest and digest')",
        "Neurons: Sensory (afferent) β†’ CNS β†’ Motor (efferent) β†’ effector",
        "Neuroglia: Astrocytes, Oligodendrocytes, Microglia, Ependymal cells (CNS); Schwann cells, Satellite cells (PNS)",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("6.2 Synaptic Transmission", S["section_head"]))
    elems.append(hr())
    for item in [
        "AP arrives at presynaptic terminal β†’ Ca²⁺ enters through voltage-gated channels",
        "Ca²⁺ triggers exocytosis of neurotransmitter-containing vesicles",
        "Neurotransmitter diffuses across synaptic cleft (20-40 nm)",
        "Binds postsynaptic receptors β†’ opens ion channels β†’ EPSP or IPSP",
        "EPSP (excitatory): depolarisation (Na⁺ in) β†’ may trigger AP if threshold reached",
        "IPSP (inhibitory): hyperpolarisation (K⁺ out or Cl⁻ in) β†’ reduces firing",
        "Spatial & temporal summation determine whether AP fires",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("6.3 Key Neurotransmitters", S["section_head"]))
    elems.append(hr())
    nt = [
        ["Neurotransmitter", "Type", "Location/Function"],
        ["Acetylcholine (ACh)", "Excitatory/Inhibitory", "NMJ, autonomic ganglia, parasympathetic effectors; CNS memory"],
        ["Dopamine", "Mostly inhibitory", "Substantia nigra (movement); reward pathway; decreased in Parkinson's"],
        ["Serotonin (5-HT)", "Mostly inhibitory", "Mood, sleep, appetite; decreased in depression"],
        ["Noradrenaline (NE)", "Excitatory", "Sympathetic NS; arousal, attention"],
        ["GABA", "Inhibitory", "Main inhibitory NT in brain; target of benzodiazepines"],
        ["Glutamate", "Excitatory", "Main excitatory NT in CNS; learning (NMDA receptors)"],
        ["Endorphins/Enkephalins", "Inhibitory", "Pain modulation; natural opioids"],
    ]
    elems.append(simple_table(nt[0], nt[1:], [4*cm, 3*cm, 9.5*cm]))

    elems.append(Paragraph("6.4 Autonomic Nervous System (ANS)", S["section_head"]))
    elems.append(hr())
    ans = [
        ["Feature", "Sympathetic", "Parasympathetic"],
        ["Origin", "Thoraco-lumbar (T1-L2)", "Cranio-sacral (CN III,VII,IX,X; S2-4)"],
        ["Preganglionic NT", "Acetylcholine", "Acetylcholine"],
        ["Postganglionic NT", "Noradrenaline (NE)", "Acetylcholine"],
        ["Heart rate", "Increases (↑HR)", "Decreases (↓HR)"],
        ["Pupils", "Dilates (mydriasis)", "Constricts (miosis)"],
        ["Bronchi", "Dilates", "Constricts"],
        ["GI motility", "Decreases", "Increases"],
        ["Bladder", "Relaxes (urinary retention)", "Contracts (micturition)"],
        ["Sweating", "Increases (cholinergic)", "No effect"],
        ["Adrenal medulla", "Releases adrenaline/NE", "No innervation"],
    ]
    elems.append(simple_table(ans[0], ans[1:], [4.5*cm, 6*cm, 6*cm]))
    elems.append(PageBreak())
    return elems


def chapter_7():
    """Endocrine System"""
    elems = []
    elems.append(chapter_banner("Chapter 7: Endocrine System", HexColor("#E65100")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("7.1 Key Hormones Overview", S["section_head"]))
    elems.append(hr())
    hormones = [
        ["Gland", "Hormone", "Target", "Action"],
        ["Anterior Pituitary", "GH (Growth Hormone)", "Liver, all cells", "Growth; protein anabolism; ↑ IGF-1"],
        ["Anterior Pituitary", "TSH", "Thyroid", "Stimulates T3/T4 synthesis"],
        ["Anterior Pituitary", "ACTH", "Adrenal cortex", "Stimulates cortisol, androgens"],
        ["Anterior Pituitary", "FSH/LH", "Gonads", "Gametogenesis & sex hormone production"],
        ["Posterior Pituitary", "ADH (Vasopressin)", "Kidney collecting duct", "Water reabsorption (↑ aquaporin 2)"],
        ["Posterior Pituitary", "Oxytocin", "Uterus, breast", "Labour contractions; milk ejection"],
        ["Thyroid", "T3/T4 (thyroxine)", "All cells", "↑ BMR, protein synthesis, growth, CNS maturation"],
        ["Thyroid", "Calcitonin", "Bone, kidney", "↓ blood calcium"],
        ["Parathyroid", "PTH", "Bone, kidney, GI", "↑ blood calcium (osteoclasts, Ca reabsorption, Vit D activation)"],
        ["Adrenal cortex", "Cortisol", "Widespread", "Stress hormone; ↑ glucose; anti-inflammatory"],
        ["Adrenal cortex", "Aldosterone", "Kidney DCT", "Na⁺ retention, K⁺ excretion β†’ ↑ BP"],
        ["Adrenal medulla", "Adrenaline (Epinephrine)", "Widespread", "Fight/flight; ↑HR, ↑BP, ↑glucose"],
        ["Pancreas - Ξ² cells", "Insulin", "Liver, muscle, fat", "↓ blood glucose; anabolic"],
        ["Pancreas - Ξ± cells", "Glucagon", "Liver", "↑ blood glucose; catabolic"],
    ]
    elems.append(simple_table(hormones[0], hormones[1:], [4*cm, 4*cm, 3.5*cm, 5*cm]))

    elems.append(Paragraph("7.2 Glucose Regulation", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "Blood glucose is maintained between <b>70-100 mg/dL</b> (fasting) through a tight hormonal balance.",
        S["body"]))
    for item in [
        "After a meal: ↑ blood glucose β†’ Ξ² cells release insulin β†’ glucose enters cells β†’ glycogenesis β†’ glucose ↓ to normal",
        "Fasting/exercise: ↓ blood glucose β†’ Ξ± cells release glucagon β†’ glycogenolysis + gluconeogenesis in liver β†’ glucose ↑",
        "Counter-regulatory hormones (against insulin): glucagon, adrenaline, cortisol, GH",
        "Type 1 DM: absolute insulin deficiency (autoimmune destruction of Ξ² cells)",
        "Type 2 DM: insulin resistance + relative insulin deficiency",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))
    elems.append(PageBreak())
    return elems


def chapter_8():
    """Renal Physiology"""
    elems = []
    elems.append(chapter_banner("Chapter 8: Renal Physiology", HexColor("#006064")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("8.1 Kidney Structure & Function", S["section_head"]))
    elems.append(hr())
    for item in [
        "2 kidneys, each ~150g; located retroperitoneally at T12-L3",
        "Functional unit = Nephron (~1 million per kidney)",
        "Nephron parts: Glomerulus β†’ Bowman's capsule β†’ PCT β†’ Loop of Henle β†’ DCT β†’ Collecting duct",
        "Functions: Filtration, Reabsorption, Secretion, Excretion",
        "Also: regulate blood pressure, acid-base balance, erythropoietin production, Vit D activation",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("8.2 GFR & Renal Clearance", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "GFR = Glomerular Filtration Rate = volume filtered by all glomeruli per minute. "
        "Normal GFR = <b>125 mL/min</b> (180 L/day filtered; ~1.5 L/day urine produced).",
        S["body"]))
    for item in [
        "GFR measured by inulin clearance (gold standard) or estimated by creatinine clearance",
        "Filtration fraction = GFR / Renal Plasma Flow = 125/625 = ~20%",
        "Starling forces across glomerular membrane determine GFR",
        "Autoregulation: myogenic mechanism + tubuloglomerular feedback maintain GFR despite BP changes",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("8.3 Tubular Reabsorption Summary", S["section_head"]))
    elems.append(hr())
    tubular = [
        ["Segment", "What is Reabsorbed", "Key Mechanism"],
        ["PCT", "65% of Na⁺, Cl⁻, K⁺, HCO₃⁻, glucose, amino acids, water", "Na⁺/K⁺ ATPase; cotransporters"],
        ["Loop of Henle (descending)", "Water (25%)", "Impermeable to solutes"],
        ["Loop of Henle (ascending)", "Na⁺, Cl⁻, K⁺ (25%) - NO water", "NKCC2 cotransporter (target of furosemide)"],
        ["DCT", "Na⁺, Cl⁻ (5%)", "NCC cotransporter (target of thiazides)"],
        ["Collecting Duct", "Na⁺ (3%); Hβ‚‚O (ADH-dependent)", "ENaC (aldosterone); Aquaporin 2 (ADH)"],
    ]
    elems.append(simple_table(tubular[0], tubular[1:], [4*cm, 7*cm, 5.5*cm]))
    elems.append(PageBreak())
    return elems


def chapter_9():
    """Muscle Physiology"""
    elems = []
    elems.append(chapter_banner("Chapter 9: Muscle Physiology", HexColor("#37474F")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("9.1 Types of Muscle", S["section_head"]))
    elems.append(hr())
    muscle_types = [
        ["Property", "Skeletal", "Cardiac", "Smooth"],
        ["Shape", "Long, cylindrical", "Branched", "Spindle-shaped"],
        ["Nuclei", "Multinucleate (periphery)", "1-2 (central)", "Single (central)"],
        ["Striations", "Yes", "Yes", "No"],
        ["Control", "Voluntary", "Involuntary (autorhythmic)", "Involuntary"],
        ["Speed", "Fast", "Moderate", "Slow"],
        ["Fatigue", "Yes (fast twitch)", "No (sustained)", "Slow fatigue"],
    ]
    elems.append(simple_table(muscle_types[0], muscle_types[1:], [3.5*cm, 4.5*cm, 4.5*cm, 4*cm]))

    elems.append(Paragraph("9.2 Sliding Filament Theory", S["section_head"]))
    elems.append(hr())
    elems.append(Paragraph(
        "Muscle contraction occurs by <b>thick filaments (myosin)</b> pulling <b>thin filaments (actin)</b> toward the "
        "centre of the sarcomere - the filaments themselves do not shorten.",
        S["body"]))
    for item in [
        "Sarcomere: functional unit of striated muscle - Z line to Z line",
        "At rest: tropomyosin blocks actin-myosin binding sites",
        "AP arrives β†’ T-tubule β†’ SR releases Ca²⁺",
        "Ca²⁺ binds troponin C β†’ tropomyosin moves β†’ actin binding sites exposed",
        "Myosin head binds actin β†’ power stroke (ADP+Pi released) β†’ filaments slide",
        "ATP binds myosin β†’ head detaches β†’ ATP hydrolysis re-cocks the head",
        "Relaxation: Ca²⁺ pumped back into SR (by SERCA) β†’ troponin-tropomyosin covers actin again",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(key_point_box([
        "Cross-bridge cycle: Attach β†’ Power stroke β†’ Detach β†’ Re-cock",
        "Rigor mortis: ATP depleted after death β†’ myosin heads permanently attached to actin",
        "Motor unit: one motor neuron + all muscle fibres it innervates",
        "Neuromuscular junction (NMJ): ACh released β†’ binds nicotinic receptors β†’ EPP β†’ AP β†’ contraction",
    ], "Key Points - Muscle Contraction"))
    elems.append(PageBreak())
    return elems


def chapter_10():
    """Reproductive Physiology"""
    elems = []
    elems.append(chapter_banner("Chapter 10: Reproductive Physiology", HexColor("#880E4F")))
    elems.append(Spacer(1, 0.4*cm))

    elems.append(Paragraph("10.1 Male Reproductive Physiology", S["section_head"]))
    elems.append(hr())
    for item in [
        "Testes: primary gonad; produce testosterone (Leydig cells) and spermatozoa (seminiferous tubules)",
        "Spermatogenesis: begins at puberty; takes ~74 days; regulated by FSH (Sertoli cells) and LH (Leydig cells)",
        "Testosterone: promotes spermatogenesis, secondary sex characteristics, anabolic effects",
        "Sertoli cells: provide nourishment to developing spermatids; form blood-testis barrier; secrete inhibin (inhibits FSH)",
        "Sperm: Head (acrosome - contains enzymes for penetrating ovum), Midpiece (mitochondria for energy), Tail (flagellum for motility)",
        "Normal sperm count: β‰₯ 15 million/mL; motility β‰₯ 40%; morphology β‰₯ 4%",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    elems.append(Paragraph("10.2 Female Reproductive Physiology", S["section_head"]))
    elems.append(hr())
    for item in [
        "Ovaries: produce oocytes and hormones (oestrogen, progesterone)",
        "Menstrual cycle: average 28 days",
        "Phase 1 (Days 1-5): Menstruation - shedding of endometrium",
        "Phase 2 (Days 1-13): Follicular/Proliferative - FSH stimulates follicle growth β†’ ↑ oestrogen",
        "Ovulation (Day 14): LH surge β†’ release of secondary oocyte",
        "Phase 3 (Days 15-28): Luteal/Secretory - corpus luteum β†’ progesterone + oestrogen",
        "If no fertilisation: corpus luteum degenerates β†’ hormones fall β†’ menstruation",
        "Oestrogen: proliferates endometrium, develops female secondary sex characteristics",
        "Progesterone: prepares endometrium for implantation, maintains pregnancy",
    ]:
        elems.append(Paragraph(f"β€’ {item}", S["bullet"]))

    menstrual = [
        ["Day", "Phase", "Dominant Hormone", "Endometrium", "FSH/LH"],
        ["1-5", "Menstruation", "None (low)", "Shed", "FSH rising"],
        ["6-13", "Proliferative", "Oestrogen", "Thickens (proliferates)", "FSH high β†’ LH surge"],
        ["14", "Ovulation", "LH surge", "Maximal thickness", "LH peak"],
        ["15-28", "Secretory", "Progesterone", "Secretory glands develop", "Both low"],
    ]
    elems.append(simple_table(menstrual[0], menstrual[1:], [2*cm, 3*cm, 4*cm, 5*cm, 4.5*cm]))
    elems.append(PageBreak())
    return elems


def quick_reference():
    """Quick reference page with normal values"""
    elems = []
    elems.append(chapter_banner("Quick Reference: Normal Physiological Values", DARK_GREY))
    elems.append(Spacer(1, 0.3*cm))

    values = [
        ["Parameter", "Normal Range", "Unit"],
        ["Heart Rate", "60 - 100", "bpm"],
        ["Blood Pressure (Systolic/Diastolic)", "120 / 80", "mmHg"],
        ["Respiratory Rate", "12 - 20", "breaths/min"],
        ["Temperature (oral)", "36.5 - 37.5", "Β°C"],
        ["SpOβ‚‚", "95 - 100", "%"],
        ["Haemoglobin (Male/Female)", "13-17 / 12-15", "g/dL"],
        ["WBC count", "4,000 - 11,000", "/Β΅L"],
        ["Platelet count", "1,50,000 - 4,00,000", "/Β΅L"],
        ["Fasting blood glucose", "70 - 100", "mg/dL"],
        ["Serum Na⁺", "136 - 145", "mEq/L"],
        ["Serum K⁺", "3.5 - 5.0", "mEq/L"],
        ["Serum Ca²⁺ (total)", "8.5 - 10.5", "mg/dL"],
        ["Serum Cl⁻", "98 - 107", "mEq/L"],
        ["pH (arterial blood)", "7.35 - 7.45", "β€”"],
        ["PaOβ‚‚", "80 - 100", "mmHg"],
        ["PaCOβ‚‚", "35 - 45", "mmHg"],
        ["Serum creatinine", "0.6 - 1.2", "mg/dL"],
        ["BUN (Blood Urea Nitrogen)", "7 - 20", "mg/dL"],
        ["GFR", "> 90 (CKD < 60)", "mL/min/1.73mΒ²"],
        ["Total serum protein", "6.0 - 8.3", "g/dL"],
        ["Albumin", "3.5 - 5.0", "g/dL"],
        ["Total bilirubin", "0.2 - 1.2", "mg/dL"],
        ["Tidal Volume", "500", "mL"],
        ["Vital Capacity (approx)", "4,600", "mL"],
        ["Cardiac Output", "4 - 8", "L/min"],
        ["Stroke Volume", "60 - 100", "mL"],
        ["Ejection Fraction", "55 - 70", "%"],
    ]
    elems.append(simple_table(values[0], values[1:], [8*cm, 5.5*cm, 3*cm]))
    return elems


# ══════════════════════════════════════════════════════════════════════════════
# BUILD PDF
# ══════════════════════════════════════════════════════════════════════════════

def build_pdf():
    doc = SimpleDocTemplate(
        OUTPUT,
        pagesize=A4,
        leftMargin=2*cm, rightMargin=2*cm,
        topMargin=2.2*cm, bottomMargin=2*cm,
        title="BNYS 1st Year Physiology Study Notes",
        author="Orris AI | MGR University",
        subject="Human Physiology",
    )

    story = []
    story += cover_page()
    story += chapter_1()
    story += chapter_2()
    story += chapter_3()
    story += chapter_4()
    story += chapter_5()
    story += chapter_6()
    story += chapter_7()
    story += chapter_8()
    story += chapter_9()
    story += chapter_10()
    story += quick_reference()

    doc.build(story)
    print(f"PDF generated: {OUTPUT}")

if __name__ == "__main__":
    build_pdf()
Running Command

cd /home/daytona/workspace/bnys-physiology && python3 generate_notes.py 2>&1

Running Command

ls -lh /home/daytona/workspace/bnys-physiology/BNYS_Physiology_Notes.pdf

Your BNYS 1st Year Physiology study notes PDF is ready! Download it here:

BNYS Physiology Notes

PDF Document Β· PDF


Here's what's included in your notes (aligned to MGR University BNYS 1st Year syllabus):
ChapterTopic
1Cell Physiology - cell structure, membrane transport, action potential
2Blood & Hematology - RBC/WBC values, Hb, blood groups, coagulation
3Cardiovascular System - cardiac cycle, CO, BP, ECG, conduction
4Respiratory System - lung volumes, gas exchange, breathing regulation
5Digestive System - GI secretions, absorption, liver functions
6Nervous System - synaptic transmission, neurotransmitters, ANS
7Endocrine System - all major hormones, glucose regulation
8Renal Physiology - GFR, nephron, tubular reabsorption
9Muscle Physiology - sliding filament theory, NMJ
10Reproductive Physiology - menstrual cycle, spermatogenesis
+Quick Reference: all normal values in one table
Format features: Colour-coded chapter banners, comparison tables, mnemonics, and key-point boxes throughout.
Let me know if you want notes for any other subject (Anatomy, Biochemistry, Yoga, Naturopathy Principles) or want me to expand any specific chapter!

Babinski Sign Benefits of Pain Sensation Audiometry Dichromatism Infertility Oligozoospermia Osteoporosis Functions of Rods and Cones Optic Chiasma Composition of Semen Give answer 2m according to physiology by K. sembulingam

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
I have excellent content from the library. Now I have all the information needed to write precise 2-mark answers in K. Sembulingam's style. Let me compose all 10 answers:

2-Mark Answers - Human Physiology (K. Sembulingam Style)

BNYS 1st Year | MGR University

1. Babinski Sign

Definition: Babinski sign is an abnormal plantar reflex seen in upper motor neuron (UMN) lesions.
Elicitation: When the lateral aspect of the sole of the foot is scratched with a blunt object from heel to toe:
  • Normal (negative): Plantar flexion of all toes (toes curl downward)
  • Positive Babinski sign: Dorsiflexion of the great toe + fanning (abduction) of the other toes
Significance:
  • Indicates UMN lesion (corticospinal tract damage) - e.g., stroke, spinal cord injury
  • Normally seen in infants up to 18 months (corticospinal tracts not yet myelinated)
  • Associated with spasticity, hyperreflexia, and hypertonia
- Ganong's Review of Medical Physiology, 26th Ed.

2. Benefits of Pain Sensation

Pain is a protective and warning mechanism of the body. Its benefits include:
  1. Warning signal - Alerts the body to actual or potential tissue damage
  2. Protective withdrawal - Triggers withdrawal reflex (e.g., pulling hand away from fire) to prevent further injury
  3. Immobilisation - Pain around an injured area promotes rest, facilitating healing
  4. Diagnosis - Helps localise disease or injury (e.g., appendicitis β†’ right iliac fossa pain)
  5. Motivates treatment-seeking - Encourages the individual to seek medical help
  6. Limits activity - Prevents further use of an injured part (e.g., fracture pain limits weight-bearing)
Note: Congenital insensitivity to pain (CIPA) is dangerous - patients suffer repeated unnoticed injuries, joint destruction, and shortened lifespan.

3. Audiometry

Definition: Audiometry is the measurement of hearing acuity - the ability to hear sounds of different frequencies and intensities.
Types:
TypePrincipleMeasures
Pure tone audiometryAir & bone conduction tested with audiometerThreshold at each frequency (250-8000 Hz)
Speech audiometryUses spoken wordsSpeech discrimination/understanding
Impedance audiometryTympanometryMiddle ear function, stapedial reflexes
Brainstem Evoked Response (BERA)Electrical potentialsObjective, used in infants/unconscious
Audiogram: A graph of hearing threshold (dB) vs. frequency (Hz).
  • Normal hearing: 0-25 dB loss
  • Mild loss: 26-40 dB | Moderate: 41-70 dB | Severe: 71-90 dB | Profound: >90 dB
Clinical use: Differentiates conductive vs. sensorineural hearing loss using air-bone gap.

4. Dichromatism

Definition: Dichromatism (Dichromacy) is a type of colour vision deficiency in which only two of the three types of cone photoreceptors function normally (one cone type is absent or non-functional).
Types:
TypeMissing ConeCannot Distinguish
ProtanopiaRed cones (L-cones)Red-green confusion
DeuteranopiaGreen cones (M-cones)Red-green confusion
TritanopiaBlue cones (S-cones)Blue-yellow confusion
Basis: Normal colour vision (trichromacy) requires all 3 cones - Red (L), Green (M), Blue (S).
Inheritance: Protanopia and deuteranopia are X-linked recessive; more common in males (~8% of males, 0.5% of females).
Compare: Monochromacy = only 1 cone type; Anomalous trichromacy = all 3 present but one abnormal.

5. Infertility

Definition: Infertility is the inability of a couple to achieve conception after 12 months of regular unprotected sexual intercourse.
Male causes:
  • Oligozoospermia (low sperm count <15 million/mL)
  • Azoospermia (no sperm)
  • Asthenozoospermia (poor motility)
  • Teratozoospermia (abnormal morphology)
  • Hormonal: ↓FSH, ↓LH, ↓testosterone
  • Obstruction: vas deferens block, varicocele
Female causes:
  • Anovulation (PCOS, thyroid disorders)
  • Tubal block (PID, endometriosis)
  • Uterine abnormalities
  • Hormonal imbalance (FSH, LH, progesterone)
Investigations: Semen analysis, hormonal assay (FSH, LH, testosterone, prolactin), HSG, ultrasound.

6. Oligozoospermia

Definition: Oligozoospermia is a condition where the sperm count in semen is below 15 million/mL (WHO 2010 criteria) or below 20 million/mL (older criteria).
Normal sperm count: 15-200 million/mL
Classification:
  • Mild: 10-15 million/mL
  • Moderate: 5-10 million/mL
  • Severe: <5 million/mL
  • Cryptozoospermia: <1 million/mL
Causes:
  • Hormonal: ↓GnRH, ↓FSH, ↓LH β†’ ↓testosterone β†’ reduced spermatogenesis
  • Varicocele (commonest cause ~40%)
  • Infections: mumps orchitis, STIs
  • Heat exposure (undescended testes/cryptorchidism)
  • Drugs: anabolic steroids, chemotherapy, sulfasalazine
  • Systemic illness, radiation
  • Idiopathic
Significance: Men with counts <20 million/mL are essentially sterile; associated with male infertility.
- Ganong's Review of Medical Physiology, 26th Ed.

7. Osteoporosis

Definition: Osteoporosis is a metabolic bone disease characterised by decreased bone mass and microarchitectural deterioration of bone tissue, leading to increased bone fragility and fracture risk.
Normal bone density (T-score): 0 to -1.0
  • Osteopenia: T-score -1.0 to -2.5
  • Osteoporosis: T-score ≀ -2.5
Causes:
  • Postmenopausal (Type I): ↓estrogen β†’ ↑osteoclast activity β†’ ↑bone resorption
  • Senile (Type II): ↓Ca absorption, ↓Vit D, ↓bone formation
  • Secondary: Cushing's syndrome (↑cortisol), hyperthyroidism, hypogonadism, prolonged corticosteroid use, immobilisation
Pathophysiology: Imbalance between bone resorption (osteoclasts) > bone formation (osteoblasts).
Complications: Vertebral compression fractures, hip fractures (Colles' fracture), kyphosis ("dowager's hump").
Diagnosis: DEXA scan (dual-energy X-ray absorptiometry).

8. Functions of Rods and Cones

The retina contains ~120 million rods and ~6 million cones.
FeatureRodsCones
Light thresholdLow (sensitive)High (less sensitive)
Vision typeScotopic (dim/night vision)Photopic (bright/day vision)
Colour visionNo (monochromatic)Yes (trichromatic)
Visual acuityLowHigh
LocationPeripheral retinaConcentrated in fovea/macula
PhotopigmentRhodopsin (visual purple)3 iodopsins (R/G/B)
Dark adaptationSlow (30 min)Fast (7 min)
Functions of Rods:
  • Night vision and low-light detection
  • Peripheral vision and motion detection
  • Cannot distinguish colour
Functions of Cones:
  • Daylight and colour vision
  • Fine visual acuity (reading, detail)
  • Three types: L (red ~560nm), M (green ~530nm), S (blue ~430nm)
- Costanzo Physiology 7th Ed.; Ganong's 26th Ed.

9. Optic Chiasma

Definition: The optic chiasma is an X-shaped structure at the base of the brain (above the pituitary gland, at the junction of diencephalon) where partial decussation (crossing) of optic nerve fibres occurs.
Arrangement of fibres:
Fibre OriginBehaviour at ChiasmaDestination
Nasal retina (temporal visual field)Crosses to opposite sideContralateral optic tract
Temporal retina (nasal visual field)Does NOT cross (stays ipsilateral)Ipsilateral optic tract
Visual pathway: Retina β†’ Optic nerve β†’ Optic chiasma β†’ Optic tract β†’ Lateral Geniculate Nucleus (LGN) of thalamus β†’ Optic radiation β†’ Primary visual cortex (Area 17, occipital lobe)
Clinical significance - Lesions:
  • Optic nerve lesion β†’ Monocular blindness (same eye)
  • At chiasma (e.g., pituitary tumour) β†’ Bitemporal hemianopia (tunnel vision - loss of both temporal fields)
  • Optic tract lesion β†’ Homonymous hemianopia (loss of same half-field in both eyes)
- Costanzo Physiology 7th Ed., p. 91

10. Composition of Semen

Definition: Semen is the fluid ejaculated during orgasm, containing spermatozoa and secretions of accessory sex glands.
Volume: 2.5-3.5 mL per ejaculate (after several days abstinence)
Contributions by gland:
GlandContribution (%)Key Components
Seminal vesicles60%Fructose (energy for sperm), prostaglandins, phosphorylcholine, ascorbic acid, flavins
Prostate gland20%Citric acid, zinc, acid phosphatase, fibrinolysin, cholesterol, phospholipids
Bulbourethral (Cowper's) glands~5%Mucus, alkaline secretion (lubricant)
Epididymis/testes~15%Spermatozoa, fluid
Physical characteristics:
  • Colour: White, opalescent
  • pH: 7.35-7.50 (slightly alkaline - protects sperm from vaginal acidity)
  • Specific gravity: 1.028
  • Sperm count: ~100 million/mL (normal β‰₯15 million/mL)
  • Morphologically abnormal forms: <20%
Key point: Fructose from seminal vesicles is the main energy source for sperm motility. Zinc from prostate stabilises sperm DNA.
- Ganong's Review of Medical Physiology, 26th Ed., Table 23-1

Study Tip: All 10 of these topics frequently appear as 2-mark questions in MGR University BNYS exams. Learn the definitions precisely, then add 2-3 key points each. Would you like me to convert these into a downloadable PDF for printing?
This is a shared conversation. Sign in to Orris to start your own chat.