Generate branchial plexus infographic

Checking Date & Time
Reading File
Finding Sources
Searching Images

brachial plexus anatomy diagram roots trunks divisions cords branches

Reading File
Reading File
Loading Image
Reading File
Running Command

mkdir -p /home/daytona/workspace/brachial-plexus && ls /home/daytona/workspace/brachial-plexus/

Writing File

~/brachial-plexus/generate_infographic.py

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch, FancyArrowPatch
import matplotlib.patheffects as pe
import numpy as np

# ── Canvas ──────────────────────────────────────────────────────────────────
fig = plt.figure(figsize=(22, 28), facecolor='#0d1b2a')
fig.subplots_adjust(left=0, right=1, top=1, bottom=0)

ax = fig.add_axes([0, 0, 1, 1])
ax.set_xlim(0, 22)
ax.set_ylim(0, 28)
ax.axis('off')
ax.set_facecolor('#0d1b2a')

# ── Color palette ────────────────────────────────────────────────────────────
C_TITLE   = '#e8f4fd'
C_HEADER  = '#1a3a5c'
C_BORDER  = '#2e6da4'

# Roots
ROOT_COL   = '#4a90d9'
TRUNK_COL  = '#5ba85c'   # green
DIV_ANT    = '#e07b54'   # orange
DIV_POST   = '#9b59b6'   # purple
CORD_LAT   = '#e07b54'
CORD_POST  = '#9b59b6'
CORD_MED   = '#e74c3c'
NERVE_COL  = '#f0c040'

BG_SECTION = '#0f2235'
BG_CARD    = '#112840'
ACCENT     = '#2e86de'

# ── Helper functions ─────────────────────────────────────────────────────────
def rounded_box(ax, x, y, w, h, color, alpha=1.0, zorder=3, lw=1.5, ec=None):
    ec = ec or color
    box = FancyBboxPatch((x, y), w, h,
                         boxstyle="round,pad=0.06",
                         facecolor=color, edgecolor=ec,
                         linewidth=lw, alpha=alpha, zorder=zorder)
    ax.add_patch(box)
    return box

def label(ax, x, y, text, fs=9, color='white', ha='center', va='center',
          bold=False, zorder=5, wrap=False):
    weight = 'bold' if bold else 'normal'
    ax.text(x, y, text, fontsize=fs, color=color, ha=ha, va=va,
            fontweight=weight, zorder=zorder,
            fontfamily='DejaVu Sans')

def connector(ax, x1, y1, x2, y2, color='#4a90d9', lw=1.8, zorder=2,
              style='-', alpha=0.85):
    ax.plot([x1, x2], [y1, y2], color=color, lw=lw, zorder=zorder,
            linestyle=style, alpha=alpha,
            solid_capstyle='round')

def arrow(ax, x1, y1, x2, y2, color, lw=1.6, zorder=4):
    ax.annotate('', xy=(x2, y2), xytext=(x1, y1),
                arrowprops=dict(arrowstyle='->', color=color, lw=lw),
                zorder=zorder)

# ═══════════════════════════════════════════════════════════════════
# TITLE BLOCK
# ═══════════════════════════════════════════════════════════════════
rounded_box(ax, 0.3, 26.5, 21.4, 1.3, '#112840', ec='#2e86de', lw=2.5)
label(ax, 11, 27.3, 'BRACHIAL PLEXUS', fs=26, bold=True, color='#e8f4fd')
label(ax, 11, 26.85, 'Roots  •  Trunks  •  Divisions  •  Cords  •  Terminal Branches', 
      fs=11, color='#7fb3d3')

# Source credit
label(ax, 20.5, 26.6, 'Source: Gray\'s Anatomy for Students', fs=6.5,
      color='#4a7ea8', ha='right')

# ═══════════════════════════════════════════════════════════════════
# MAIN SCHEMATIC (upper 60%)
# ═══════════════════════════════════════════════════════════════════
# Layout columns (x centres)
X_ROOT   = 2.4
X_TRUNK  = 5.2
X_DIVS   = 7.8
X_CORD   = 10.5
X_NERVES = 14.5

# Y positions for the 5 roots (C5 top → T1 bottom)
root_ys   = [24.8, 23.6, 22.4, 21.2, 20.0]
root_lbls = ['C5', 'C6', 'C7', 'C8', 'T1']

# Draw root boxes
for ry, rl in zip(root_ys, root_lbls):
    rounded_box(ax, X_ROOT-0.55, ry-0.28, 1.1, 0.56, ROOT_COL, ec='#82bdee', lw=1.5)
    label(ax, X_ROOT, ry, rl, fs=11, bold=True, color='#0d1b2a')

# Column headers
for xc, txt, col in [
    (X_ROOT,   'ROOTS',    ROOT_COL),
    (X_TRUNK,  'TRUNKS',   TRUNK_COL),
    (X_DIVS,   'DIVISIONS', DIV_ANT),
    (X_CORD,   'CORDS',    CORD_LAT),
    (X_NERVES, 'TERMINAL\nBRANCHES', NERVE_COL),
]:
    label(ax, xc, 25.55, txt, fs=8.5, bold=True, color=col)

# ── TRUNKS ──────────────────────────────────────────────────────────
# Upper trunk (C5+C6 → y midpoint)
upper_y  = (root_ys[0] + root_ys[1]) / 2   # 24.2
middle_y = root_ys[2]                         # 22.4
lower_y  = (root_ys[3] + root_ys[4]) / 2   # 20.6

trunk_ys   = [upper_y, middle_y, lower_y]
trunk_lbls = ['Upper\n(C5,C6)', 'Middle\n(C7)', 'Lower\n(C8,T1)']
trunk_cols = [TRUNK_COL, TRUNK_COL, TRUNK_COL]

# Lines: roots → trunks
# Upper trunk: C5 & C6 → upper_y
connector(ax, X_ROOT+0.55, root_ys[0], X_TRUNK-0.65, upper_y, ROOT_COL, lw=2.0)
connector(ax, X_ROOT+0.55, root_ys[1], X_TRUNK-0.65, upper_y, ROOT_COL, lw=2.0)
# Middle trunk: C7 straight
connector(ax, X_ROOT+0.55, root_ys[2], X_TRUNK-0.65, middle_y, ROOT_COL, lw=2.0)
# Lower trunk: C8 & T1 → lower_y
connector(ax, X_ROOT+0.55, root_ys[3], X_TRUNK-0.65, lower_y, ROOT_COL, lw=2.0)
connector(ax, X_ROOT+0.55, root_ys[4], X_TRUNK-0.65, lower_y, ROOT_COL, lw=2.0)

for ty, tl in zip(trunk_ys, trunk_lbls):
    rounded_box(ax, X_TRUNK-0.65, ty-0.38, 1.3, 0.76, TRUNK_COL, ec='#8fcf8f', lw=1.5)
    label(ax, X_TRUNK, ty, tl, fs=8, bold=True, color='#0d1b2a')

# ── DIVISIONS ────────────────────────────────────────────────────────
# Each trunk → Anterior + Posterior division
div_data = [
    # (trunk_y, ant_y, post_y)
    (upper_y,  24.4, 24.0),
    (middle_y, 22.6, 22.2),
    (lower_y,  21.0, 20.6),
]

for (ty, ay, py) in div_data:
    # trunk → ant
    connector(ax, X_TRUNK+0.65, ty, X_DIVS-0.5, ay, TRUNK_COL, lw=1.6)
    # trunk → post
    connector(ax, X_TRUNK+0.65, ty, X_DIVS-0.5, py, TRUNK_COL, lw=1.6)

    # Ant division box
    rounded_box(ax, X_DIVS-0.5, ay-0.19, 1.0, 0.38, DIV_ANT, ec='#f0a070', lw=1.2)
    label(ax, X_DIVS, ay, 'Ant', fs=7.5, bold=True, color='#0d1b2a')

    # Post division box
    rounded_box(ax, X_DIVS-0.5, py-0.19, 1.0, 0.38, DIV_POST, ec='#c77dcc', lw=1.2)
    label(ax, X_DIVS, py, 'Post', fs=7.5, bold=True, color='white')

# ── CORDS ──────────────────────────────────────────────────────────
# Lateral cord = ant(upper) + ant(middle) → y ~23.5
# Posterior cord = post(upper)+post(middle)+post(lower) → y ~22.2
# Medial cord = ant(lower) → y ~21.0
lat_y  = (div_data[0][1] + div_data[1][1]) / 2   # 23.5
post_y = (div_data[0][2] + div_data[1][2] + div_data[2][2]) / 3  # ~22.27
med_y  = div_data[2][1]                           # 21.0

# Lines: divisions → cords
# Lateral
connector(ax, X_DIVS+0.5, div_data[0][1], X_CORD-0.65, lat_y,  DIV_ANT,  lw=1.8)
connector(ax, X_DIVS+0.5, div_data[1][1], X_CORD-0.65, lat_y,  DIV_ANT,  lw=1.8)
# Posterior
connector(ax, X_DIVS+0.5, div_data[0][2], X_CORD-0.65, post_y, DIV_POST, lw=1.8)
connector(ax, X_DIVS+0.5, div_data[1][2], X_CORD-0.65, post_y, DIV_POST, lw=1.8)
connector(ax, X_DIVS+0.5, div_data[2][2], X_CORD-0.65, post_y, DIV_POST, lw=1.8)
# Medial
connector(ax, X_DIVS+0.5, div_data[2][1], X_CORD-0.65, med_y,  DIV_ANT,  lw=1.8)

cord_data = [
    (lat_y,  CORD_LAT,  '#f0a070', 'Lateral\nCord\n(C5–C7)'),
    (post_y, CORD_POST, '#c77dcc', 'Posterior\nCord\n(C5–T1)'),
    (med_y,  CORD_MED,  '#f08080', 'Medial\nCord\n(C8,T1)'),
]
for (cy, cc, ec_, cl) in cord_data:
    rounded_box(ax, X_CORD-0.65, cy-0.44, 1.3, 0.88, cc, ec=ec_, lw=1.5)
    label(ax, X_CORD, cy, cl, fs=7.5, bold=True, color='white')

# ── TERMINAL BRANCHES ──────────────────────────────────────────────
# From Lateral cord
lat_nerves = [
    (24.3, 'Lateral Pectoral N.', '(C5–C7)', CORD_LAT),
    (23.7, 'Musculocutaneous N.', '(C5–C7)', CORD_LAT),
    (23.1, 'Lateral root\nof Median N.', '(C5–C7)', CORD_LAT),
]
# From Posterior cord
post_nerves = [
    (22.7, 'Upper Subscapular N.', '(C5,C6)', CORD_POST),
    (22.3, 'Thoracodorsal N.', '(C6–C8)', CORD_POST),
    (21.9, 'Lower Subscapular N.', '(C5,C6)', CORD_POST),
    (21.5, 'Axillary N.', '(C5,C6)', CORD_POST),
    (21.1, 'Radial N.', '(C5–T1)', CORD_POST),
]
# From Medial cord
med_nerves = [
    (20.6, 'Medial Pectoral N.', '(C8,T1)', CORD_MED),
    (20.1, 'Medial Brachial\nCutaneous N.', '(T1)', CORD_MED),
    (19.5, 'Medial Antebrachial\nCutaneous N.', '(C8,T1)', CORD_MED),
    (18.9, 'Medial root\nof Median N.', '(C8,T1)', CORD_MED),
    (18.3, 'Ulnar N.', '(C7–T1)', CORD_MED),
]

def draw_nerve(ax, cord_y, nerve_y, nerve_name, roots_text, cord_col):
    connector(ax, X_CORD+0.65, cord_y, X_NERVES-2.2, nerve_y, cord_col, lw=1.4)
    rounded_box(ax, X_NERVES-2.2, nerve_y-0.22, 4.0, 0.44, '#112840', ec=cord_col, lw=1.2)
    label(ax, X_NERVES-0.15, nerve_y+0.07, nerve_name, fs=7.8, color='#e8f0ff',
          ha='center', bold=True)
    label(ax, X_NERVES-0.15, nerve_y-0.1, roots_text, fs=6.8, color='#7fb3d3',
          ha='center')

for (ny, nn, nr, nc) in lat_nerves:
    draw_nerve(ax, lat_y, ny, nn, nr, nc)
for (ny, nn, nr, nc) in post_nerves:
    draw_nerve(ax, post_y, ny, nn, nr, nc)
for (ny, nn, nr, nc) in med_nerves:
    draw_nerve(ax, med_y, ny, nn, nr, nc)

# ── ROOT BRANCHES (pre-trunk) ──────────────────────────────────────
root_branch_data = [
    (root_ys[0], 25.3, 'Dorsal Scapular N.', '(C5) → rhomboids', ROOT_COL),
    (root_ys[0], 24.8+0.55, 'Long Thoracic N.', '(C5–C7) → serratus ant.', ROOT_COL),
]
for (ry, by, bn, br, bc) in root_branch_data:
    # branch up/sideways from root
    connector(ax, X_ROOT, ry+0.28, X_ROOT, by, bc, lw=1.2, style='--')
    rounded_box(ax, 0.2, by, 2.0, 0.4, '#0f2235', ec=bc, lw=1.0)
    label(ax, 1.2, by+0.28, bn, fs=6.8, color='#e8f0ff', bold=True)
    label(ax, 1.2, by+0.08, br, fs=6, color='#7fb3d3')

# Trunk branches (suprascapular, subclavius)
connector(ax, X_TRUNK, upper_y+0.38, X_TRUNK, upper_y+0.85, TRUNK_COL, lw=1.2, style='--')
rounded_box(ax, X_TRUNK-1.1, upper_y+0.85, 2.2, 0.55, '#0f2235', ec=TRUNK_COL, lw=1.0)
label(ax, X_TRUNK, upper_y+1.12, 'Suprascapular N.', fs=7, color='#e8f0ff', bold=True)
label(ax, X_TRUNK, upper_y+0.94, '(C5,C6) → supra/infraspinatus', fs=6, color='#7fb3d3')

connector(ax, X_TRUNK, upper_y-0.38, X_TRUNK, upper_y-0.75, TRUNK_COL, lw=1.2, style='--')
rounded_box(ax, X_TRUNK-0.9, upper_y-1.05, 1.8, 0.3, '#0f2235', ec=TRUNK_COL, lw=1.0)
label(ax, X_TRUNK, upper_y-0.9, 'N. to Subclavius (C5,C6)', fs=6.5, color='#e8f0ff')

# ── SEPARATOR LINE ────────────────────────────────────────────────
ax.axhline(y=17.8, xmin=0.01, xmax=0.99, color='#1e4060', lw=1.5, linestyle='--')

# ═══════════════════════════════════════════════════════════════════
# LOWER PANELS  – Key Nerves Detail + Injuries
# ═══════════════════════════════════════════════════════════════════
panel_top = 17.5
label(ax, 11, 17.65, '▸  KEY TERMINAL NERVES & CLINICAL NOTES', fs=9.5,
      bold=True, color='#7fb3d3')

# ── 5-column nerve cards ──────────────────────────────────────────
nerve_cards = [
    {
        'name': 'Musculocutaneous\nNerve',
        'roots': 'C5, C6, C7',
        'cord': 'Lateral Cord',
        'motor': 'Biceps brachii,\nBrachialis,\nCoracobrachialis',
        'sensory': 'Lat. forearm\n(via lat. cutaneous\nn. of forearm)',
        'test': 'Elbow flexion\n(arm supinated)',
        'col': CORD_LAT,
    },
    {
        'name': 'Radial Nerve',
        'roots': 'C5–C8, T1',
        'cord': 'Posterior Cord',
        'motor': 'Triceps, Brachioradialis,\nWrist & finger\nextensors',
        'sensory': 'Post. arm & forearm;\ndorsal hand (lat.)',
        'test': 'Wrist extension;\nFinger extension',
        'col': CORD_POST,
    },
    {
        'name': 'Median Nerve',
        'roots': 'C6–C8, T1',
        'cord': 'Both Lat. & Med.',
        'motor': 'Flexors forearm (most);\nThenar muscles;\nLumbricals 1 & 2',
        'sensory': 'Lat. palm; thumb,\nindex, middle,\nhalf ring finger',
        'test': 'Thumb opposition;\n"OK" sign (AIN)',
        'col': '#e0a040',
    },
    {
        'name': 'Ulnar Nerve',
        'roots': 'C7, C8, T1',
        'cord': 'Medial Cord',
        'motor': 'FCU; med. FDP;\nhypothen.; interos.;\nlumbricals 3 & 4',
        'sensory': 'Med. palm; little\n& half ring finger',
        'test': 'Finger abduction;\nCard test',
        'col': CORD_MED,
    },
    {
        'name': 'Axillary Nerve',
        'roots': 'C5, C6',
        'cord': 'Posterior Cord',
        'motor': 'Deltoid;\nTeres minor',
        'sensory': 'Regimental badge\narea (lat. arm)',
        'test': 'Shoulder abduction;\nSensory lat. arm',
        'col': CORD_POST,
    },
]

card_w  = 4.0
card_h  = 6.0
card_xs = [0.4, 4.6, 8.8, 13.0, 17.2]

for i, (cx, nc) in enumerate(zip(card_xs, nerve_cards)):
    # Card background
    rounded_box(ax, cx, panel_top-card_h-0.2, card_w, card_h,
                '#0f2235', ec=nc['col'], lw=2.0, zorder=3)

    # Header strip
    rounded_box(ax, cx, panel_top-0.85, card_w, 0.65,
                nc['col'], ec=nc['col'], lw=1, zorder=4)
    label(ax, cx+card_w/2, panel_top-0.52, nc['name'],
          fs=8.0, bold=True, color='#0d1b2a', zorder=5)

    y = panel_top-1.3
    rows = [
        ('Roots:', nc['roots']),
        ('Cord:', nc['cord']),
        ('Motor:', nc['motor']),
        ('Sensory:', nc['sensory']),
        ('Test:', nc['test']),
    ]
    for k, v in rows:
        label(ax, cx+0.2, y, k, fs=6.8, color='#7fb3d3', ha='left', bold=True)
        label(ax, cx+1.15, y, v, fs=6.8, color='#dde8f8', ha='left')
        line_count = v.count('\n') + 1
        y -= 0.38 * (1 + 0.5*(line_count-1))

# ═══════════════════════════════════════════════════════════════════
# INJURY PANEL (bottom strip)
# ═══════════════════════════════════════════════════════════════════
inj_y = 0.3
rounded_box(ax, 0.3, inj_y, 21.4, 3.3, '#0f1e30', ec='#c0392b', lw=2.0)
label(ax, 11, inj_y+3.05, '⚡  BRACHIAL PLEXUS INJURIES', fs=10,
      bold=True, color='#e74c3c')

injuries = [
    {
        'name': "Erb's Palsy\n(Upper Trunk)",
        'roots': 'C5, C6',
        'mechanism': 'Shoulder ↓, head lateral\n(birth trauma, fall)',
        'posture': '"Waiter's tip" — arm\nadducted, medially rotated,\nelbow extended, forearm pronated',
        'lost': 'Deltoid, biceps,\nbrachioradialis',
        'col': '#c0392b',
    },
    {
        'name': "Klumpke's Palsy\n(Lower Trunk)",
        'roots': 'C8, T1',
        'mechanism': 'Arm forcibly\nabducted upward',
        'posture': '"Claw hand" — intrinsic\nmuscle paralysis;\n+/– Horner syndrome',
        'lost': 'Intrinsic hand muscles;\nwrist flexors',
        'col': '#d35400',
    },
    {
        'name': 'Wrist Drop\n(Radial N.)',
        'roots': 'C5–T1',
        'mechanism': 'Humeral shaft fracture;\n"Saturday night palsy"\n(compression)',
        'posture': 'Wrist drop; cannot\nextend wrist/fingers;\nloss of triceps reflex',
        'lost': 'Wrist & finger\nextensors',
        'col': '#8e44ad',
    },
    {
        'name': 'Median N. Palsy\n(Carpal Tunnel)',
        'roots': 'C6–T1',
        'mechanism': 'Repetitive use;\npregnancy; hypothyroidism',
        'posture': '"Ape hand" — thenar\natrophy; cannot oppose\nthumb; Tinel/Phalen +ve',
        'lost': 'Thenar muscles;\nlumbricals 1 & 2',
        'col': '#e0a040',
    },
    {
        'name': 'Ulnar N. Palsy\n(Cubital Tunnel)',
        'roots': 'C8, T1',
        'mechanism': 'Medial epicondyle\nfracture/compression',
        'posture': '"Claw hand" — ring &\nlittle finger clawed;\nhypothen. atrophy',
        'lost': 'Interossei; lumbr.\n3 & 4; hypothenar',
        'col': '#e74c3c',
    },
]

inj_xs = [0.55, 4.7, 8.85, 13.0, 17.15]
inj_w  = 3.9
inj_h  = 2.7

for (ix, inj) in zip(inj_xs, injuries):
    rounded_box(ax, ix, inj_y+0.2, inj_w, inj_h,
                '#0d1b2a', ec=inj['col'], lw=1.5, zorder=4)
    # Name header
    rounded_box(ax, ix, inj_y+0.2+inj_h-0.5, inj_w, 0.5,
                inj['col'], ec=inj['col'], lw=1, zorder=5)
    label(ax, ix+inj_w/2, inj_y+0.2+inj_h-0.25, inj['name'],
          fs=7.2, bold=True, color='#0d1b2a', zorder=6)

    sy = inj_y + 0.2 + inj_h - 0.85
    for k, v in [('Roots:', inj['roots']),
                 ('Cause:', inj['mechanism']),
                 ('Signs:', inj['posture']),
                 ('Lost:', inj['lost'])]:
        label(ax, ix+0.18, sy, k, fs=6, color='#b0c8e0', ha='left', bold=True)
        label(ax, ix+0.95, sy, v, fs=6.2, color='#dde8f8', ha='left')
        sy -= 0.5

# ═══════════════════════════════════════════════════════════════════
# LEGEND
# ═══════════════════════════════════════════════════════════════════
legend_items = [
    (ROOT_COL,  'Roots (C5–T1)'),
    (TRUNK_COL, 'Trunks'),
    (DIV_ANT,   'Anterior Divisions / Lat. Cord'),
    (DIV_POST,  'Posterior Divisions / Post. Cord'),
    (CORD_MED,  'Medial Cord'),
    (NERVE_COL, 'Terminal Branches'),
]
lx, ly = 0.4, 19.1
rounded_box(ax, lx-0.1, ly-0.5, 8.5, 1.0, '#0f1e30', ec='#1e4060', lw=1, zorder=3)
label(ax, lx+4.15, ly+0.3, 'LEGEND', fs=7.5, bold=True, color='#7fb3d3')
for j, (lc, lt) in enumerate(legend_items):
    col_x = lx + (j % 3) * 2.8
    col_y = ly - 0.15 if j < 3 else ly - 0.5
    rounded_box(ax, col_x, col_y, 0.3, 0.25, lc, zorder=5)
    label(ax, col_x+0.45, col_y+0.12, lt, fs=6.5, color='#c8ddf0', ha='left')

# ── Memory mnemonic ────────────────────────────────────────────────
rounded_box(ax, 8.8, 18.8, 13.0, 0.7, '#0f2235', ec='#2e86de', lw=1.5)
label(ax, 15.3, 19.15, '🧠  Mnemonic:  Robert Taylor Drinks Cold Beer', 
      fs=9, bold=True, color='#f0c040')
label(ax, 15.3, 18.92, 'Roots  •  Trunks  •  Divisions  •  Cords  •  Branches',
      fs=7.5, color='#7fb3d3')

# ── Save ──────────────────────────────────────────────────────────
plt.savefig('/home/daytona/workspace/brachial-plexus/brachial_plexus_infographic.png',
            dpi=180, bbox_inches='tight', facecolor='#0d1b2a')
print('Saved successfully.')
Running Command

cd /home/daytona/workspace/brachial-plexus && python generate_infographic.py 2>&1

Editing File

~/brachial-plexus/generate_infographic.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/brachial-plexus/generate_infographic.py'
Running Command

cd /home/daytona/workspace/brachial-plexus && python generate_infographic.py 2>&1

Editing File

~/brachial-plexus/generate_infographic.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/brachial-plexus/generate_infographic.py'
Running Command

cd /home/daytona/workspace/brachial-plexus && python generate_infographic.py 2>&1 && ls -lh brachial_plexus_infographic.png

The infographic is ready. Here's your download link:

brachial plexus infographic

Image · PNG


What's included in the infographic (sourced from Gray's Anatomy for Students):
Top — Schematic Flow Diagram
  • Color-coded pathway: Roots (C5–T1)Trunks (Upper/Middle/Lower) → Divisions (Anterior/Posterior) → Cords (Lateral/Posterior/Medial) → Terminal Branches
  • Pre-trunk branches shown with dashed lines: Dorsal Scapular N., Long Thoracic N., Suprascapular N., N. to Subclavius
Middle — 5 Terminal Nerve Cards Each card (Musculocutaneous, Radial, Median, Ulnar, Axillary) lists: roots, cord of origin, motor supply, sensory territory, and clinical test
Bottom — Injury Panel Erb's Palsy, Klumpke's Palsy, Wrist Drop, Median N. Palsy, Ulnar N. Palsy — each with mechanism, clinical signs, and muscles lost
Mnemonic strip: Robert Taylor Drinks Cold Beer (Roots → Trunks → Divisions → Cords → Branches)
This is a shared conversation. Sign in to Orris to start your own chat.