Hello I am the medical student you can help me
I am BNYS students under MGR University
Create study notes or a summary document for your courses
Which year of BNYS are you in? Β· Which subject(s) do you want notes for? Β· What format do you prefer?
Which Physiology topic(s) do you want covered?
BNYS 1st year Physiology syllabus MGR University topics
mkdir -p /home/daytona/workspace/bnys-physiology && ls /home/daytona/workspace/bnys-physiology
~/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()
cd /home/daytona/workspace/bnys-physiology && python3 generate_notes.py 2>&1
ls -lh /home/daytona/workspace/bnys-physiology/BNYS_Physiology_Notes.pdf
BNYS Physiology Notes
PDF Document Β· PDF
| Chapter | Topic |
|---|---|
| 1 | Cell Physiology - cell structure, membrane transport, action potential |
| 2 | Blood & Hematology - RBC/WBC values, Hb, blood groups, coagulation |
| 3 | Cardiovascular System - cardiac cycle, CO, BP, ECG, conduction |
| 4 | Respiratory System - lung volumes, gas exchange, breathing regulation |
| 5 | Digestive System - GI secretions, absorption, liver functions |
| 6 | Nervous System - synaptic transmission, neurotransmitters, ANS |
| 7 | Endocrine System - all major hormones, glucose regulation |
| 8 | Renal Physiology - GFR, nephron, tubular reabsorption |
| 9 | Muscle Physiology - sliding filament theory, NMJ |
| 10 | Reproductive Physiology - menstrual cycle, spermatogenesis |
| + | Quick Reference: all normal values in one table |
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
- Ganong's Review of Medical Physiology, 26th Ed.
| Type | Principle | Measures |
|---|---|---|
| Pure tone audiometry | Air & bone conduction tested with audiometer | Threshold at each frequency (250-8000 Hz) |
| Speech audiometry | Uses spoken words | Speech discrimination/understanding |
| Impedance audiometry | Tympanometry | Middle ear function, stapedial reflexes |
| Brainstem Evoked Response (BERA) | Electrical potentials | Objective, used in infants/unconscious |
| Type | Missing Cone | Cannot Distinguish |
|---|---|---|
| Protanopia | Red cones (L-cones) | Red-green confusion |
| Deuteranopia | Green cones (M-cones) | Red-green confusion |
| Tritanopia | Blue cones (S-cones) | Blue-yellow confusion |
- Ganong's Review of Medical Physiology, 26th Ed.
| Feature | Rods | Cones |
|---|---|---|
| Light threshold | Low (sensitive) | High (less sensitive) |
| Vision type | Scotopic (dim/night vision) | Photopic (bright/day vision) |
| Colour vision | No (monochromatic) | Yes (trichromatic) |
| Visual acuity | Low | High |
| Location | Peripheral retina | Concentrated in fovea/macula |
| Photopigment | Rhodopsin (visual purple) | 3 iodopsins (R/G/B) |
| Dark adaptation | Slow (30 min) | Fast (7 min) |
- Costanzo Physiology 7th Ed.; Ganong's 26th Ed.
| Fibre Origin | Behaviour at Chiasma | Destination |
|---|---|---|
| Nasal retina (temporal visual field) | Crosses to opposite side | Contralateral optic tract |
| Temporal retina (nasal visual field) | Does NOT cross (stays ipsilateral) | Ipsilateral optic tract |
- Costanzo Physiology 7th Ed., p. 91
| Gland | Contribution (%) | Key Components |
|---|---|---|
| Seminal vesicles | 60% | Fructose (energy for sperm), prostaglandins, phosphorylcholine, ascorbic acid, flavins |
| Prostate gland | 20% | Citric acid, zinc, acid phosphatase, fibrinolysin, cholesterol, phospholipids |
| Bulbourethral (Cowper's) glands | ~5% | Mucus, alkaline secretion (lubricant) |
| Epididymis/testes | ~15% | Spermatozoa, fluid |
- Ganong's Review of Medical Physiology, 26th Ed., Table 23-1