Paraganglioma point wise

Reading File
Finding Sources
Finding Sources
Searching PubMed

paraganglioma

Reading File
Reading File
Reading File
Reading File
Reading File
Reading File
Loading Image
Reading File
I now have everything needed for a comprehensive, point-wise answer. Let me compile it:

Paraganglioma - Point Wise


1. Definition & Origin

  • Paragangliomas (PGLs) are neoplasms arising from neuroendocrine cells (chromaffin/chief cells) associated with the sympathetic and parasympathetic nervous systems
  • They originate from neural crest-derived paraganglionic cells distributed throughout the body
  • The adrenal medullary pheochromocytoma is the most common paraganglioma, accounting for 80-85% of all cases
  • Extra-adrenal paragangliomas represent the remaining 15-20%; approximately 70% of these occur in the head and neck
  • Robbins, Cotran & Kumar Pathologic Basis of Disease

2. Classification by Location

A. Paravertebral (Sympathetic) Paragangliomas

  • Arise from paravertebral sympathetic ganglia and the organ of Zückerkandl (near the aortic bifurcation)
  • Have sympathetic connections
  • Stain positively for chromaffin - indicating catecholamine production
  • More likely to be functionally active (secrete catecholamines)

B. Head & Neck (Parasympathetic) Paragangliomas

SiteNameKey Feature
Carotid bifurcationCarotid body tumorMost common H&N paraganglioma
Jugular bulbGlomus jugulareCranial nerve deficits
Cochlear promontoryGlomus tympanicumPulsatile tinnitus
Vagus nerveVagal paragangliomaCervical mass, voice change
Aortic bodiesAortico-pulmonary chain-
LarynxLaryngeal paragangliomaSupraglottic, 3rd most common neuroendocrine tumor of larynx
  • These are innervated by the parasympathetic system
  • Only rarely produce catecholamines (up to 5% in H&N)
  • Scott-Brown's Otorhinolaryngology; Robbins

3. Epidemiology

  • Rare, slow-growing, painless masses
  • Peak incidence: 5th and 6th decades of life
  • Laryngeal paragangliomas: 3x more common in women
  • Incidence is higher at high altitudes (possible hypoxic stimulus)
  • Usually solitary and sporadic, but ~10% are multifocal
  • Robbins; Cummings Otolaryngology

4. Genetics & Hereditary Syndromes

  • 30-40% of all pheochromocytomas/paragangliomas harbor an oncogenic germline mutation
  • Hereditary cases are typically younger at presentation and more often bilateral

Key Genetic Associations:

SyndromeGeneAssociated TumorOther Features
MEN-2ARETPheo/PGLMedullary thyroid Ca, parathyroid hyperplasia
MEN-2BRETPheo/PGLMedullary thyroid Ca, marfanoid habitus, mucosal GNs
NF-1NF1PheochromocytomaNeurofibromas, café-au-lait spots
von Hippel-LindauVHLPheo/PGLRCC, hemangioblastoma, pancreatic NET
Hereditary PGL-1SDHDPheo + PGLGIST
Hereditary PGL-3SDHCPGL onlyGIST
Hereditary PGL-4SDHBPheo + PGLGIST
Polycythemia-PGL syndromeEPAS1 (HIF-2α)Pheo/PGLPolycythemia
  • SDH mutations are the most frequent cause of hereditary PGL; loss-of-function mutations in SDH subunits alter cellular metabolism ("pseudohypoxia" phenotype)
  • SDHB mutation carries the highest metastatic risk (30-50%)
  • PGL types 1-4 (SDH gene syndromes) typically involve head and neck paragangliomas
  • Robbins, Cotran & Kumar Pathologic Basis of Disease, Table 24.10

5. Pathology / Morphology

Gross

  • Carotid body tumor: rarely exceeds 6 cm, arises at or envelops the carotid bifurcation
  • Red-pink to brown, well-circumscribed
  • Highly vascular - embolization targets

Microscopy

  • Characteristic Zellballen pattern: nests of round-to-oval chief cells surrounded by delicate vascular septae
  • Chief cells: neuroectodermal origin; abundant clear or granular eosinophilic cytoplasm; uniform nuclei; few mitoses
  • Sustentacular cells: spindle-shaped supporting stromal cells around nest periphery

Immunohistochemistry

MarkerCellResult
ChromograninChief cellsPositive
SynaptophysinChief cellsPositive
INSM1Chief cellsPositive
CD56Chief cellsPositive
S-100Sustentacular cellsPositive
  • Electron microscopy: well-demarcated neuroendocrine granules in paravertebral tumors (scant in non-functioning tumors)
  • Robbins
Carotid body tumor - (A) Low-power zellballen pattern (B) Chromogranin IHC positivity
Fig. 16.17 - Carotid body tumor: (A) Zellballen pattern with fibrovascular septa, (B) Chromogranin IHC (Robbins)

6. Clinical Features

By Location:

  • Glomus tympanicum: pulsatile tinnitus, conductive hearing loss, red pulsatile mass behind tympanic membrane
  • Glomus jugulare: cranial nerve palsies (CN IX-XII), pulsatile tinnitus
  • Carotid body tumor: painless lateral neck mass at carotid bifurcation ("lyre sign" on angiography); splays the carotid vessels
  • Vagal paraganglioma: high cervical mass, CN X palsy, hoarseness
  • Functional tumors: hypertension (paroxysmal or sustained), palpitations, headache, diaphoresis (due to catecholamine secretion)

General:

  • Most are painless and slow-growing
  • Symptoms mainly arise from compression of adjacent structures
  • ~1-3% of glomus jugulare tumors secrete catecholamines
  • Cummings; Scott-Brown's

7. Malignancy

  • All PGLs should be considered potentially malignant - the terms "benign" and "malignant" are no longer recommended per current classification
  • The term "metastatic paraganglioma" is used when metastatic disease is present
  • Histologic features (mitoses, pleomorphism, vascular invasion) do NOT reliably predict metastatic behavior
  • SDHB mutations = highest metastatic risk (30-50%)
  • Metastatic behavior is more common in extra-adrenal PGLs (20-40%)
  • Up to 50% of metastatic paragangliomas are ultimately fatal, mainly due to infiltrative growth
  • Carotid body tumors may metastasize to regional lymph nodes and distant sites despite benign histology
  • Robbins

8. Imaging

ModalityRole
CT (high-resolution)Best for bony involvement, temporal bone erosion
MRIBest for soft tissue extent, intracranial invasion; "salt and pepper" appearance on T2
Intra-arterial angiographyVery specific - shows enlarged feeding arteries, early intense blush, centripetally oriented arterioles; done as pre-embolization evaluation
Octreotide scanUseful pre-op to confirm diagnosis, avoid biopsy
MIBG scanFor functional tumors; catecholamine-secreting PGLs
  • Carotid artery involvement and intracranial invasion must be specifically sought
  • Angiography reveals multi-compartment blood supply with arteriovenous shunts
  • Avoid biopsy of vascular lesions - diagnose preoperatively on imaging + octreotide scan to avoid hemorrhage
  • Scott-Brown's; Cummings

9. Treatment

Surgery

  • Surgical excision is the definitive treatment for most PGLs
  • Carotid body tumors: resection with vascular control
  • Laryngeal PGLs: lateral thyrotomy or lateral pharyngotomy (open approach preferred for hemostasis); transoral CO2 laser not recommended due to hemostasis difficulty
  • Neck dissection NOT indicated for laryngeal paragangliomas (they do not metastasize to cervical nodes)
  • Pre-operative embolization is used as an adjuvant to reduce intraoperative blood loss

Radiation Therapy

  • Glomus jugulare (Fisch class C/D): stereotactic radiosurgery (SRS) is the preferred method - better cranial nerve preservation vs. surgery, similar/better local control
  • Fisch class A/B (middle ear confined): surgery preferred
  • PGLs respond to RT but incompletely; RT is mainly for growth control, not cure

Embolization

  • Pre-operative embolization due to highly vascular nature
  • Particles sized to penetrate peripheral arteries (~90 microns); multiple injections needed due to multi-compartment supply
  • Percutaneous/intra-operative direct puncture with liquid embolic agent may be used where AV shunts present
  • Embolization alone (without surgery/RT) can provide symptomatic relief and stabilize growth

Functional Tumors

  • Pre-operative alpha-adrenergic blockade (phenoxybenzamine) + beta-blockade to prevent hypertensive crisis

10. Key Concepts Summary

FeatureDetail
OriginNeural crest, neuroendocrine cells
Most commonAdrenal pheochromocytoma (80-85%)
Histology hallmarkZellballen pattern
IHC markersChromogranin, synaptophysin (chief cells); S-100 (sustentacular cells)
Most common germline mutationsSDH subunits (SDHB, SDHC, SDHD)
Highest malignancy riskSDHB mutation (30-50% metastatic)
H&N most common siteCarotid body (35%), temporal bone (50%)
Functional secretion in H&N~5% secrete catecholamines
Malignancy assessmentBased on metastasis ONLY (not histology)
Preferred imagingCT (bone) + MRI (soft tissue)
Laryngeal PGL3x more in women; supraglottic; avoid biopsy

Sources:
  • Robbins, Cotran & Kumar Pathologic Basis of Disease (Chapters 16 & 24)
  • Cummings Otolaryngology Head and Neck Surgery
  • Scott-Brown's Otorhinolaryngology Head & Neck Surgery
Recent evidence note: A 2024 systematic review (PMID 38605204) on SDHB pathogenic variant carriers confirms the high metastatic risk associated with SDHB mutations. A 2024 meta-analysis (PMID 38942141) on preoperative embolization in jugular paraganglioma surgery provides updated evidence on its role as a surgical adjuvant.

Make pdf

Reading File
Running Command

mkdir -p /home/daytona/workspace/paraganglioma && ls /home/daytona/workspace/

Writing File

~/paraganglioma/generate_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm
from reportlab.lib import colors
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus import ListFlowable, ListItem

OUTPUT = "/home/daytona/workspace/paraganglioma/Paraganglioma.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=18*mm, rightMargin=18*mm,
    topMargin=20*mm, bottomMargin=20*mm,
    title="Paraganglioma - Point Wise Notes",
    author="Orris Medical"
)

W = A4[0] - 36*mm  # usable width

# ── Colour palette ──────────────────────────────────────────────────────────
NAVY   = colors.HexColor("#1a3c5e")
TEAL   = colors.HexColor("#1d7a8a")
LTBLUE = colors.HexColor("#ddeef6")
CREAM  = colors.HexColor("#f8f4ef")
GOLD   = colors.HexColor("#c9830a")
RED    = colors.HexColor("#b03030")
LGREY  = colors.HexColor("#f0f0f0")
WHITE  = colors.white
BLACK  = colors.black

# ── Styles ───────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()

def S(name, **kw):
    s = ParagraphStyle(name, **kw)
    return s

TITLE_S = S("Title",
    fontName="Helvetica-Bold", fontSize=22, textColor=WHITE,
    alignment=TA_CENTER, spaceAfter=4, leading=28)

SUBTITLE_S = S("Subtitle",
    fontName="Helvetica", fontSize=11, textColor=colors.HexColor("#c8dff0"),
    alignment=TA_CENTER, spaceAfter=0, leading=16)

H1 = S("H1",
    fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
    backColor=NAVY, leftIndent=0, rightIndent=0,
    spaceBefore=10, spaceAfter=4, leading=18,
    borderPad=(5, 6, 5, 6))

H2 = S("H2",
    fontName="Helvetica-Bold", fontSize=11, textColor=NAVY,
    spaceBefore=6, spaceAfter=3, leading=15)

H3 = S("H3",
    fontName="Helvetica-BoldOblique", fontSize=10, textColor=TEAL,
    spaceBefore=4, spaceAfter=2, leading=13)

BODY = S("Body",
    fontName="Helvetica", fontSize=9.5, textColor=BLACK,
    leading=14, spaceAfter=3, alignment=TA_JUSTIFY)

BULLET = S("Bullet",
    fontName="Helvetica", fontSize=9.5, textColor=BLACK,
    leading=13, leftIndent=12, spaceAfter=2,
    bulletIndent=2, bulletFontName="Helvetica", bulletFontSize=9)

SUBBULLET = S("SubBullet",
    fontName="Helvetica", fontSize=9, textColor=colors.HexColor("#333333"),
    leading=12, leftIndent=24, spaceAfter=1.5,
    bulletIndent=14, bulletFontName="Helvetica", bulletFontSize=8)

NOTE = S("Note",
    fontName="Helvetica-Oblique", fontSize=8.5, textColor=colors.HexColor("#555555"),
    leading=12, spaceAfter=4, leftIndent=8)

TABLE_HEAD = S("TH",
    fontName="Helvetica-Bold", fontSize=8.5, textColor=WHITE,
    alignment=TA_CENTER, leading=11)

TABLE_CELL = S("TC",
    fontName="Helvetica", fontSize=8.5, textColor=BLACK,
    alignment=TA_LEFT, leading=11)

TABLE_CELL_C = S("TCC",
    fontName="Helvetica", fontSize=8.5, textColor=BLACK,
    alignment=TA_CENTER, leading=11)

# ── Helpers ──────────────────────────────────────────────────────────────────
def h1(txt):
    return Paragraph(f"  {txt}", H1)

def h2(txt):
    return Paragraph(txt, H2)

def h3(txt):
    return Paragraph(txt, H3)

def body(txt):
    return Paragraph(txt, BODY)

def bullet(txt, sub=False):
    style = SUBBULLET if sub else BULLET
    marker = "–" if sub else "•"
    return Paragraph(f"{marker}  {txt}", style)

def note(txt):
    return Paragraph(f"<i>{txt}</i>", NOTE)

def sp(h=4):
    return Spacer(1, h*mm)

def hr():
    return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#cccccc"), spaceAfter=3)

def make_table(headers, rows, col_widths=None, stripe=True):
    head_row = [Paragraph(h, TABLE_HEAD) for h in headers]
    data = [head_row]
    for i, row in enumerate(rows):
        data.append([Paragraph(str(c), TABLE_CELL) for c in row])
    if col_widths is None:
        col_widths = [W / len(headers)] * len(headers)
    style = [
        ("BACKGROUND",  (0,0), (-1,0), NAVY),
        ("TEXTCOLOR",   (0,0), (-1,0), WHITE),
        ("FONTNAME",    (0,0), (-1,0), "Helvetica-Bold"),
        ("FONTSIZE",    (0,0), (-1,-1), 8.5),
        ("ROWBACKGROUND",(0,1), (-1,-1), [LGREY, WHITE]),
        ("GRID",        (0,0), (-1,-1), 0.4, colors.HexColor("#bbbbbb")),
        ("VALIGN",      (0,0), (-1,-1), "MIDDLE"),
        ("TOPPADDING",  (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 5),
        ("RIGHTPADDING",(0,0),(-1,-1), 5),
    ]
    if stripe:
        for r in range(1, len(data)):
            bg = LGREY if r % 2 == 1 else WHITE
            style.append(("BACKGROUND", (0,r), (-1,r), bg))
    t = Table(data, colWidths=col_widths, repeatRows=1)
    t.setStyle(TableStyle(style))
    return t

# ── Cover banner ─────────────────────────────────────────────────────────────
def cover_banner():
    banner_data = [[
        Paragraph("<b><font size=22 color='#FFFFFF'>PARAGANGLIOMA</font></b><br/>"
                  "<font size=11 color='#c8dff0'>Comprehensive Point-Wise Notes</font>", 
                  S("btext", fontName="Helvetica-Bold", fontSize=22, textColor=WHITE,
                    alignment=TA_CENTER, leading=28, spaceAfter=0))
    ]]
    banner = Table(banner_data, colWidths=[W])
    banner.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), NAVY),
        ("TOPPADDING",  (0,0), (-1,-1), 14),
        ("BOTTOMPADDING",(0,0),(-1,-1), 14),
        ("LEFTPADDING", (0,0), (-1,-1), 10),
        ("RIGHTPADDING",(0,0),(-1,-1), 10),
    ]))
    return banner

def source_box(txt):
    d = [[Paragraph(f"<i><font size=8 color='#555555'>{txt}</font></i>",
                    S("src", fontName="Helvetica-Oblique", fontSize=8,
                      textColor=colors.HexColor("#555555"), leading=11,
                      leftIndent=0, spaceAfter=0))]]
    t = Table(d, colWidths=[W])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), CREAM),
        ("TOPPADDING",  (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING", (0,0), (-1,-1), 8),
        ("RIGHTPADDING",(0,0),(-1,-1), 8),
        ("LINEBELOW",   (0,0), (-1,-1), 0.5, TEAL),
        ("LINEABOVE",   (0,0), (-1,-1), 0.5, TEAL),
    ]))
    return t

# ═══════════════════════════════════════════════════════════════════════════
# BUILD STORY
# ═══════════════════════════════════════════════════════════════════════════
story = []

story.append(cover_banner())
story.append(sp(5))
story.append(note("Sources: Robbins & Cotran Pathologic Basis of Disease | "
                  "Cummings Otolaryngology | Scott-Brown's Otorhinolaryngology | "
                  "Campbell Walsh Wein Urology"))
story.append(sp(3))

# ── 1. Definition & Origin ───────────────────────────────────────────────────
story.append(h1("1.  Definition & Origin"))
story.append(sp(2))
story.append(bullet("Neoplasms arising from <b>neuroendocrine cells</b> (chromaffin/chief cells) of the sympathetic and parasympathetic nervous systems"))
story.append(bullet("Originate from <b>neural crest-derived</b> paraganglionic cells distributed throughout the body"))
story.append(bullet("<b>Adrenal medullary pheochromocytoma</b> = most common paraganglioma → accounts for <b>80–85%</b> of all cases"))
story.append(bullet("Extra-adrenal paragangliomas = remaining 15–20%; approximately <b>70%</b> of these occur in the <b>head and neck</b>"))
story.append(bullet("Incidence is higher in people living at <b>high altitudes</b> (hypoxic stimulus)"))
story.append(sp(2))

# ── 2. Classification ────────────────────────────────────────────────────────
story.append(h1("2.  Classification by Location"))
story.append(sp(2))

story.append(h2("A.  Paravertebral (Sympathetic) Paragangliomas"))
story.append(bullet("Arise from paravertebral sympathetic ganglia and the <b>organ of Zückerkandl</b> (near aortic bifurcation)"))
story.append(bullet("Have <b>sympathetic</b> connections"))
story.append(bullet("Stain <b>positively for chromaffin</b> → indicate catecholamine production"))
story.append(bullet("More likely to be <b>functionally active</b> (secrete catecholamines)"))
story.append(sp(2))

story.append(h2("B.  Head & Neck (Parasympathetic) Paragangliomas"))
story.append(bullet("Innervated by the <b>parasympathetic</b> system; only <b>~5%</b> produce catecholamines"))
story.append(sp(2))

hn_table = make_table(
    ["Site", "Common Name", "Key Feature"],
    [
        ["Carotid bifurcation", "Carotid body tumor", "Most common H&N paraganglioma; 35% of H&N PGLs"],
        ["Jugular bulb", "Glomus jugulare", "Cranial nerve deficits (CN IX–XII); temporal bone ~50%"],
        ["Cochlear promontory", "Glomus tympanicum", "Pulsatile tinnitus; red mass behind TM"],
        ["Vagus nerve (CN X)", "Vagal paraganglioma", "High cervical mass; hoarseness; voice change"],
        ["Aortic bodies", "Aortico-pulmonary chain", "Rare; near great vessels"],
        ["Larynx", "Laryngeal paraganglioma", "Supraglottic; 3rd most common laryngeal NET; 3x more in women"],
    ],
    col_widths=[W*0.28, W*0.28, W*0.44]
)
story.append(hn_table)
story.append(sp(2))

# ── 3. Epidemiology ──────────────────────────────────────────────────────────
story.append(h1("3.  Epidemiology"))
story.append(sp(2))
story.append(bullet("Rare, <b>slow-growing, painless masses</b>"))
story.append(bullet("Peak incidence: <b>5th and 6th decades</b> of life"))
story.append(bullet("Laryngeal paragangliomas: <b>3× more common in women</b>"))
story.append(bullet("Usually <b>solitary and sporadic</b>; ~10% are multifocal"))
story.append(bullet("Familial inheritance: <b>autosomal dominant</b>"))
story.append(bullet("~1–3% of glomus jugulare tumors secrete catecholamines"))
story.append(sp(2))

# ── 4. Genetics ──────────────────────────────────────────────────────────────
story.append(h1("4.  Genetics & Hereditary Syndromes"))
story.append(sp(2))
story.append(bullet("<b>30–40%</b> of all pheochromocytomas/paragangliomas harbor an <b>oncogenic germline mutation</b>"))
story.append(bullet("Hereditary cases: younger at presentation, more often bilateral"))
story.append(bullet("Two broad mutation classes:"))
story.append(bullet("Enhance <b>growth factor receptor pathway signaling</b> (e.g., RET, NF1)", sub=True))
story.append(bullet("Increase activity of <b>HIF-1α / HIF-2α</b> → 'pseudohypoxia' phenotype (e.g., VHL, SDH genes, EPAS1)", sub=True))
story.append(sp(2))

gen_table = make_table(
    ["Syndrome", "Gene", "Tumor", "Other Features"],
    [
        ["MEN-2A", "RET", "Pheo / PGL", "Medullary thyroid Ca, parathyroid hyperplasia"],
        ["MEN-2B", "RET", "Pheo / PGL", "Medullary thyroid Ca, marfanoid habitus, mucosal GNs"],
        ["Neurofibromatosis type 1", "NF1", "Pheochromocytoma", "Café-au-lait spots, optic nerve glioma"],
        ["von Hippel-Lindau (VHL)", "VHL", "Pheo / PGL", "RCC, hemangioblastoma, pancreatic NET"],
        ["Hereditary PGL-1", "SDHD", "Pheo + PGL", "GIST"],
        ["Hereditary PGL-3", "SDHC", "PGL only", "GIST"],
        ["Hereditary PGL-4", "SDHB", "Pheo + PGL", "GIST — HIGHEST metastatic risk (30–50%)"],
        ["Polycythemia-PGL syndrome", "EPAS1 (HIF-2α)", "Pheo / PGL", "Polycythemia"],
    ],
    col_widths=[W*0.25, W*0.12, W*0.18, W*0.45]
)
story.append(gen_table)
story.append(sp(1))

# highlight box
highlight_data = [[
    Paragraph("⚠  <b>SDHB mutation</b> carries the <b>highest metastatic risk (30–50%)</b>. "
              "SDH gene syndromes (PGL 1–4) typically involve head & neck PGLs. "
              "~1/3 of H&N paragangliomas are associated with germline mutations.",
              S("hl", fontName="Helvetica", fontSize=9, textColor=NAVY,
                leading=13, spaceAfter=0))
]]
hl_table = Table(highlight_data, colWidths=[W])
hl_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#fff3cd")),
    ("TOPPADDING",  (0,0), (-1,-1), 6),
    ("BOTTOMPADDING",(0,0),(-1,-1), 6),
    ("LEFTPADDING", (0,0), (-1,-1), 10),
    ("RIGHTPADDING",(0,0),(-1,-1), 10),
    ("LINEBELOW", (0,0), (-1,-1), 1.5, GOLD),
    ("LINEABOVE", (0,0), (-1,-1), 1.5, GOLD),
]))
story.append(hl_table)
story.append(sp(2))

# ── 5. Pathology ─────────────────────────────────────────────────────────────
story.append(h1("5.  Pathology / Morphology"))
story.append(sp(2))

story.append(h2("Gross"))
story.append(bullet("Well-circumscribed, red-pink to brown; highly vascular"))
story.append(bullet("Carotid body tumor: rarely exceeds <b>6 cm</b>; arises at or envelops the carotid bifurcation"))
story.append(bullet("Pheochromocytoma: average weight ~100 g; larger tumors can be hemorrhagic/necrotic"))
story.append(sp(2))

story.append(h2("Microscopy — Hallmark: Zellballen Pattern"))
story.append(bullet("<b>Chief cells</b>: round to oval, abundant clear/granular eosinophilic cytoplasm, uniform nuclei, scant mitoses"))
story.append(bullet("Arranged in characteristic <b>nests (Zellballen)</b> surrounded by delicate fibrovascular septa"))
story.append(bullet("<b>Sustentacular cells</b>: spindle-shaped supporting stromal cells at nest periphery"))
story.append(bullet("Little cellular pleomorphism; neuroendocrine granules on EM (more in sympathetic tumors)"))
story.append(sp(2))

story.append(h2("Immunohistochemistry"))
ihc_table = make_table(
    ["Marker", "Cell Type", "Result"],
    [
        ["Chromogranin",  "Chief cells",         "Positive ✓"],
        ["Synaptophysin", "Chief cells",         "Positive ✓"],
        ["INSM1",         "Chief cells",         "Positive ✓"],
        ["CD56",          "Chief cells",         "Positive ✓"],
        ["S-100 protein", "Sustentacular cells", "Positive ✓  (key distinguishing marker)"],
    ],
    col_widths=[W*0.30, W*0.30, W*0.40]
)
story.append(ihc_table)
story.append(sp(2))

# ── 6. Clinical Features ─────────────────────────────────────────────────────
story.append(h1("6.  Clinical Features"))
story.append(sp(2))

story.append(h2("By Location"))
clin_table = make_table(
    ["Tumor", "Key Symptoms"],
    [
        ["Glomus tympanicum",    "Pulsatile tinnitus, conductive hearing loss, red pulsatile mass behind tympanic membrane"],
        ["Glomus jugulare",      "Cranial nerve palsies (CN IX–XII), pulsatile tinnitus, hearing loss"],
        ["Carotid body tumor",   "Painless lateral neck mass at carotid bifurcation; 'lyre sign' on angiography; splays carotid vessels"],
        ["Vagal paraganglioma",  "High cervical mass, CN X palsy, hoarseness, Horner syndrome"],
        ["Laryngeal PGL",        "Submucosal supraglottic mass; avoid biopsy due to high vascularity"],
        ["Functional (any site)", "Paroxysmal hypertension, palpitations, headache, diaphoresis, sweating"],
    ],
    col_widths=[W*0.32, W*0.68]
)
story.append(clin_table)
story.append(sp(2))

story.append(h2("General"))
story.append(bullet("Most are painless and slow-growing; symptoms due to <b>compression of adjacent structures</b>"))
story.append(bullet("~10% of adrenal pheochromocytomas are <b>not associated</b> with hypertension"))
story.append(bullet("Of the 90% with hypertension: ~2/3 have <b>paroxysmal</b> hypertensive episodes"))
story.append(sp(2))

# ── 7. Malignancy ────────────────────────────────────────────────────────────
story.append(h1("7.  Malignancy"))
story.append(sp(2))

mal_data = [[
    Paragraph("⚠  <b>All paragangliomas should be considered potentially malignant.</b> "
              "The terms 'benign' and 'malignant' are no longer recommended. "
              "Use <b>'metastatic paraganglioma'</b> when metastatic disease is present.",
              S("mal", fontName="Helvetica", fontSize=9, textColor=RED,
                leading=13, spaceAfter=0))
]]
mal_table = Table(mal_data, colWidths=[W])
mal_table.setStyle(TableStyle([
    ("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#fdecea")),
    ("TOPPADDING",  (0,0), (-1,-1), 6),
    ("BOTTOMPADDING",(0,0),(-1,-1), 6),
    ("LEFTPADDING", (0,0), (-1,-1), 10),
    ("RIGHTPADDING",(0,0),(-1,-1), 10),
    ("LINEBELOW", (0,0), (-1,-1), 1.5, RED),
    ("LINEABOVE", (0,0), (-1,-1), 1.5, RED),
]))
story.append(mal_table)
story.append(sp(2))

story.append(bullet("Histologic features (<b>mitoses, pleomorphism, vascular invasion</b>) do <b>NOT</b> reliably predict metastatic behavior"))
story.append(bullet("<b>SDHB mutation</b>: highest metastatic risk — <b>30–50%</b>"))
story.append(bullet("Metastatic behavior more common in <b>extra-adrenal</b> PGLs (20–40%)"))
story.append(bullet("Up to <b>50% of metastatic PGLs are ultimately fatal</b>, mainly due to infiltrative growth"))
story.append(bullet("Malignancy is diagnosed by presence of <b>metastasis ONLY</b> (not histologic features)"))
story.append(sp(2))

# ── 8. Imaging ───────────────────────────────────────────────────────────────
story.append(h1("8.  Imaging"))
story.append(sp(2))
img_table = make_table(
    ["Modality", "Role / Finding"],
    [
        ["CT (high-resolution)", "Best for bony involvement and temporal bone erosion"],
        ["MRI", "Best for soft tissue extent and intracranial invasion; 'salt and pepper' on T2"],
        ["Intra-arterial angiography", "Very specific: enlarged feeding arteries, early intense blush, centripetal arterioles (90–600 µm); done as pre-embolization evaluation, not primary diagnosis"],
        ["Octreotide scan", "Confirms diagnosis pre-operatively; helps avoid biopsy of vascular lesions"],
        ["MIBG scan", "For functional tumors (catecholamine-secreting PGLs); adrenal pheochromocytomas"],
        ["68Ga-DOTATATE PET/CT", "High sensitivity for SDH-mutated PGLs; staging and metastatic disease"],
    ],
    col_widths=[W*0.30, W*0.70]
)
story.append(img_table)
story.append(sp(1))
story.append(bullet("<b>Avoid biopsy</b> of suspected PGLs due to high vascularity → risk of massive hemorrhage"))
story.append(bullet("Assess for <b>carotid artery involvement</b> and <b>intracranial invasion</b> on CT/MRI"))
story.append(bullet("Angiography shows <b>multi-compartment blood supply</b> with arteriovenous shunts"))
story.append(sp(2))

# ── 9. Treatment ─────────────────────────────────────────────────────────────
story.append(h1("9.  Treatment"))
story.append(sp(2))

story.append(h2("Surgery (Definitive)"))
story.append(bullet("Surgical excision with <b>vascular control</b> is the standard of care"))
story.append(bullet("Laryngeal PGLs: <b>lateral thyrotomy or lateral pharyngotomy</b> preferred (hemostasis)"))
story.append(bullet("Transoral CO₂ laser: NOT recommended due to hemostasis difficulty + increased recurrence"))
story.append(bullet("<b>Neck dissection NOT indicated</b> for laryngeal PGLs (do not metastasize to cervical nodes)"))
story.append(bullet("Incomplete resection → frequent local recurrence"))
story.append(sp(2))

story.append(h2("Radiation / Stereotactic Radiosurgery (SRS)"))
story.append(bullet("Glomus jugulare — <b>Fisch class C/D</b>: SRS is <b>preferred</b> treatment"))
story.append(bullet("Better cranial nerve preservation vs. surgery; similar or better local control"))
story.append(bullet("Fisch class A/B (confined to middle ear): <b>surgery preferred</b> (limited morbidity)"))
story.append(bullet("PGLs respond to RT but <b>incompletely</b> → mainly for growth control"))
story.append(sp(2))

story.append(h2("Pre-operative Embolization"))
story.append(bullet("Performed as <b>adjuvant to surgical resection</b> to reduce intraoperative blood loss"))
story.append(bullet("Embolic particles sized ~90 µm (periphery) to 300–600 µm (center); <b>multi-compartment supply</b> requires separate injections per feeding artery"))
story.append(bullet("Percutaneous direct puncture with liquid embolic agent used when AV shunts present"))
story.append(bullet("Embolization alone (without surgery/RT) can <b>stabilize growth and provide symptomatic relief</b>"))
story.append(sp(2))

story.append(h2("Functional Tumor Management"))
story.append(bullet("Pre-operative <b>alpha-adrenergic blockade</b> (phenoxybenzamine) → then beta-blockade"))
story.append(bullet("Prevents <b>hypertensive crisis</b> during surgery"))
story.append(sp(2))

# ── 10. Key Concepts Summary ─────────────────────────────────────────────────
story.append(h1("10. Key Concepts Summary"))
story.append(sp(2))

summary_table = make_table(
    ["Feature", "Detail"],
    [
        ["Origin", "Neural crest; neuroendocrine cells"],
        ["Most common PGL", "Adrenal pheochromocytoma (80–85%)"],
        ["H&N sites", "Temporal bone ~50%, carotid body ~35%, vagal ~12%"],
        ["Histology hallmark", "Zellballen (nests of chief cells)"],
        ["IHC - Chief cells", "Chromogranin, Synaptophysin, INSM1, CD56 — Positive"],
        ["IHC - Sustentacular cells", "S-100 — Positive"],
        ["Germline mutations", "30–40% of all PGLs; SDH subunits most common"],
        ["Highest malignancy risk", "SDHB mutation (30–50% metastatic)"],
        ["Malignancy diagnosis", "Based on metastasis ONLY — histology not reliable"],
        ["H&N catecholamine secretion", "Only ~5% of H&N PGLs"],
        ["Preferred imaging", "CT (bone) + MRI (soft tissue); avoid biopsy"],
        ["Laryngeal PGL", "3× more in women; supraglottic; Zellballen; avoid biopsy"],
        ["Glomus jugulare C/D", "SRS preferred over surgery (better CN preservation)"],
        ["Pre-op preparation", "Alpha-blocker then beta-blocker for functional tumors"],
    ],
    col_widths=[W*0.40, W*0.60]
)
story.append(summary_table)
story.append(sp(3))

# ── Footer / References ───────────────────────────────────────────────────────
story.append(hr())
story.append(note(
    "Sources: Robbins, Cotran & Kumar Pathologic Basis of Disease (Ch. 16 & 24) | "
    "Cummings Otolaryngology Head and Neck Surgery | "
    "Scott-Brown's Otorhinolaryngology Head & Neck Surgery | "
    "Campbell Walsh Wein Urology | "
    "Recent evidence: PMID 38605204 (SDHB outcomes, 2024) | PMID 38942141 (embolization meta-analysis, 2024)"
))

# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /home/daytona/workspace/paraganglioma && python generate_pdf.py

Your PDF is ready:

Paraganglioma

PDF Document · PDF

The PDF includes all 10 sections from the notes:
  1. Definition & Origin
  2. Classification by Location (with table)
  3. Epidemiology
  4. Genetics & Hereditary Syndromes (full gene table + highlighted SDHB warning)
  5. Pathology / Morphology (gross, microscopy, IHC table)
  6. Clinical Features (by-location table)
  7. Malignancy (with red alert box on current classification)
  8. Imaging (modality table)
  9. Treatment (surgery, SRS, embolization, functional tumors)
  10. Key Concepts Summary table
Formatted with a navy color scheme, highlighted warning boxes, and source citations at the footer.
This is a shared conversation. Sign in to Orris to start your own chat.