Propagation of nerve impulse & Physiology of muscle contraction (MPT Level answer )
In skeletal muscle fibers, the resting membrane potential is slightly more negative: -80 to -90 mV.

| Phase | Membrane Potential | Ion Movement | Channel Event |
|---|---|---|---|
| Resting | -70 mV | None | Na⁺ activation gate closed; inactivation gate open |
| Threshold | ~-55 mV | Na⁺ starts entering | Voltage-gated Na⁺ channels begin opening |
| Depolarization | -70 → +35 mV | Rapid Na⁺ influx | Mass opening of voltage-gated Na⁺ channels (500-5000x increase in Na⁺ permeability) |
| Overshoot | +35 mV peak | Na⁺ influx exceeds K⁺ efflux | Peak of Na⁺ conductance |
| Repolarization | +35 → -70 mV | K⁺ efflux | Na⁺ channels inactivate; voltage-gated K⁺ channels open |
| Hyperpolarization (undershoot) | Below -70 mV | Excess K⁺ efflux | K⁺ channels remain open briefly beyond resting potential |
| Return to resting | -70 mV | K⁺ channels close | Na⁺-K⁺ pump restores gradients |

"Any event that causes enough initial rise in the membrane potential from -70 mV toward zero causes many voltage-gated sodium channels to begin opening. This allows rapid inflow of sodium ions, which causes a further rise in the membrane potential, opening still more channels - a positive-feedback cycle." - Guyton & Hall

| Period | Duration | Mechanism | Significance |
|---|---|---|---|
| Absolute Refractory Period (ARP) | ~1 ms (duration of AP) | Na⁺ channel inactivation gates closed; cannot be reopened | No new AP possible regardless of stimulus strength |
| Relative Refractory Period (RRP) | Several ms after ARP | K⁺ channels still partially open (hyperpolarized state) | A stronger-than-normal stimulus can fire a new AP |
| Fiber Type | Myelin | Diameter | Velocity | Function |
|---|---|---|---|---|
| Aα | Yes | 13-20 μm | 70-120 m/s | Proprioception, somatic motor |
| Aβ | Yes | 6-12 μm | 30-70 m/s | Touch, pressure |
| Aγ | Yes | 3-6 μm | 15-30 m/s | Motor to muscle spindles |
| Aδ | Yes | 1-5 μm | 5-30 m/s | Pain (sharp), temperature (cold) |
| B | Yes | <3 μm | 3-15 m/s | Preganglionic autonomic |
| C | No | 0.2-1.5 μm | 0.5-2 m/s | Pain (dull/burning), temperature (warm) |
Muscle → Muscle Fascicle → Muscle Fiber (cell) → Myofibril → Sarcomere → Thick (myosin) & Thin (actin) Filaments
| Band/Zone | Composition | Appearance |
|---|---|---|
| A band | Myosin + overlapping actin | Dark (anisotropic) |
| I band | Actin only | Light (isotropic) |
| H zone | Myosin only (middle of A band, no actin overlap) | Lighter zone within A band |
| M line | Protein scaffold anchoring myosin | Center of H zone |
| Z disk | Protein anchoring actin filaments from adjacent sarcomeres | Dark line marking sarcomere boundaries |



| Step | Event | Energy |
|---|---|---|
| 1. Rigor (initial) | Myosin head tightly bound to actin; no ATP (A·M^f state) | - |
| 2. ATP binding | ATP binds to myosin head → actin-myosin bond weakens and detaches (M·ATP) | ATP binds |
| 3. ATP hydrolysis | Myosin ATPase hydrolyzes ATP → ADP + Pi remain bound; myosin head cocks (rotates ~90° to high-energy position) | ATP hydrolyzed |
| 4. Weak attachment | Myosin-ADP-Pi weakly binds a new actin site further along the filament | - |
| 5. Ca²⁺-regulated strong attachment | Ca²⁺ has exposed active sites on actin; weak attachment becomes strong (A·M·ADP·Pi) | - |
| 6. Power stroke | Pi is released → myosin head rotates ~45° → pulls actin filament ~10 nm toward center of sarcomere (force-generating stroke) | Pi released |
| 7. ADP release | ADP released → myosin head returns to force state (A·M^f·ADP → A·M^f) | ADP released |
| 8. Rigor / Repeat | Head tightly bound again (rigor state) until new ATP binds | Cycle repeats |
Each cross-bridge cycle moves the actin filament ~10 nanometers and uses 1 ATP molecule. Multiple cycles per second allow sustained, graded contraction.
| Source | Duration at maximal effort | Mechanism |
|---|---|---|
| ATP (stored) | ~1-2 seconds | Direct hydrolysis by myosin ATPase |
| Phosphocreatine (PCr) | ~5-8 seconds total (with ATP) | Creatine kinase: PCr + ADP → Cr + ATP |
| Glycolysis (anaerobic) | Up to ~1 minute | Glycogen → pyruvate/lactate → ATP (2.5x faster than oxidative but limited) |
| Oxidative metabolism | Hours | Aerobic metabolism of carbohydrates, fats, proteins → >95% of energy for sustained contraction |
| Type | Description | Example |
|---|---|---|
| Isometric | Muscle develops tension but does not shorten (length constant) | Pushing against a wall |
| Isotonic | Muscle shortens against constant load | Lifting a fixed weight |
| Eccentric | Muscle lengthens while contracting (absorbs force) | Lowering a weight slowly |
| Twitch | Single contraction-relaxation in response to single AP | Lab stimulation |
| Tetanus (incomplete) | Summation of twitches at moderate frequency; partial relaxation between each | Moderate stimulation |
| Tetanus (complete/fused) | No relaxation between twitches; sustained maximal force | High-frequency stimulation |
| Feature | Myelinated Nerve Fiber | Skeletal Muscle Fiber |
|---|---|---|
| Resting potential | -70 mV | -80 to -90 mV |
| Duration of AP | ~0.5-1 ms | 1-5 ms |
| Conduction velocity | 70-120 m/sec (Aα) | 3-5 m/sec |
| Propagation | Saltatory | Continuous + T-tubule spread |
Stimulus → Depolarization to threshold (-55 mV)
↓
Voltage-gated Na⁺ channels OPEN → Na⁺ influx → Action Potential (+35 mV overshoot)
↓
Local currents depolarize adjacent membrane
↓
Propagation along nerve (saltatory in myelinated fibers)
↓
AP reaches NMJ → ACh release → End-plate potential → Muscle AP
↓
Muscle AP propagates along sarcolemma → enters T-tubules
↓
DHP receptor → Ryanodine receptor activation → Ca²⁺ released from SR
↓
Ca²⁺ binds Troponin C → Tropomyosin shifts → Active sites on actin EXPOSED
↓
Myosin heads bind actin → ATP hydrolysis → Power stroke → Actin slides over myosin
↓
Sarcomere shortens → MUSCLE CONTRACTS
↓
SERCA pumps Ca²⁺ back → Troponin C releases Ca²⁺ → Tropomyosin covers sites
↓
Cross-bridges detach → MUSCLE RELAXES
explain me in simple language
Think of it like a gun trigger — you have to pull hard enough. A light touch does nothing. But once you pull past a certain point — BANG — it fires completely. This is the All-or-Nothing Principle.

It's like lighting a fuse — once you light one end, the fire travels all the way to the other end automatically.

Analogy: Instead of walking every single step, you're jumping from stepping stone to stepping stone across a river — much faster!
| Type of Nerve | Speed |
|---|---|
| Unmyelinated (no insulation) | 0.5 - 2 m/sec |
| Myelinated (with insulation) | 70 - 120 m/sec |
Think of it as the nerve ringing a doorbell (releasing ACh) → the muscle answers the door (fires its own action potential).

Imagine pulling a lever that opens a floodgate — calcium water pours out everywhere around the muscle fibers.
Calcium is literally the key that unlocks the muscle.

Think of it like a tug-of-war team — hundreds of people (myosin heads) all pulling on the rope (actin) at slightly different times → the rope moves steadily.

Your brain decides to move
↓
Nerve impulse travels down motor nerve
(saltatory conduction — jumps between nodes — very fast!)
↓
Reaches NMJ → ACh released → crosses gap
↓
Muscle fires its own action potential
↓
Signal dives into T-tubules
↓
Ca²⁺ released from Sarcoplasmic Reticulum
↓
Ca²⁺ binds Troponin C → Tropomyosin moves out of way
↓
Myosin heads attach to actin
↓
Power stroke (ATP energy used) → actin slides over myosin
↓
Sarcomeres shorten → MUSCLE CONTRACTS 💪
↓
Nerve stops firing → Ca²⁺ pumped back → muscle RELAXES
Create a visual infographic showing the action potential phases & Make a summary pdf with cross bridge cycle steps
Medical physiology educational infographic showing Action Potential Phases. Clean, professional style with dark navy blue background. Show a large action potential waveform graph in the center with millivolts on Y-axis (-70 to +35 mV) and time (milliseconds 0-5) on X-axis. The curve is drawn in bright red/coral. Label and annotate each phase with color-coded numbered callout boxes: Phase 1 - Resting Stage (-70 mV, green box), Phase 2 - Threshold (-55 mV, yellow dashed line with label), Phase 3 - Depolarization (rising curve, orange box, "Na+ rushes IN"), Phase 4 - Overshoot Peak (+35 mV, red box), Phase 5 - Repolarization (falling curve, purple box, "K+ rushes OUT"), Phase 6 - Hyperpolarization/Undershoot (below -70mV, blue box), Phase 7 - Return to Resting (green). On the right side show a small ion channel diagram for Na+ and K+ in their open/closed states. At the bottom show a small saltatory conduction diagram with myelin sheath and nodes of Ranvier with the impulse jumping between nodes. Title at top: "ACTION POTENTIAL PHASES" in bold white letters. Include a small legend box. Educational, detailed, colorful, high quality medical illustration style.
ls /home/daytona/workspace/ 2>/dev/null && echo "exists" || mkdir -p /home/daytona/workspace/physiology-notes
mkdir -p /home/daytona/workspace/physiology-notes
~/physiology-notes/make_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
import os
OUTPUT = "/home/daytona/workspace/physiology-notes/CrossBridgeCycle_Summary.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = colors.HexColor("#0D1B2A")
TEAL = colors.HexColor("#1B6CA8")
CYAN = colors.HexColor("#17B2C3")
ORANGE = colors.HexColor("#F4A261")
CORAL = colors.HexColor("#E76F51")
GREEN = colors.HexColor("#2A9D8F")
YELLOW = colors.HexColor("#E9C46A")
LIGHT_BG = colors.HexColor("#EAF4FB")
WHITE = colors.white
DARK_GREY = colors.HexColor("#2D3748")
MID_GREY = colors.HexColor("#718096")
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.8*cm,
topMargin=1.5*cm, bottomMargin=1.5*cm
)
styles = getSampleStyleSheet()
# Custom styles
def S(name, **kw):
return ParagraphStyle(name, **kw)
title_style = S("Title2", fontName="Helvetica-Bold", fontSize=22,
textColor=WHITE, alignment=TA_CENTER, spaceAfter=4)
subtitle_style = S("Sub", fontName="Helvetica", fontSize=11,
textColor=CYAN, alignment=TA_CENTER, spaceAfter=2)
section_style = S("Sec", fontName="Helvetica-Bold", fontSize=13,
textColor=WHITE, alignment=TA_LEFT, spaceAfter=4,
leftIndent=4)
body_style = S("Body2", fontName="Helvetica", fontSize=9.5,
textColor=DARK_GREY, leading=14, alignment=TA_JUSTIFY,
spaceAfter=4)
bullet_style = S("Bull", fontName="Helvetica", fontSize=9.5,
textColor=DARK_GREY, leading=14, leftIndent=14,
bulletIndent=4, spaceAfter=2)
step_title = S("StepT", fontName="Helvetica-Bold", fontSize=10,
textColor=WHITE, alignment=TA_LEFT)
step_body = S("StepB", fontName="Helvetica", fontSize=9,
textColor=DARK_GREY, leading=13, alignment=TA_LEFT)
table_header = S("TH", fontName="Helvetica-Bold", fontSize=9,
textColor=WHITE, alignment=TA_CENTER)
table_cell = S("TC", fontName="Helvetica", fontSize=8.5,
textColor=DARK_GREY, alignment=TA_LEFT, leading=12)
small_note = S("Note", fontName="Helvetica-Oblique", fontSize=8,
textColor=MID_GREY, alignment=TA_CENTER)
story = []
# ══════════════════════════════════════════════════════════════════════════════
# PAGE 1 ── Title Banner + Overview
# ══════════════════════════════════════════════════════════════════════════════
# Title block (coloured table acting as a banner)
banner_data = [[
Paragraph("PHYSIOLOGY OF MUSCLE CONTRACTION", title_style),
],[
Paragraph("Cross-Bridge Cycle & Sliding Filament Mechanism — MPT Level Summary", subtitle_style),
]]
banner = Table(banner_data, colWidths=[17*cm])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING",(0,0),(-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING",(0,0), (-1,-1), 12),
("ROUNDEDCORNERS", (0,0), (-1,-1), [8,8,8,8]),
]))
story.append(banner)
story.append(Spacer(1, 0.4*cm))
# Source note
story.append(Paragraph(
"Source: Guyton & Hall Medical Physiology 14e | Kandel Principles of Neural Science 6e | Costanzo Physiology 7e",
small_note
))
story.append(Spacer(1, 0.5*cm))
# ── Section 1: Quick Overview ─────────────────────────────────────────────
def section_banner(text, color=TEAL):
t = Table([[Paragraph(text, section_style)]], colWidths=[17*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", (0,0), (-1,-1), [4,4,4,4]),
]))
return t
story.append(section_banner("1. WHAT IS THE CROSS-BRIDGE CYCLE?", TEAL))
story.append(Spacer(1, 0.25*cm))
story.append(Paragraph(
"The cross-bridge cycle is the molecular mechanism by which muscle generates force and shortens. "
"It is the cyclical interaction between the <b>myosin head (thick filament)</b> and <b>actin (thin filament)</b>, "
"powered by ATP hydrolysis. Each cycle moves the actin filament approximately <b>10 nanometers</b> and consumes "
"<b>1 ATP molecule</b>. Hundreds of cross-bridges cycling asynchronously produce smooth, sustained contraction.",
body_style
))
story.append(Spacer(1, 0.3*cm))
# ── Section 2: Key Proteins ────────────────────────────────────────────────
story.append(section_banner("2. KEY PROTEINS INVOLVED", GREEN))
story.append(Spacer(1, 0.25*cm))
protein_data = [
[Paragraph("<b>Protein</b>", table_header),
Paragraph("<b>Location</b>", table_header),
Paragraph("<b>Function</b>", table_header)],
[Paragraph("Myosin", table_cell),
Paragraph("Thick filament", table_cell),
Paragraph("Motor protein; head contains ATPase site + actin-binding site; generates power stroke", table_cell)],
[Paragraph("Actin (F-actin)", table_cell),
Paragraph("Thin filament", table_cell),
Paragraph("Double helix of G-actin monomers; has active binding sites for myosin heads", table_cell)],
[Paragraph("Tropomyosin", table_cell),
Paragraph("Lies in groove of actin helix", table_cell),
Paragraph("Blocks myosin binding sites on actin at rest (the 'security guard')", table_cell)],
[Paragraph("Troponin C", table_cell),
Paragraph("Attached to tropomyosin", table_cell),
Paragraph("Binds Ca²⁺ (up to 4 ions); triggers tropomyosin to shift — MASTER SWITCH", table_cell)],
[Paragraph("Troponin T", table_cell),
Paragraph("Troponin complex", table_cell),
Paragraph("Anchors troponin complex to tropomyosin", table_cell)],
[Paragraph("Troponin I", table_cell),
Paragraph("Troponin complex", table_cell),
Paragraph("Inhibitory subunit; binds actin to stabilize the blocking position", table_cell)],
[Paragraph("Titin", table_cell),
Paragraph("Z-disk to M-line", table_cell),
Paragraph("Elastic filament; holds myosin in place; gives passive recoil", table_cell)],
]
protein_table = Table(protein_data, colWidths=[3.2*cm, 4*cm, 9.8*cm])
protein_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (0,1), (-1,1), LIGHT_BG),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), LIGHT_BG),
("BACKGROUND", (0,4), (-1,4), WHITE),
("BACKGROUND", (0,5), (-1,5), LIGHT_BG),
("BACKGROUND", (0,6), (-1,6), WHITE),
("BACKGROUND", (0,7), (-1,7), LIGHT_BG),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(protein_table)
story.append(Spacer(1, 0.4*cm))
# ══════════════════════════════════════════════════════════════════════════════
# PAGE 2 ── The 8 Steps of the Cross-Bridge Cycle
# ══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(section_banner("3. THE 8 STEPS OF THE CROSS-BRIDGE CYCLE", CORAL))
story.append(Spacer(1, 0.3*cm))
steps = [
("1", NAVY, "RIGOR STATE (Starting Point)",
"Myosin head is tightly bound to actin. No ATP present. This is the 'rigor' position.\n"
"→ In living muscle this state is transient; in death (no ATP) it persists as RIGOR MORTIS."),
("2", TEAL, "ATP BINDING — Detachment",
"A new ATP molecule binds to the myosin head.\n"
"→ This binding WEAKENS the actin-myosin bond → myosin head DETACHES from actin.\n"
"→ ATP is the 'detachment signal' (no ATP = permanent attachment)."),
("3", CYAN, "ATP HYDROLYSIS — Cocking / Re-energising",
"Myosin ATPase cleaves ATP → ADP + Pi (both remain bound to myosin head).\n"
"→ Energy released cocks the myosin head into HIGH-ENERGY (90°) position.\n"
"→ Like pulling back a spring — energy is stored mechanically."),
("4", GREEN, "WEAK ATTACHMENT — Myosin finds new actin site",
"The cocked myosin head (carrying ADP + Pi) attaches WEAKLY to a NEW actin site\n"
"further along the thin filament (toward the Z-disk).\n"
"→ This is a low-affinity, non-force-generating state."),
("5", YELLOW, "Ca²⁺-REGULATED STRONG ATTACHMENT",
"Calcium (released from SR) has already bound Troponin C → tropomyosin shifted →\n"
"active sites on actin are EXPOSED.\n"
"→ Weak attachment transitions to STRONG attachment (A·M·ADP·Pi).\n"
"→ This Ca²⁺ step is the KEY REGULATORY POINT of muscle contraction."),
("6", ORANGE, "POWER STROKE — Force Generation",
"Pi (inorganic phosphate) is released from myosin → triggers conformational change.\n"
"→ Myosin head PIVOTS from 90° to 45° (swings ~10 nm).\n"
"→ This pulls the actin filament toward the M-line = FORCE GENERATION.\n"
"→ This is the actual mechanical step that shortens the sarcomere."),
("7", CORAL, "ADP RELEASE — Strong rigor state",
"ADP is released from the myosin head.\n"
"→ Head returns to the FORCE (rigor-like) state (A·M^f).\n"
"→ Myosin head is still firmly attached to actin.\n"
"→ This is the rate-limiting step in isometric contraction."),
("8", colors.HexColor("#6C63FF"), "REPEAT or RIGOR",
"If ATP is available → cycle repeats from Step 2 (new ATP binds → detachment).\n"
"→ The myosin head moves to a new actin site 10 nm further along and repeats.\n"
"→ If NO ATP (death/fatigue) → head stays bound = RIGOR STATE."),
]
for num, color, title, description in steps:
step_data = [[
Paragraph(f"<b>{num}</b>",
S(f"SN{num}", fontName="Helvetica-Bold", fontSize=14,
textColor=WHITE, alignment=TA_CENTER)),
Paragraph(f"<b>{title}</b>", step_title),
],[
"",
Paragraph(description.replace("\n", "<br/>"), step_body),
]]
step_t = Table(step_data, colWidths=[1.2*cm, 15.8*cm],
rowHeights=[None, None])
step_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), color),
("BACKGROUND", (1,0), (1,0), color),
("BACKGROUND", (1,1), (1,1), colors.HexColor("#F7FAFC")),
("SPAN", (0,0), (0,-1)),
("VALIGN", (0,0), (0,-1), "MIDDLE"),
("ALIGN", (0,0), (0,-1), "CENTER"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("LINEBELOW", (0,-1), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
]))
story.append(KeepTogether(step_t))
story.append(Spacer(1, 0.2*cm))
# ══════════════════════════════════════════════════════════════════════════════
# PAGE 3 ── E-C Coupling, Sliding Filament, Relaxation & Energy
# ══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
# ── Excitation-Contraction Coupling ─────────────────────────────────────────
story.append(section_banner("4. EXCITATION-CONTRACTION (E-C) COUPLING", TEAL))
story.append(Spacer(1, 0.25*cm))
ec_steps = [
("Motor nerve AP → NMJ", "ACh released into synaptic cleft → binds nicotinic receptors on motor end-plate → EPP → Muscle AP generated"),
("AP along sarcolemma", "Muscle AP propagates along sarcolemma surface membrane (~3–5 m/sec)"),
("T-tubule conduction", "AP dives deep via T-tubules (invaginations of sarcolemma) → reaches every myofibril"),
("DHP receptor activation", "Voltage sensor (DHPR) in T-tubule wall detects depolarisation"),
("RyR channel opens", "DHPR mechanically opens Ryanodine Receptor (RyR) Ca²⁺ channels on SR terminal cisternae"),
("Ca²⁺ flood", "Ca²⁺ floods from SR into sarcoplasm: 10⁻⁷ M → 10⁻⁵ M (100-fold rise)"),
("Troponin C activation", "Ca²⁺ binds Troponin C → tropomyosin shifts → actin active sites exposed → Cross-bridge cycling begins"),
("SERCA pump (relaxation)", "When AP stops: SERCA (SR Ca²⁺-ATPase) actively pumps Ca²⁺ back into SR → [Ca²⁺] falls → Troponin C releases Ca²⁺ → tropomyosin blocks sites → relaxation"),
]
ec_data = [[Paragraph("<b>Step</b>", table_header),
Paragraph("<b>Event</b>", table_header)]]
for i, (step, event) in enumerate(ec_steps):
bg = LIGHT_BG if i % 2 == 0 else WHITE
ec_data.append([
Paragraph(f"<b>{step}</b>", S("ECS", fontName="Helvetica-Bold", fontSize=8.5, textColor=TEAL, leading=12)),
Paragraph(event, table_cell)
])
ec_table = Table(ec_data, colWidths=[4.5*cm, 12.5*cm])
ec_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
*[("BACKGROUND", (0,i+1), (-1,i+1), (LIGHT_BG if i%2==0 else WHITE)) for i in range(len(ec_steps))],
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E0")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ec_table)
story.append(Spacer(1, 0.4*cm))
# ── Sliding Filament Mechanism ───────────────────────────────────────────────
story.append(section_banner("5. SLIDING FILAMENT MECHANISM (Huxley & Hanson, 1954)", GREEN))
story.append(Spacer(1, 0.25*cm))
sf_data = [
[Paragraph("<b>Sarcomere Component</b>", table_header),
Paragraph("<b>At Rest</b>", table_header),
Paragraph("<b>During Contraction</b>", table_header),
Paragraph("<b>Reason</b>", table_header)],
[Paragraph("A band", table_cell), Paragraph("Present", table_cell),
Paragraph("UNCHANGED", table_cell), Paragraph("Myosin length constant", table_cell)],
[Paragraph("I band", table_cell), Paragraph("Wide", table_cell),
Paragraph("DECREASES / disappears", table_cell), Paragraph("Actin slides into A band", table_cell)],
[Paragraph("H zone", table_cell), Paragraph("Present", table_cell),
Paragraph("DECREASES / disappears", table_cell), Paragraph("Actin tips now overlap", table_cell)],
[Paragraph("Sarcomere length", table_cell), Paragraph("~2.5 μm", table_cell),
Paragraph("~2.0 μm (optimal)", table_cell), Paragraph("Z-disks approach each other", table_cell)],
[Paragraph("Myosin filament length", table_cell), Paragraph("Constant", table_cell),
Paragraph("UNCHANGED", table_cell), Paragraph("Filaments slide, do not shorten", table_cell)],
[Paragraph("Actin filament length", table_cell), Paragraph("Constant", table_cell),
Paragraph("UNCHANGED", table_cell), Paragraph("Filaments slide, do not shorten", table_cell)],
]
sf_table = Table(sf_data, colWidths=[4.5*cm, 3*cm, 4.5*cm, 5*cm])
sf_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (0,1), (-1,1), LIGHT_BG),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), LIGHT_BG),
("BACKGROUND", (0,4), (-1,4), WHITE),
("BACKGROUND", (0,5), (-1,5), LIGHT_BG),
("BACKGROUND", (0,6), (-1,6), WHITE),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E0")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(sf_table)
story.append(Spacer(1, 0.4*cm))
# ── Energy Sources ────────────────────────────────────────────────────────────
story.append(section_banner("6. ENERGY SOURCES FOR MUSCLE CONTRACTION", ORANGE))
story.append(Spacer(1, 0.25*cm))
energy_data = [
[Paragraph("<b>#</b>", table_header),
Paragraph("<b>Source</b>", table_header),
Paragraph("<b>Duration</b>", table_header),
Paragraph("<b>Mechanism</b>", table_header),
Paragraph("<b>Notes</b>", table_header)],
[Paragraph("1", table_cell), Paragraph("Stored ATP", table_cell),
Paragraph("1–2 sec", table_cell),
Paragraph("Direct hydrolysis by myosin ATPase", table_cell),
Paragraph("Immediate; very limited store", table_cell)],
[Paragraph("2", table_cell), Paragraph("Phosphocreatine (PCr)", table_cell),
Paragraph("5–8 sec", table_cell),
Paragraph("PCr + ADP → Cr + ATP (creatine kinase)", table_cell),
Paragraph("Instant; 5× more than ATP store", table_cell)],
[Paragraph("3", table_cell), Paragraph("Anaerobic glycolysis", table_cell),
Paragraph("Up to ~1 min", table_cell),
Paragraph("Glycogen → pyruvate/lactate → ATP", table_cell),
Paragraph("2.5× faster than oxidative; no O₂ needed; lactic acid buildup", table_cell)],
[Paragraph("4", table_cell), Paragraph("Oxidative metabolism", table_cell),
Paragraph("Hours", table_cell),
Paragraph("CHO + fat + protein + O₂ → ATP", table_cell),
Paragraph(">95% of sustained energy; slowest but highest yield", table_cell)],
]
energy_table = Table(energy_data, colWidths=[0.8*cm, 3.5*cm, 2.2*cm, 5.5*cm, 5*cm])
energy_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("BACKGROUND", (0,1), (-1,1), LIGHT_BG),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), LIGHT_BG),
("BACKGROUND", (0,4), (-1,4), WHITE),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CBD5E0")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("ALIGN", (0,0), (0,-1), "CENTER"),
]))
story.append(energy_table)
story.append(Spacer(1, 0.4*cm))
# ══════════════════════════════════════════════════════════════════════════════
# PAGE 4 ── Quick Revision Card + Flow Chart
# ══════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(section_banner("7. COMPLETE SEQUENCE — NERVE TO MUSCLE CONTRACTION", colors.HexColor("#553C9A")))
story.append(Spacer(1, 0.3*cm))
flow_steps = [
(TEAL, "NEURAL SIGNAL", "Brain sends impulse → Motor neuron fires → AP propagates along Aα fiber (70–120 m/sec, saltatory conduction)"),
(CYAN, "NMJ", "AP reaches motor terminal → Ca²⁺ enters → ACh released → crosses synaptic cleft → binds nAChR → EPP → Muscle AP"),
(GREEN, "T-TUBULE", "Muscle AP travels along sarcolemma → dives into T-tubules → depolarises DHP receptors"),
(YELLOW, "Ca²⁺ RELEASE", "DHPR opens RyR1 on SR → Ca²⁺ floods sarcoplasm (10⁻⁷ → 10⁻⁵ M) — excitation-contraction coupling"),
(ORANGE, "TROPONIN SWITCH", "Ca²⁺ + Troponin C → conformational change → tropomyosin shifts → ACTIVE SITES on actin EXPOSED"),
(CORAL, "CROSS-BRIDGE CYCLE","Myosin head (cocked, ADP+Pi) → binds actin → Power stroke (Pi release) → 10 nm movement → ADP release → new ATP binds → detach → re-cock → REPEAT"),
(colors.HexColor("#553C9A"), "SHORTENING", "Actin slides over myosin → sarcomere shortens → I-band & H-zone decrease → Z-disks approximate → MUSCLE CONTRACTS"),
(MID_GREY, "RELAXATION", "Nerve stops → ACh degraded by AChE → no more muscle APs → SERCA pumps Ca²⁺ back into SR → Troponin C releases Ca²⁺ → tropomyosin blocks sites → cross-bridges stop → MUSCLE RELAXES"),
]
for color, phase, text in flow_steps:
row = Table([[
Paragraph(f"<b>{phase}</b>", S("FP", fontName="Helvetica-Bold", fontSize=9,
textColor=WHITE, alignment=TA_CENTER)),
Paragraph(text, S("FT", fontName="Helvetica", fontSize=9,
textColor=DARK_GREY, leading=13, leftIndent=4))
]], colWidths=[3.5*cm, 13.5*cm])
row.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), color),
("BACKGROUND", (1,0), (1,0), colors.HexColor("#F7FAFC")),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING",(0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E0")),
]))
story.append(row)
# Arrow
arrow = Table([[Paragraph("▼", S("AR", fontName="Helvetica", fontSize=10,
textColor=TEAL, alignment=TA_CENTER))]], colWidths=[17*cm])
arrow.setStyle(TableStyle([("TOPPADDING",(0,0),(-1,-1),1),
("BOTTOMPADDING",(0,0),(-1,-1),1)]))
story.append(arrow)
story.append(Spacer(1, 0.4*cm))
# ── Key Clinical Points ──────────────────────────────────────────────────────
story.append(section_banner("8. KEY CLINICAL / EXAM POINTS", CORAL))
story.append(Spacer(1, 0.2*cm))
clinical = [
("<b>Rigor Mortis</b>", "ATP depleted after death → myosin heads cannot detach from actin → muscle stiffness (peaks 12–24 hrs, resolves 48–72 hrs due to protein degradation)"),
("<b>Tetanus</b>", "High-frequency stimulation → Ca²⁺ accumulates → no relaxation between twitches → sustained maximal force (fused tetanus)"),
("<b>Myasthenia Gravis</b>", "Autoantibodies against nAChR at NMJ → fewer functional receptors → EPP too small to reach threshold → muscle weakness (fatigable)"),
("<b>Malignant Hyperthermia</b>", "Mutation in RyR1 → uncontrolled Ca²⁺ release from SR → sustained cross-bridge cycling → hyperthermia, rigidity (triggered by halothane/succinylcholine)"),
("<b>Botulinum Toxin</b>", "Cleaves SNARE proteins at motor nerve terminal → blocks ACh vesicle fusion → no ACh release → flaccid paralysis"),
("<b>Hypocalcaemia</b>", "Low Ca²⁺ → Troponin C not fully activated → reduced contraction; also increases neuronal excitability (tetany of peripheral nerves)"),
("<b>Optimal sarcomere length</b>", "~2.0–2.2 μm gives maximum overlap of actin and myosin → maximum cross-bridges → maximum force (length-tension relationship)"),
]
for title, text in clinical:
clin_row = Table([[
Paragraph(title, S("CT", fontName="Helvetica-Bold", fontSize=9, textColor=CORAL)),
Paragraph(text, table_cell)
]], colWidths=[4.5*cm, 12.5*cm])
clin_row.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#FFF5F5")),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 6),
("LINEBELOW", (0,0),(-1,-1), 0.3, colors.HexColor("#FEB2B2")),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(clin_row)
story.append(Spacer(1, 0.5*cm))
# Footer
footer_data = [[
Paragraph(
"Physiology of Muscle Contraction — MPT Level Summary | Prepared with Guyton & Hall, Kandel, Costanzo | Page reference: Guyton 14e Ch.6–7",
S("F", fontName="Helvetica-Oblique", fontSize=7.5, textColor=WHITE, alignment=TA_CENTER)
)
]]
footer = Table(footer_data, colWidths=[17*cm])
footer.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
story.append(footer)
# ── Build ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
print(f"File size: {os.path.getsize(OUTPUT):,} bytes")
cd /home/daytona/workspace/physiology-notes && python make_pdf.py 2>&1

CrossBridgeCycle Summary
PDF Document · PDF
| Page | Content |
|---|---|
| 1 | Title banner + Key Proteins table (Myosin, Actin, Troponin I/T/C, Tropomyosin, Titin) |
| 2 | All 8 steps of the Cross-Bridge Cycle in detailed color-coded step blocks |
| 3 | E-C Coupling sequence table + Sliding Filament changes table + Energy sources (ATP → PCr → Glycolysis → Oxidative) |
| 4 | Complete nerve-to-muscle flow chart + Clinical exam points (Rigor Mortis, MG, Malignant Hyperthermia, Botox, etc.) |
Explain me E-C coupling in simple terms
E-C Coupling = the bridge that converts the electrical message on the surface into a mechanical response deep inside.
Like a power surge running along the outside of a building.

Think of it like a fire alarm system in a multi-storey building. The alarm doesn't just ring on the ground floor — it rings on every floor simultaneously via the alarm cables running through the walls.
DHPR is like a motion sensor — it detects the electrical disturbance and gets ready to act.
No chemical messenger needed. No diffusion. Just a direct mechanical tug between two proteins touching each other — incredibly fast.
The floodgates open and calcium water pours everywhere around the actin-myosin machinery.
Calcium is the key that removes the guard from the doorway, allowing the workers (myosin) to finally start pulling.
SERCA is like a vacuum cleaner sucking all the calcium back into the storage tank.
Surface AP → travels down T-TUBULE (elevator shaft)
↓
DHPR (voltage sensor) detects depolarisation
↓
DHPR physically tugs open RyR on SR
↓
Ca²⁺ FLOODS out of SR (10⁻⁷ → 10⁻⁵ M)
↓
Ca²⁺ binds TROPONIN C
↓
Tropomyosin shifts → active sites EXPOSED on actin
↓
Myosin heads attach → cross-bridge cycle → CONTRACTION 💪
↓
[When nerve stops] SERCA pumps Ca²⁺ back into SR
↓
Troponin C releases Ca²⁺ → tropomyosin blocks sites → RELAXATION
[ Terminal Cisterna of SR ] | [ T-Tubule ] | [ Terminal Cisterna of SR ]
↑ ↑ ↑
(calcium tank) (electrical cable) (calcium tank)
└──────── DHPR ↔ RyR contact point ──────────────┘
| Condition | What Goes Wrong in E-C Coupling |
|---|---|
| Malignant Hyperthermia | RyR1 gene mutation → channel stays open → uncontrolled Ca²⁺ release → sustained contraction → dangerous heat & rigidity |
| Hypokalemic periodic paralysis | DHPR mutation → voltage sensor fails → T-tubule signal doesn't open RyR → muscle suddenly paralyzed despite normal nerve signal |
| Dantrolene (drug) | Blocks RyR1 → stops Ca²⁺ release → treats malignant hyperthermia |
| Heart muscle (cardiac) | Uses a slightly different system — DHPR opens and lets in a small Ca²⁺ current first (CICR — Ca²⁺-induced Ca²⁺ release), which then triggers RyR2 to open. Slower and more regulated than skeletal muscle. |
E-C Coupling = the action potential travels down T-tubules → DHPR physically opens RyR → calcium floods from SR → calcium binds Troponin C → actin active sites exposed → muscle contracts.