Prepare a ppt topic progressive supranuclear palsy with sub heading etiology, types, diagnostic criteria,named signs,sign in MRI and treatment
progressive supranuclear palsy etiology types diagnostic criteria MRI signs treatment 2024
https://www.ncbi.nlm.nih.gov/books/NBK526098
mkdir -p /tmp/workspace/psp-ppt && cat > /tmp/workspace/psp-ppt/build_psp.py << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.util import Inches, Pt import copy # ── Colour palette ────────────────────────────────────────────────────────── DARK_BLUE = RGBColor(0x0D, 0x2B, 0x55) # slide header bg MED_BLUE = RGBColor(0x1A, 0x5F, 0x8A) # accent / bullet icons LIGHT_BLUE = RGBColor(0xD6, 0xEA, 0xF8) # content bg band WHITE = RGBColor(0xFF, 0xFF, 0xFF) GOLD = RGBColor(0xF5, 0xA6, 0x23) DARK_TEXT = RGBColor(0x1A, 0x1A, 0x2E) LIGHT_GREY = RGBColor(0xF2, 0xF4, 0xF5) TEAL = RGBColor(0x11, 0x7A, 0x65) prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank = prs.slide_layouts[6] # ── Helper utilities ───────────────────────────────────────────────────────── def add_rect(slide, x, y, w, h, fill_rgb=None, line_rgb=None, line_width=0): from pptx.util import Pt as _Pt shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h)) fill = shape.fill if fill_rgb: fill.solid() fill.fore_color.rgb = fill_rgb else: fill.background() line = shape.line if line_rgb: line.color.rgb = line_rgb line.width = _Pt(line_width) else: line.fill.background() return shape def add_textbox(slide, x, y, w, h, text, font_size=18, bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT, italic=False, word_wrap=True, v_anchor=MSO_ANCHOR.TOP): tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = tb.text_frame tf.word_wrap = word_wrap tf.vertical_anchor = v_anchor tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = 0 p = tf.paragraphs[0] p.alignment = align run = p.add_run() run.text = text run.font.size = Pt(font_size) run.font.bold = bold run.font.italic = italic run.font.color.rgb = color run.font.name = "Calibri" return tf def add_multiline_tb(slide, x, y, w, h, lines, font_size=14, color=DARK_TEXT, bold_first=False, line_spacing=1.15, v_anchor=MSO_ANCHOR.TOP): """lines = list of (text, bold, color_override)""" from pptx.oxml.ns import qn from lxml import etree import copy tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = tb.text_frame tf.word_wrap = True tf.vertical_anchor = v_anchor tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = 0 first = True for item in lines: if isinstance(item, str): text, bold, col = item, False, color else: text = item[0] bold = item[1] if len(item) > 1 else False col = item[2] if len(item) > 2 else color if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() p.alignment = PP_ALIGN.LEFT run = p.add_run() run.text = text run.font.size = Pt(font_size) run.font.bold = bold run.font.color.rgb = col run.font.name = "Calibri" return tf def header_band(slide, title, subtitle=None): """Dark blue top bar with title and optional subtitle.""" add_rect(slide, 0, 0, 13.333, 1.3, fill_rgb=DARK_BLUE) add_rect(slide, 0, 1.3, 13.333, 0.07, fill_rgb=GOLD) # gold divider add_textbox(slide, 0.3, 0.08, 12.5, 0.75, title, font_size=34, bold=True, color=WHITE, align=PP_ALIGN.LEFT) if subtitle: add_textbox(slide, 0.3, 0.78, 12.5, 0.45, subtitle, font_size=18, bold=False, color=GOLD, align=PP_ALIGN.LEFT) def slide_number(slide, n): add_textbox(slide, 12.5, 7.1, 0.8, 0.35, str(n), font_size=12, color=RGBColor(0x99,0x99,0x99), align=PP_ALIGN.RIGHT) def bullet_list(slide, x, y, w, items, size=15, color=DARK_TEXT, indent=0.3, heading=None, heading_color=MED_BLUE): """Render a bullet list; items can be str or (str, level).""" tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(7.5-y-0.2)) tf = tb.text_frame tf.word_wrap = True tf.margin_left = tf.margin_right = tf.margin_top = tf.margin_bottom = 0 paragraphs_done = 0 if heading: p = tf.paragraphs[0] p.alignment = PP_ALIGN.LEFT r = p.add_run() r.text = heading r.font.size = Pt(size + 1) r.font.bold = True r.font.color.rgb = heading_color r.font.name = "Calibri" paragraphs_done += 1 for i, item in enumerate(items): if isinstance(item, tuple): text, level = item else: text, level = item, 0 bullet_char = "•" if level == 0 else "◦" lx = indent * (level + 1) txt = f"{' ' * level}{bullet_char} {text}" if paragraphs_done == 0 and i == 0: p = tf.paragraphs[0] else: p = tf.add_paragraph() paragraphs_done += 1 p.alignment = PP_ALIGN.LEFT r = p.add_run() r.text = txt r.font.size = Pt(size) r.font.bold = False r.font.color.rgb = color r.font.name = "Calibri" return tf # ───────────────────────────────────────────────────────────────────────────── # SLIDE 1 – TITLE # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) # Full background gradient simulation with two rects add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=DARK_BLUE) add_rect(s, 0, 3.5, 13.333, 4.0, fill_rgb=MED_BLUE) # Decorative gold bar add_rect(s, 0, 3.3, 13.333, 0.1, fill_rgb=GOLD) # White card add_rect(s, 1.0, 1.0, 11.333, 5.2, fill_rgb=WHITE) add_rect(s, 1.0, 1.0, 11.333, 0.08, fill_rgb=GOLD) # top accent add_textbox(s, 1.3, 1.2, 10.8, 1.2, "Progressive Supranuclear Palsy", font_size=40, bold=True, color=DARK_BLUE, align=PP_ALIGN.CENTER) add_textbox(s, 1.3, 2.4, 10.8, 0.5, "(PSP)", font_size=26, bold=False, color=MED_BLUE, align=PP_ALIGN.CENTER) add_rect(s, 3.5, 3.1, 6.333, 0.05, fill_rgb=GOLD) add_textbox(s, 1.3, 3.3, 10.8, 0.45, "A 4-Repeat Tauopathy | Atypical Parkinsonian Syndrome", font_size=17, color=RGBColor(0x55,0x55,0x55), align=PP_ALIGN.CENTER) add_textbox(s, 1.3, 3.85, 10.8, 0.45, "Etiology • Types • Diagnostic Criteria • Named Signs • MRI Signs • Treatment", font_size=14, color=RGBColor(0x88,0x88,0x88), align=PP_ALIGN.CENTER) add_textbox(s, 1.3, 5.5, 10.8, 0.5, "Bradley & Daroff's Neurology | Adams & Victor's Neurology | StatPearls 2025", font_size=12, color=RGBColor(0xAA,0xAA,0xAA), align=PP_ALIGN.CENTER, italic=True) slide_number(s, 1) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 2 – OVERVIEW / INTRODUCTION # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "Overview", "Progressive Supranuclear Palsy — Introduction") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) left_items = [ ("First described in 1964 by Steele, Richardson & Olszewski", 0), ("Characterised by: vertical supranuclear ophthalmoplegia, axial rigidity,\npseudобulbar palsy, mild dementia", 0), ("3rd most common cause of parkinsonism (after PD and vascular parkinsonism)", 0), ("Prevalence: 1.39 – 6.4 per 100,000 population", 0), ("Annual incidence: ~5.3 per 100,000 person-years", 0), ("Men > Women", 0), ("Onset: typically 6th–7th decade (range 45–75 yrs)", 0), ("Disease duration: ~7 years; most die from dysphagia complications", 0), ("Pathology: hyperphosphorylated 4-repeat tau (4R-tau) aggregates", 0), ("Lesion sites: basal ganglia, diencephalon, brainstem (esp. subthalamic nucleus,\nsubstantia nigra, red nucleus, globus pallidus)", 0), ] bullet_list(s, 0.5, 1.7, 12.3, left_items, size=15) slide_number(s, 2) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 3 – ETIOLOGY # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "Etiology", "Causes and Pathogenesis of PSP") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) col1 = [ ("UNKNOWN in majority of cases — sporadic disease", 0), ("Tau protein pathology (4R-tau accumulation):", 0), ("Hyperphosphorylation of tau → neurofibrillary tangles", 1), ("Globose neurofibrillary tangles (globose NFTs)", 1), ("Tufted astrocytes in motor cortex & striatum", 1), ("Genetic factors:", 0), ("H1 haplotype of MAPT gene — most consistent risk", 1), ("Familial cases: autosomal dominant / recessive pedigrees", 1), ("LRRK2, GBA, DCTN1 variants described", 1), ] col2 = [ ("Environmental / toxic factors (hypothesised):", 0), ("Exposure to cycad fruit (beta-methylamino-L-alanine)", 1), ("Guadeloupean PSP — annonacin (Annona muricata)", 1), ("Mitochondrial complex I inhibition by annonacin", 1), ("Infectious / prion-like spread:", 0), ("Tau seed propagation between neurons postulated", 1), ("Pathological hallmarks:", 0), ("Neuronal loss & gliosis in basal ganglia & brainstem", 1), ("Depigmentation of substantia nigra & locus coeruleus", 1), ("Superior cerebellar peduncle atrophy", 1), ] bullet_list(s, 0.5, 1.7, 6.2, col1, size=14) bullet_list(s, 6.9, 1.7, 6.2, col2, size=14) slide_number(s, 3) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 4 – TYPES / CLINICAL VARIANTS # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "Types / Clinical Variants", "MDS Classification (Hoglinger et al., 2017) — 9 Phenotypes") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) # Draw a 2-column table of variants variants = [ ("PSP-RS (Richardson Syndrome)", "Classic presentation — vertical gaze palsy, postural instability,\nfalls in first year, pseudobulbar palsy, axial rigidity, cognitive decline"), ("PSP-P (PSP-Parkinsonism)", "Asymmetric onset, tremor, moderate L-dopa response initially;\noverlaps with Parkinson disease; slower course (~25% of PSP)"), ("PSP-PGF (Pure Akinesia with\nGait Freezing)", "Early gait disorder, freezing, micrographia; no L-dopa response;\nminimal eye signs"), ("PSP-CBS (Corticobasal Syndrome)", "Alien limb, apraxia, cortical sensory loss; PSP pathology\nunderlying CBS presentation"), ("PSP-SL (Speech/Language\nDisorder)", "Non-fluent aphasia, speech apraxia, agrammatism; prominent\nlanguage dysfunction"), ("PSP-F (Frontal Presentation)", "Behavioural FTD-like picture: impulsivity, disinhibition,\nexecutive dysfunction"), ("PSP-PI (Postural Instability)", "Predominant balance disorder and falls; gaze abnormalities absent\nor mild"), ("PSP-OM (Ocular Motor)", "Predominant vertical gaze palsy / saccade slowing without other\nfeatures initially"), ("PSP-C (Cerebellar Ataxia)", "Cerebellar ataxia prominent; PSP pathology confirmed at autopsy"), ] y0 = 1.65 row_h = 0.58 for i, (name, desc) in enumerate(variants): bg = LIGHT_BLUE if i % 2 == 0 else WHITE add_rect(s, 0.35, y0 + i*row_h, 12.6, row_h-0.03, fill_rgb=bg) add_textbox(s, 0.45, y0 + i*row_h + 0.02, 4.0, row_h-0.05, name, font_size=12, bold=True, color=DARK_BLUE) add_textbox(s, 4.6, y0 + i*row_h + 0.02, 8.2, row_h-0.05, desc, font_size=11, color=DARK_TEXT) slide_number(s, 4) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 5 – DIAGNOSTIC CRITERIA (MDS 2017) # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "Diagnostic Criteria", "MDS-PSP Criteria 2017 (Hoglinger et al.) — 4 Functional Domains") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) # Four domain boxes domains = [ ("O\nOcular Motor\nDysfunction", MED_BLUE, "O1: Vertical supranuclear gaze palsy\nO2: Slow vertical saccades\nO3: Frequent macro square-wave jerks"), ("P\nPostural\nInstability", TEAL, "P1: Repeated unprovoked falls\nP2: Tendency to fall on pull test\nP3: >2 steps backward on pull test"), ("A\nAkinesia", DARK_BLUE, "A1: Progressive gait freezing\nA2: Parkinsonism — proximal > distal,\n symmetric, axial, L-dopa poor response\nA3: Progressive apraxia of speech /\n non-fluent aphasia"), ("C\nCognitive\nDysfunction", RGBColor(0x7D,0x3C,0x98), "C1: Frontal cognitive/behavioural\n syndrome\nC2: Corticobasal syndrome\nC3: Progressive non-fluent aphasia"), ] for i,(label, col, desc) in enumerate(domains): xb = 0.4 + i * 3.2 add_rect(s, xb, 1.65, 3.0, 1.05, fill_rgb=col) add_textbox(s, xb+0.05, 1.67, 2.9, 1.0, label, font_size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) add_textbox(s, xb, 2.75, 3.0, 2.3, desc, font_size=12, color=DARK_TEXT, word_wrap=True) add_rect(s, 0.3, 5.1, 12.7, 0.06, fill_rgb=GOLD) add_textbox(s, 0.35, 5.2, 12.6, 0.5, "Certainty Levels:", font_size=14, bold=True, color=DARK_BLUE) cert_items = [ ("Definite PSP:", True, DARK_BLUE), (" Neuropathological confirmation at autopsy", False, DARK_TEXT), ("Probable PSP:", True, DARK_BLUE), (" O1 or O2 + P1/P2/P3 OR O1/O2 + A1/A2/A3 + C1/C2/C3", False, DARK_TEXT), ("Possible PSP:", True, DARK_BLUE), (" O2 + P OR O1/O2 + A1/A3 OR O1 + C", False, DARK_TEXT), ("Suggestive of PSP:", True, DARK_BLUE), (" Single feature from any domain (O3, P1, A1, C1)", False, DARK_TEXT), ] add_multiline_tb(s, 0.35, 5.7, 12.6, 1.6, [(t, b, c) for t,b,c in cert_items], font_size=13) slide_number(s, 5) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 6 – NINDS-SPSP CRITERIA # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "NINDS-SPSP Diagnostic Criteria", "National Institute of Neurological Disorders & Stroke — Society for PSP") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) # Three columns: Probable / Possible / Exclusion cols_data = [ ("PROBABLE PSP", MED_BLUE, [ "Gradual progressive disorder", "Onset age ≥40 years", "Vertical (up or down) supranuclear gaze palsy", "Prominent postural instability with falls in first year", "No evidence of other disease that could explain features", "Duration ≥1 year", ]), ("POSSIBLE PSP", TEAL, [ "Gradual progressive disorder", "Onset age ≥40 years", "Either: vertical supranuclear gaze palsy\n OR slowed vertical saccades", "AND: postural instability or falls within 1st year", "No evidence of other disease", ]), ("EXCLUSION CRITERIA", RGBColor(0xC0,0x39,0x2B), [ "Recent history of encephalitis", "Alien limb syndrome / cortical sensory deficits", "Focal frontal or temporoparietal atrophy", "Hallucinations / delusions unrelated to dopaminergic Rx", "Cortical dementia of Alzheimer type", "Early prominent cerebellar signs", "Early autonomic failure (MSA-like)", ]), ] for i,(title,col,items) in enumerate(cols_data): xb = 0.4 + i*4.2 add_rect(s, xb, 1.65, 4.0, 0.55, fill_rgb=col) add_textbox(s, xb+0.1, 1.67, 3.8, 0.5, title, font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) bullet_list(s, xb+0.1, 2.25, 3.8, items, size=13) # Supportive features add_rect(s, 0.3, 6.3, 12.7, 0.06, fill_rgb=GOLD) add_textbox(s, 0.4, 6.38, 12.5, 0.35, "Supportive Features: symmetric akinesia/rigidity (axial > limb) • retrocollis • poor L-dopa response • early dysphagia/dysarthria • early frontal cognitive features", font_size=12, color=DARK_TEXT) slide_number(s, 6) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 7 – NAMED SIGNS OF PSP # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "Named Signs of PSP", "Eponymous and Characteristic Clinical Signs") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) named_signs = [ ("Procerus Sign", MED_BLUE, "Deep furrowing of brow with worried/surprised expression due to frontalis overactivity. Pathognomonic frowning stare."), ("Hummingbird Sign", TEAL, "Midsagittal MRI: midbrain atrophy resembles hummingbird — midbrain = head, pons = body, cerebellum = wings. (Also called 'penguin sign' or 'morning glory sign')"), ("Mickey Mouse Sign", DARK_BLUE, "Axial MRI: atrophied midbrain with rounded lateral margins resembles Mickey Mouse ears. Midbrain tegmentum atrophy with preserved cerebral peduncles."), ("Applause Sign\n(Aprause Sign)", RGBColor(0x7D,0x3C,0x98), "Patient continues clapping beyond 3 claps instructed. Reflects frontal lobe (executive) disinhibition. Correlates with severity."), ("Vertical Gaze Palsy\n(Steele-Richardson Sign)", RGBColor(0x6E,0x2F,0x0C), "Supranuclear vertical > horizontal gaze palsy; downgaze affected first. Full range restored by oculocephalic (doll's eyes) maneuver."), ("Square Wave Jerks", RGBColor(0x11,0x72,0x4A), "Involuntary horizontal saccadic eye movements interrupting fixation. Highly suggestive of PSP on eye movement examination."), ("Pimple Sign", RGBColor(0x2C,0x38,0x55), "FDG-PET: focal midbrain hypometabolism appearing as a 'pimple' on metabolic imaging."), ("Magnetic Gait", RGBColor(0x82,0x6D,0x0D), "Early gait freezing — feet appear 'glued to floor'; broad-based, knee-extended (vs flexed in PD); pivot on toes with frequent falls."), ] y0 = 1.62 row_h = 0.62 for i, (name, col, desc) in enumerate(named_signs): bg = LIGHT_BLUE if i % 2 == 0 else WHITE add_rect(s, 0.35, y0 + i*row_h, 12.6, row_h - 0.04, fill_rgb=bg) add_rect(s, 0.35, y0 + i*row_h, 0.08, row_h - 0.04, fill_rgb=col) add_textbox(s, 0.55, y0 + i*row_h + 0.03, 3.3, row_h - 0.08, name, font_size=12, bold=True, color=col) add_textbox(s, 3.9, y0 + i*row_h + 0.03, 9.0, row_h - 0.08, desc, font_size=11.5, color=DARK_TEXT) slide_number(s, 7) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 8 – MRI SIGNS # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "MRI Signs in PSP", "Neuroimaging Features") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) # Left column: structural add_rect(s, 0.4, 1.65, 5.9, 0.45, fill_rgb=MED_BLUE) add_textbox(s, 0.45, 1.67, 5.8, 0.4, "Structural MRI Features", font_size=15, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) structural = [ "Midbrain atrophy (rostral midbrain tegmentum)", "Increased T2/FLAIR signal in midbrain parenchyma", "Superior cerebellar peduncle (SCP) atrophy & T2 signal", "Atrophy of red nucleus", "Quadrigeminal plate (tectal) atrophy", "Enlargement of aqueduct & 3rd ventricle", "Pons and cerebellar atrophy (later)", "Frontal & temporal lobe atrophy (advanced disease)", "Increased T2 signal in inferior olives", "Depigmentation of substantia nigra on neuromelanin MRI", ] bullet_list(s, 0.45, 2.18, 5.8, structural, size=13) # Right column: measurement signs add_rect(s, 6.6, 1.65, 6.2, 0.45, fill_rgb=TEAL) add_textbox(s, 6.65, 1.67, 6.1, 0.4, "Measurement Indices & Named MRI Signs", font_size=15, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) mri_signs = [ ("Hummingbird Sign (Kato, 2003)", "Midsagittal T1: midbrain = bird head, pons = body; midbrain/pons ratio <0.52 predictive"), ("Mickey Mouse Sign", "Axial T2: atrophied midbrain with rounded lateral margins"), ("Morning Glory Sign", "Axial T2: midbrain shows 'morning glory' flower appearance due to tegmental atrophy"), ("MR Parkinsonism Index (MRPI)", "MRPI = (Pons area / Midbrain area) × (MCP width / SCP width); MRPI >13.55 = PSP"), ("Midbrain:Pons Ratio", "<0.52 favours PSP over PD / MSA"), ("Dual-line Midbrain PSP Index (DMPI)", "New 2024 linear marker — two midbrain measurements; high accuracy vs other parkinsonisms"), ("Hummingbird Sign on FDG-PET", "'Pimple sign' — focal midbrain hypometabolism on PET"), ("CSP Atrophy", "Superior cerebellar peduncle thinning on coronal MRI is highly specific"), ] y0 = 2.18 for i, (nm, desc) in enumerate(mri_signs): bg = LIGHT_BLUE if i % 2 == 0 else WHITE add_rect(s, 6.6, y0 + i*0.62, 6.2, 0.58, fill_rgb=bg) add_textbox(s, 6.65, y0 + i*0.62 + 0.02, 2.4, 0.56, nm, font_size=11, bold=True, color=DARK_BLUE) add_textbox(s, 9.1, y0 + i*0.62 + 0.02, 3.6, 0.56, desc, font_size=11, color=DARK_TEXT) slide_number(s, 8) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 9 – TREATMENT # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=LIGHT_GREY) header_band(s, "Treatment of PSP", "Symptomatic Management — No Disease-Modifying Therapy Available") add_rect(s, 0.3, 1.55, 12.7, 5.65, fill_rgb=WHITE) # Two columns add_rect(s, 0.4, 1.65, 5.9, 0.42, fill_rgb=MED_BLUE) add_textbox(s, 0.45, 1.67, 5.8, 0.4, "Pharmacological Treatment", font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) pharm = [ ("Dopaminergic agents:", True, DARK_BLUE), (" • Levodopa/Carbidopa — trial worthwhile despite\n poor response; ~25% PSP-P show benefit", False, DARK_TEXT), (" • Dopamine agonists — limited benefit", False, DARK_TEXT), ("Amantadine:", True, DARK_BLUE), (" • May improve bradykinesia and gait transiently", False, DARK_TEXT), ("Botulinum Toxin:", True, DARK_BLUE), (" • Blepharospasm / eyelid opening apraxia", False, DARK_TEXT), (" • Dystonic neck pain (retrocollis)", False, DARK_TEXT), (" • Drooling (salivary gland injection)", False, DARK_TEXT), ("Antidepressants:", True, DARK_BLUE), (" • SSRIs/SNRIs for depression, apathy, pseudobulbar affect", False, DARK_TEXT), ("Investigational therapies:", True, DARK_BLUE), (" • Anti-tau immunotherapy (tilavonemab, bepranemab)", False, DARK_TEXT), (" • LRRK2 inhibitors, davunetide — trials ongoing", False, DARK_TEXT), ] add_multiline_tb(s, 0.45, 2.15, 5.8, 4.9, pharm, font_size=12) add_rect(s, 6.7, 1.65, 6.0, 0.42, fill_rgb=TEAL) add_textbox(s, 6.75, 1.67, 5.9, 0.4, "Non-Pharmacological Treatment", font_size=14, bold=True, color=WHITE, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) non_pharm = [ ("Physiotherapy:", True, DARK_BLUE), (" • Gait training, balance exercises, fall prevention strategies", False, DARK_TEXT), (" • Assistive devices: rollator walker, wheelchair planning", False, DARK_TEXT), ("Speech & Language Therapy:", True, DARK_BLUE), (" • Dysarthria management, communication aids (AAC)", False, DARK_TEXT), (" • Dysphagia assessment — videofluoroscopy", False, DARK_TEXT), (" • PEG feeding when oral intake unsafe", False, DARK_TEXT), ("Occupational Therapy:", True, DARK_BLUE), (" • Adaptive equipment, home modifications", False, DARK_TEXT), ("Ophthalmologic care:", True, DARK_BLUE), (" • Prism glasses for downgaze palsy", False, DARK_TEXT), (" • Lubricating eye drops for reduced blink rate", False, DARK_TEXT), ("Palliative care:", True, DARK_BLUE), (" • Early integration recommended", False, DARK_TEXT), (" • Advance care planning, nutritional support", False, DARK_TEXT), ] add_multiline_tb(s, 6.75, 2.15, 5.9, 4.9, non_pharm, font_size=12) slide_number(s, 9) # ───────────────────────────────────────────────────────────────────────────── # SLIDE 10 – SUMMARY & KEY TAKE-AWAYS # ───────────────────────────────────────────────────────────────────────────── s = prs.slides.add_slide(blank) add_rect(s, 0, 0, 13.333, 7.5, fill_rgb=DARK_BLUE) add_rect(s, 0, 1.25, 13.333, 6.25, fill_rgb=LIGHT_GREY) add_rect(s, 0, 1.25, 13.333, 0.08, fill_rgb=GOLD) add_textbox(s, 0.4, 0.12, 12.5, 1.0, "Key Take-Aways — Progressive Supranuclear Palsy", font_size=30, bold=True, color=WHITE, align=PP_ALIGN.CENTER) add_rect(s, 0.4, 1.55, 12.5, 5.55, fill_rgb=WHITE) key_points = [ "1. PSP is a sporadic 4R-tauopathy; MAPT H1 haplotype is the major genetic risk factor.", "2. 9 clinical phenotypes recognised (MDS 2017); Richardson syndrome (PSP-RS) is classic.", "3. Core features: vertical supranuclear gaze palsy (downgaze first), postural instability, axial rigidity, pseudobulbar palsy, frontal cognition deficits.", "4. Diagnosis based on MDS-PSP 2017 criteria using 4 domains (O, P, A, C) → Probable / Possible / Suggestive.", "5. Characteristic named signs: Procerus sign (surprised stare), Applause sign, Square-wave jerks, Vertical gaze palsy.", "6. MRI hallmarks: Hummingbird sign (midbrain atrophy on sagittal), Mickey Mouse sign (axial), MRPI >13.55, SCP atrophy.", "7. No disease-modifying therapy exists; L-dopa trial warranted (PSP-P may respond); botulinum toxin for blepharospasm/retrocollis.", "8. Multidisciplinary care (PT, SLT, OT, palliative care) is the cornerstone of management; median survival ~7 years.", ] for i, pt in enumerate(key_points): bg = LIGHT_BLUE if i % 2 == 0 else WHITE add_rect(s, 0.45, 1.6 + i*0.61, 12.4, 0.57, fill_rgb=bg) add_textbox(s, 0.55, 1.62 + i*0.61, 12.2, 0.56, pt, font_size=13, color=DARK_TEXT) slide_number(s, 10) # ───────────────────────────────────────────────────────────────────────────── # SAVE # ───────────────────────────────────────────────────────────────────────────── out = "/tmp/workspace/psp-ppt/Progressive_Supranuclear_Palsy.pptx" prs.save(out) print(f"Saved: {out}") PYEOF python /tmp/workspace/psp-ppt/build_psp.py
Progressive Supranuclear Palsy
Presentation · PPTX
| # | Slide | Contents |
|---|---|---|
| 1 | Title | Title card with full subtitle and source references |
| 2 | Overview / Introduction | First description (1964 Steele-Richardson-Olszewski), prevalence, incidence, epidemiology, pathological substrate |
| 3 | Etiology | Sporadic 4R-tau pathology, MAPT H1 haplotype, environmental toxins (annonacin / cycad), prion-like tau spread, globose NFTs, tufted astrocytes |
| 4 | Types / Clinical Variants | All 9 MDS-2017 phenotypes in a colour-coded table: PSP-RS, PSP-P, PSP-PGF, PSP-CBS, PSP-SL, PSP-F, PSP-PI, PSP-OM, PSP-C |
| 5 | MDS-PSP 2017 Diagnostic Criteria | 4 functional domains (O, P, A, C) with level 1/2/3 features; Definite / Probable / Possible / Suggestive certainty tiers |
| 6 | NINDS-SPSP Criteria | Probable / Possible / Exclusion criteria in a 3-column layout |
| 7 | Named Signs | Procerus sign, Hummingbird sign, Mickey Mouse sign, Applause/Aprause sign, Vertical gaze palsy, Square-wave jerks, Pimple sign, Magnetic gait |
| 8 | MRI Signs | Structural features (midbrain, SCP, red nucleus, aqueduct) + named MRI indices: Hummingbird sign, Mickey Mouse sign, Morning Glory sign, MRPI >13.55, Midbrain:Pons ratio <0.52, new DMPI (2024) |
| 9 | Treatment | Pharmacological (L-dopa, amantadine, botulinum toxin, SSRIs, anti-tau immunotherapy trials) + Non-pharmacological (PT, SLT, OT, ophthalmology, palliative care) |
| 10 | Key Take-Aways | 8 clinical pearls summarising the whole deck |