Anotomy ke last revision point batana
Anatomy ka kaunsa topic ya system ka last revision points chahiye? Β· Kiske liye revision kar rahe hain?
FMGE upper limb anatomy high yield last minute revision points 2025
| Part | Formation |
|---|---|
| Upper Trunk | C5 + C6 |
| Middle Trunk | C7 only |
| Lower Trunk | C8 + T1 |
| Nerve | Injury Site | Deformity | Loss |
|---|---|---|---|
| Radial | Spiral groove (mid-shaft humerus fracture) | Wrist drop | Extension of wrist/fingers |
| Radial | Axilla (crutch palsy) | Wrist drop + Triceps weak | All extensors including triceps |
| Median | Wrist (Carpal Tunnel) | Ape hand | Thenar wasting, opposition lost |
| Median | Elbow (Supracondylar #) | Hand of benediction (on flexion) | LOAF muscles |
| Ulnar | Medial epicondyle | Claw hand (4th, 5th fingers) | Interossei, hypothenar |
| Ulnar | Wrist (Guyon's canal) | Claw hand without sensory loss in palm | Intrinsics only |
| Axillary | Surgical neck humerus | Flat shoulder / Sergeant's badge area numb | Deltoid paralysis |
| Long Thoracic | Mastectomy / Porter's palsy | Winged Scapula | Serratus anterior |
Median nerve = "LOAF" - Lumbricals (1, 2), Opponens pollicis, Abductor pollicis brevis, Flexor pollicis brevis (superficial head)
Note: Ulnar nerve does NOT pass through carpal tunnel - it goes through Guyon's canal
| Muscle | Action | Nerve |
|---|---|---|
| Supraspinatus | Initiation of abduction (0-15Β°) | Suprascapular (C5,C6) |
| Infraspinatus | Lateral rotation | Suprascapular (C5,C6) |
| Teres Minor | Lateral rotation | Axillary (C5,C6) |
| Subscapularis | Medial rotation | Subscapular (C5,C6) |
Most commonly torn: Supraspinatus - "Painful arc" (60Β°-120Β°)
Make a summary PDF of upper limb nerve injury mnemonics
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/upper-limb-pdf && python3 -c "from reportlab.pdfgen import canvas; print('reportlab OK')"
~/upper-limb-pdf/make_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
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
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/upper-limb-pdf/Upper_Limb_Nerve_Injuries_Mnemonics.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm,
leftMargin=1.8*cm,
topMargin=1.5*cm,
bottomMargin=1.5*cm,
)
styles = getSampleStyleSheet()
# Custom styles
TITLE_STYLE = ParagraphStyle(
"Title", parent=styles["Title"],
fontSize=22, textColor=colors.HexColor("#1a237e"),
spaceAfter=4, alignment=TA_CENTER, fontName="Helvetica-Bold"
)
SUBTITLE_STYLE = ParagraphStyle(
"Subtitle", parent=styles["Normal"],
fontSize=11, textColor=colors.HexColor("#5c6bc0"),
spaceAfter=2, alignment=TA_CENTER, fontName="Helvetica"
)
SECTION_STYLE = ParagraphStyle(
"Section", parent=styles["Normal"],
fontSize=13, textColor=colors.white,
fontName="Helvetica-Bold", alignment=TA_LEFT,
leftIndent=6, spaceAfter=2, spaceBefore=6
)
BODY_STYLE = ParagraphStyle(
"Body", parent=styles["Normal"],
fontSize=9.5, textColor=colors.HexColor("#212121"),
fontName="Helvetica", leading=14, spaceAfter=2
)
MNEMONIC_STYLE = ParagraphStyle(
"Mnemonic", parent=styles["Normal"],
fontSize=10.5, textColor=colors.HexColor("#b71c1c"),
fontName="Helvetica-Bold", leading=14, spaceAfter=2,
leftIndent=8
)
NOTE_STYLE = ParagraphStyle(
"Note", parent=styles["Normal"],
fontSize=9, textColor=colors.HexColor("#4a148c"),
fontName="Helvetica-Oblique", leading=13, spaceAfter=2,
leftIndent=8
)
FOOTER_STYLE = ParagraphStyle(
"Footer", parent=styles["Normal"],
fontSize=8, textColor=colors.grey,
alignment=TA_CENTER
)
def section_header(text, bg=colors.HexColor("#1a237e")):
data = [[Paragraph(text, SECTION_STYLE)]]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("ROWBACKGROUNDS", (0,0), (-1,-1), [bg]),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
def mini_header(text):
data = [[Paragraph(f"<b>{text}</b>", ParagraphStyle(
"mini", parent=styles["Normal"],
fontSize=10.5, textColor=colors.white,
fontName="Helvetica-Bold", leftIndent=4
))]]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#3949ab")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
return t
def colored_table(headers, rows, col_widths, header_bg=colors.HexColor("#3949ab")):
data = [[Paragraph(f"<b>{h}</b>", ParagraphStyle(
"th", parent=styles["Normal"], fontSize=9,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER
)) for h in headers]]
for i, row in enumerate(rows):
data.append([Paragraph(str(cell), ParagraphStyle(
"td", parent=styles["Normal"], fontSize=9,
textColor=colors.HexColor("#212121"), fontName="Helvetica",
alignment=TA_LEFT, leading=13
)) for cell in row])
t = Table(data, colWidths=col_widths)
style = [
("BACKGROUND", (0,0), (-1,0), header_bg),
("ROWBACKGROUNDS", (0,1), (-1,-1), [colors.HexColor("#e8eaf6"), colors.white]),
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#c5cae9")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]
t.setStyle(TableStyle(style))
return t
def highlight_box(text, bg=colors.HexColor("#fff9c4"), border=colors.HexColor("#f57f17")):
data = [[Paragraph(text, ParagraphStyle(
"hb", parent=styles["Normal"], fontSize=9.5,
textColor=colors.HexColor("#212121"), fontName="Helvetica",
leading=14, leftIndent=4
))]]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1.2, border),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
story = []
# βββ COVER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(Spacer(1, 1.2*cm))
story.append(Paragraph("Upper Limb Nerve Injuries", TITLE_STYLE))
story.append(Paragraph("Mnemonics & High-Yield Revision Summary", SUBTITLE_STYLE))
story.append(Paragraph("For FMGE / NEET PG / USMLE Step 1", ParagraphStyle(
"sub2", parent=styles["Normal"], fontSize=10, textColor=colors.HexColor("#7986cb"),
alignment=TA_CENTER, spaceAfter=4
)))
story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor("#1a237e"), spaceAfter=10))
story.append(Spacer(1, 0.3*cm))
# βββ SECTION 1: BRACHIAL PLEXUS ββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("1. BRACHIAL PLEXUS - ROOTS, TRUNKS, CORDS"))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph('<b>Roots:</b> C5, C6, C7, C8, T1', BODY_STYLE))
story.append(Paragraph(
'<b>Mnemonic (Roots):</b> "My Tea Comes From Cuba" (C5-C6-C7-C8-T1)',
MNEMONIC_STYLE
))
story.append(Spacer(1, 0.15*cm))
trunk_rows = [
["Upper Trunk", "C5 + C6", "Suprascapular n., Nerve to subclavius"],
["Middle Trunk", "C7 only", "No named branch"],
["Lower Trunk", "C8 + T1", "β"],
]
story.append(colored_table(
["Trunk", "Formation", "Key Branch"],
trunk_rows,
[5.5*cm, 4.5*cm, 8.2*cm]
))
story.append(Spacer(1, 0.2*cm))
story.append(highlight_box(
"<b>Cord Mnemonic - MLP</b>: Medial cord = C8,T1 (Ulnar + medial cutaneous nerves) | "
"Lateral cord = C5,C6,C7 (Musculocutaneous + Lateral root of Median) | "
"Posterior cord = all roots (Radial + Axillary)"
))
story.append(Spacer(1, 0.2*cm))
story.append(highlight_box(
"<b>Flexors vs Extensors Rule:</b><br/>"
"Anterior divisions β Flexors (Musculocutaneous, Median, Ulnar)<br/>"
"Posterior divisions β Extensors (Radial, Axillary)",
bg=colors.HexColor("#e8f5e9"), border=colors.HexColor("#2e7d32")
))
story.append(Spacer(1, 0.3*cm))
# βββ SECTION 2: NERVE INJURIES TABLE βββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("2. NERVE INJURY SIGNATURES - Must-Know Table"))
story.append(Spacer(1, 0.2*cm))
injury_rows = [
["Radial\n(C5-C8)", "Spiral groove\n(mid-shaft humerus #)", "Wrist Drop", "Extension wrist+fingers lost; Triceps SPARED", "Saturday night palsy"],
["Radial\n(C5-C8)", "Axilla\n(crutch palsy)", "Wrist Drop\n+ Triceps weak", "All extensors lost incl. triceps; Sensory: dorsum hand", "Crutch / Crutch palsy"],
["Axillary\n(C5-C6)", "Surgical neck\nhumerus #", "Flat shoulder\n(deltoid atrophy)", "Deltoid + Teres Minor; Badge area numb", "Shoulder dislocation"],
["Median\n(C6-T1)", "Carpal Tunnel\n(wrist)", "Ape Hand\n(thenar flat)", "LOAF muscles; Opposition thumb lost", "CTS - night pain, Tinel+, Phalen+"],
["Median\n(C6-T1)", "Supracondylar #\n(elbow)", "Hand of Benediction\n(on attempted flex)", "Ant. interosseous branch; FPL, FDP radial, PQ lost", "Most common in children"],
["Ulnar\n(C8-T1)", "Medial epicondyle\n(behind elbow)", "Claw Hand\n(4th + 5th fingers)", "Interossei, hypothenar; Sensory: little + ring finger", "Funny bone injury"],
["Ulnar\n(C8-T1)", "Wrist\n(Guyon's canal)", "Claw Hand\n(no palm numb)", "Intrinsic muscles only; Palmar branch SPARED", "Cyclist palsy"],
["Musculo-\ncutaneous\n(C5-C7)", "Coracobrachialis\npenetration", "Weak elbow flexion", "Biceps, Brachialis, Coracobrachialis; Lat. cutaneous n. forearm", "Uncommon isolated injury"],
["Long Thoracic\n(C5-C7)", "Axillary dissection\n/ mastectomy", "Winged Scapula", "Serratus anterior paralysis", "Porter's palsy"],
["Dorsal Scapular\n(C5)", "Neck trauma", "Winged Scapula\n(subtle)", "Rhomboids + Levator scapulae", "Scapula doesn't retract"],
]
story.append(colored_table(
["Nerve", "Injury Site", "Deformity", "What is Lost", "Clinical Note"],
injury_rows,
[2.5*cm, 3.5*cm, 3.5*cm, 5.0*cm, 3.7*cm]
))
story.append(Spacer(1, 0.3*cm))
# βββ SECTION 3: MNEMONICS ββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("3. MNEMONICS CHEAT SHEET", bg=colors.HexColor("#4a148c")))
story.append(Spacer(1, 0.2*cm))
mnemonics = [
("LOAF (Median nerve hand muscles)",
"L - Lumbricals 1 & 2\nO - Opponens Pollicis\nA - Abductor Pollicis Brevis\nF - Flexor Pollicis Brevis (superficial head)"),
("SITS (Rotator Cuff)",
"S - Supraspinatus (abduction initiation 0-15Β°)\nI - Infraspinatus (lateral rotation)\nT - Teres Minor (lateral rotation)\nS - Subscapularis (medial rotation)"),
("Cubital Fossa Contents - Lateral to Medial",
'"Really Be Brave Man"\nR - Radial Nerve | B - Biceps Tendon | B - Brachial Artery | M - Median Nerve'),
("Brachial Plexus Roots",
'"My Tea Comes From Cuba"\nC5 | C6 | C7 | C8 | T1'),
("Axillary Artery Branches (Parts 1-2-3 = Branches 1-2-3)",
"Part 1 (1 branch): Supreme Thoracic\nPart 2 (2 branches): Thoracoacromial, Lateral Thoracic\nPart 3 (3 branches): Subscapular, Ant. Circumflex Humeral, Post. Circumflex Humeral"),
("Ulnar vs Median Claw",
"Ulnar = 4th & 5th finger claw (ulnar paradox: wrist lesion = worse claw)\nMedian = 2nd & 3rd finger claw (hand of benediction = proximal lesion)\nRemember: More proximal injury = Weaker claw (paradox!)"),
("Radial Nerve at Different Levels",
"Axilla injury: Wrist drop + Triceps weakness + Sensory loss arm/forearm/hand\nSpiral groove: Wrist drop, Triceps NORMAL (branch given above groove)\nAnterior Interosseous syndrome: No wrist drop (pure motor, no sensory)"),
("Erb's Palsy (C5, C6) vs Klumpke's (C8, T1)",
"Erb's = Upper trunk | Waiter's tip (arm adducted, medially rotated, elbow extended)\nKlumpke's = Lower trunk | Claw hand + Horner's (if T1 ramus involved = ptosis, miosis, anhidrosis)"),
]
for title, body in mnemonics:
story.append(mini_header(title))
for line in body.split("\n"):
if line.startswith(("L -","O -","A -","F -","S -","I -","T -","R -","B -","M -","P -")):
story.append(Paragraph(f" {line}", BODY_STYLE))
elif any(line.startswith(x) for x in ['"', "C5","C6","Part","Ulnar","Median","Axilla","Spiral","Ante","Erb","Klum"]):
story.append(Paragraph(f" {line}", BODY_STYLE))
else:
story.append(Paragraph(line, MNEMONIC_STYLE if line == title else BODY_STYLE))
story.append(Spacer(1, 0.15*cm))
story.append(Spacer(1, 0.3*cm))
# βββ SECTION 4: QUICK FIRE βββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4. QUICK-FIRE FMGE FACTS", bg=colors.HexColor("#b71c1c")))
story.append(Spacer(1, 0.2*cm))
quick = [
("Carpal Tunnel Contents", "Median nerve + 9 tendons (FDS x4, FDP x4, FPL x1). Ulnar nerve is NOT inside."),
("Anatomical Snuffbox Floor", "Scaphoid + Trapezium. Radial artery passes through it. Tenderness = Scaphoid fracture."),
("Most Common Carpal # ", "Scaphoid (waist most common). Avascular necrosis risk (proximal pole has no direct blood supply)."),
("Dupuytren's Contracture", "Palmar fascia fibrosis. Affects ring (4th) and little (5th) finger most. NOT a nerve lesion."),
("Winged Scapula - 2 causes", "Long thoracic nerve (serratus anterior) = medial winging. Spinal accessory nerve (trapezius) = lateral winging."),
("Painful Arc Syndrome", "60Β°-120Β° abduction. Supraspinatus tendon impingement under coracoacromial arch."),
("Palmaris Longus", "Most variable muscle; absent in ~15% population. Used for tendon grafts. Innervated by Median nerve."),
("Posterior Interosseous Nerve (PIN)", "Deep branch of Radial nerve. Injury = Finger/thumb drop, NO wrist drop, NO sensory loss."),
("Guyon's Canal (Ulnar tunnel)", "Contains: Ulnar nerve + Ulnar artery. Borders: Pisiform (medial), Hook of hamate (lateral), Flexor retinaculum (floor)."),
("Ulnar Paradox", "More distal ulnar lesion at wrist = Worse claw (lumbricals also paralyzed). Proximal lesion = milder claw (FDP partially works)."),
]
for fact, detail in quick:
story.append(Paragraph(
f"<b><font color='#b71c1c'>βΆ {fact}:</font></b> {detail}",
BODY_STYLE
))
story.append(Spacer(1, 0.1*cm))
story.append(Spacer(1, 0.3*cm))
# βββ SECTION 5: DERMATOMES βββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("5. UPPER LIMB SENSORY / DERMATOME QUICK MAP", bg=colors.HexColor("#1b5e20")))
story.append(Spacer(1, 0.15*cm))
derm_rows = [
["C5", "Lateral upper arm (axillary n. - regimental badge area)"],
["C6", "Lateral forearm + Thumb + Index (Lateral cutaneous n. forearm / Median n.)"],
["C7", "Middle finger (Median nerve)"],
["C8", "Ring + Little finger (Ulnar nerve)"],
["T1", "Medial forearm (Medial cutaneous nerve of forearm)"],
["T2", "Medial upper arm (Intercostobrachial nerve)"],
]
story.append(colored_table(
["Root", "Area Supplied"],
derm_rows,
[3*cm, 15.2*cm],
header_bg=colors.HexColor("#2e7d32")
))
story.append(Spacer(1, 0.4*cm))
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor("#c5cae9")))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
"Prepared for FMGE Revision | Based on Gray's Anatomy for Students & THIEME Atlas | Orris Medical AI",
FOOTER_STYLE
))
doc.build(story)
print("PDF created:", OUTPUT)
cd /home/daytona/workspace/upper-limb-pdf && python3 make_pdf.py 2>&1
ls -lh /home/daytona/workspace/upper-limb-pdf/
Upper Limb Nerve Injuries Mnemonics
PDF Document Β· PDF
| Section | Content |
|---|---|
| 1. Brachial Plexus | Roots/Trunks/Cords table + "My Tea Comes From Cuba" mnemonic + Flexors vs Extensors rule |
| 2. Nerve Injury Table | Radial, Axillary, Median, Ulnar, Musculocutaneous, Long Thoracic - injury site, deformity, what is lost |
| 3. Mnemonics Cheatsheet | LOAF, SITS, Cubital fossa "Really Be Brave Man", Axillary artery branches, Ulnar paradox, Erb's vs Klumpke's |
| 4. Quick-Fire FMGE Facts | Carpal tunnel, Snuffbox, Scaphoid #, Dupuytren's, PIN injury, Guyon's canal |
| 5. Dermatomes Map | C5 to T2 sensory distribution table |