im a radiology resident make a presentation about endometriosis imaging based on this article (no of slides around 30) add images also which they have given , please go systematically , prepare a good ppt about it ...add images from ur system if its needed

Reading File
Reading File
Reading File
Running Command

cd /tmp/workspace/attachments/614d3fe5-1924-4c2d-ad55-1c622d6a9136 && python3 -c " from docx import Document import json doc = Document('korena edno.docx') # Extract all text full_text = [] for para in doc.paragraphs: if para.text.strip(): full_text.append({'style': para.style.name, 'text': para.text.strip()}) # Also get tables tables_data = [] for i, table in enumerate(doc.tables): table_rows = [] for row in table.rows: row_data = [cell.text.strip() for cell in row.cells] table_rows.append(row_data) tables_data.append(table_rows) print('=== PARAGRAPHS ===') for p in full_text[:200]: print(f'[{p[\"style\"]}] {p[\"text\"]}') print(f'\n=== TOTAL PARAGRAPHS: {len(full_text)} ===') print(f'=== TOTAL TABLES: {len(tables_data)} ===') "

Running Command

cd /tmp/workspace/attachments/614d3fe5-1924-4c2d-ad55-1c622d6a9136 && python3 -c " from docx import Document import os doc = Document('korena edno.docx') # Check for images print('=== IMAGES IN DOCUMENT ===') for rel in doc.part.rels.values(): if 'image' in rel.reltype: print(f'Image: {rel.target_ref}, Type: {rel.target_part.content_type}') # Check inline shapes print(f'Inline shapes count: {len(doc.inline_shapes)}') for i, shape in enumerate(doc.inline_shapes): print(f' Shape {i}: type={shape.type}, width={shape.width}, height={shape.height}') "

Running Command

# Extract images from the DOCX file mkdir -p /tmp/workspace/endometriosis-ppt/images cd /tmp/workspace/attachments/614d3fe5-1924-4c2d-ad55-1c622d6a9136 python3 -c " from docx import Document import os, shutil doc = Document('korena edno.docx') output_dir = '/tmp/workspace/endometriosis-ppt/images' count = 0 for rel in doc.part.rels.values(): if 'image' in rel.reltype: img_name = os.path.basename(rel.target_ref) img_data = rel.target_part.blob out_path = os.path.join(output_dir, img_name) with open(out_path, 'wb') as f: f.write(img_data) count += 1 print(f'Extracted {count} images to {output_dir}') # List first 30 images files = sorted(os.listdir(output_dir)) for f in files[:30]: size = os.path.getsize(os.path.join(output_dir, f)) print(f' {f}: {size} bytes') "

Running Command

cat << 'PYEOF' > /tmp/workspace/endometriosis-ppt/build_ppt.py 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.oxml.ns import qn from pptx.oxml import parse_xml from lxml import etree import os from io import BytesIO from PIL import Image # ─── Color Palette ─────────────────────────────────────────────────────────── DARK_PURPLE = RGBColor(0x3B, 0x18, 0x5E) # deep purple header/title bar MID_PURPLE = RGBColor(0x6A, 0x2C, 0x91) # accent LIGHT_PURPLE = RGBColor(0xD8, 0xC2, 0xF0) # subtle bg tint TEAL = RGBColor(0x00, 0x89, 0x8A) # contrast accent GOLD = RGBColor(0xF5, 0xA6, 0x23) # highlight gold WHITE = RGBColor(0xFF, 0xFF, 0xFF) DARK_GRAY = RGBColor(0x2D, 0x2D, 0x2D) LIGHT_GRAY = RGBColor(0xF4, 0xF4, 0xF8) MED_GRAY = RGBColor(0x88, 0x88, 0x99) IMG_DIR = "/tmp/workspace/endometriosis-ppt/images" prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank = prs.slide_layouts[6] # ─── Helpers ────────────────────────────────────────────────────────────────── def rect(slide, x, y, w, h, fill=None, alpha=None): shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h)) shape.line.fill.background() if fill: shape.fill.solid() shape.fill.fore_color.rgb = fill else: shape.fill.background() return shape def txt(slide, text, x, y, w, h, size=18, bold=False, color=DARK_GRAY, align=PP_ALIGN.LEFT, italic=False, word_wrap=True, valign=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 = valign tf.margin_left = 0; tf.margin_right = 0 tf.margin_top = 0; tf.margin_bottom = 0 p = tf.paragraphs[0] p.alignment = align run = p.add_run() run.text = text run.font.size = Pt(size) run.font.bold = bold run.font.italic = italic run.font.color.rgb = color run.font.name = "Calibri" return tf def txt_multi(slide, lines, x, y, w, h, size=16, bold=False, color=DARK_GRAY, align=PP_ALIGN.LEFT, line_space=1.15): """lines: list of (text, bold_override, size_override, color_override) or plain str""" tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf = tb.text_frame tf.word_wrap = True tf.margin_left = 0; tf.margin_right = 0 tf.margin_top = Pt(2); tf.margin_bottom = 0 from pptx.util import Pt as Pt2 from pptx.oxml.ns import qn from lxml import etree first = True for line in lines: if isinstance(line, str): t, b, s, c = line, bold, size, color else: t = line[0] b = line[1] if len(line)>1 else bold s = line[2] if len(line)>2 else size c = line[3] if len(line)>3 else color if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() p.alignment = align run = p.add_run() run.text = t run.font.size = Pt(s) run.font.bold = b run.font.color.rgb = c run.font.name = "Calibri" return tf def add_img(slide, img_name, x, y, w, h=None): path = os.path.join(IMG_DIR, img_name) if not os.path.exists(path): return None try: if h: slide.shapes.add_picture(path, Inches(x), Inches(y), Inches(w), Inches(h)) else: slide.shapes.add_picture(path, Inches(x), Inches(y), width=Inches(w)) return True except Exception as e: print(f"Image error {img_name}: {e}") return None def section_header(slide, title, subtitle=None): """Full-width purple bar at top""" rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY) rect(slide, 0, 0, 13.333, 1.35, DARK_PURPLE) rect(slide, 0, 1.35, 13.333, 0.08, GOLD) txt(slide, title, 0.35, 0.18, 12.5, 1.0, size=36, bold=True, color=WHITE, align=PP_ALIGN.LEFT) if subtitle: txt(slide, subtitle, 0.35, 1.5, 12.5, 0.5, size=17, bold=False, color=MID_PURPLE, align=PP_ALIGN.LEFT) def content_header(slide, title): rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY) rect(slide, 0, 0, 13.333, 0.9, DARK_PURPLE) rect(slide, 0, 0.9, 13.333, 0.07, GOLD) txt(slide, title, 0.35, 0.12, 12.5, 0.75, size=28, bold=True, color=WHITE, align=PP_ALIGN.LEFT) def bullet_box(slide, items, x, y, w, h, size=15, color=DARK_GRAY, title=None, title_color=MID_PURPLE): rect(slide, x, y, w, h, WHITE) # subtle left bar rect(slide, x, y, 0.06, h, MID_PURPLE) yo = y + 0.15 if title: txt(slide, title, x+0.15, yo, w-0.2, 0.35, size=16, bold=True, color=title_color) yo += 0.38 tb = slide.shapes.add_textbox(Inches(x+0.15), Inches(yo), Inches(w-0.2), Inches(h - (yo-y) - 0.1)) tf = tb.text_frame tf.word_wrap = True tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0 first = True for item in items: if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() p.alignment = PP_ALIGN.LEFT run = p.add_run() run.text = "• " + item run.font.size = Pt(size) run.font.color.rgb = color run.font.name = "Calibri" return tf def img_caption(slide, caption, x, y, w): rect(slide, x, y, w, 0.32, RGBColor(0xED, 0xE7, 0xF6)) txt(slide, caption, x+0.05, y+0.03, w-0.1, 0.28, size=10, italic=True, color=DARK_GRAY) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 1 – Title slide # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) rect(slide, 0, 0, 13.333, 7.5, DARK_PURPLE) rect(slide, 0, 4.9, 13.333, 2.6, MID_PURPLE) rect(slide, 0, 4.88, 13.333, 0.08, GOLD) # decorative circles for cx, cy, cr in [(12.2,1.0,2.2),(11.0,6.5,1.4),(-0.5,6.8,1.8)]: sh = slide.shapes.add_shape(9, Inches(cx-cr/2), Inches(cy-cr/2), Inches(cr), Inches(cr)) sh.fill.solid(); sh.fill.fore_color.rgb = RGBColor(0x55,0x1A,0x8B) sh.line.fill.background() txt(slide, "COMPREHENSIVE REVIEW OF", 1.0, 1.2, 11.0, 0.7, size=20, bold=False, color=GOLD, align=PP_ALIGN.LEFT) txt(slide, "ENDOMETRIOSIS IMAGING", 1.0, 1.85, 11.0, 1.4, size=48, bold=True, color=WHITE, align=PP_ALIGN.LEFT) txt(slide, "What Radiologists Need to Know", 1.0, 3.3, 11.0, 0.65, size=24, italic=True, color=LIGHT_PURPLE, align=PP_ALIGN.LEFT) txt(slide, "Kim HJ, Lee EJ, Hong SS, et al. J Korean Soc Radiol 2025;86(5):720-745", 1.0, 5.15, 11.0, 0.45, size=14, color=WHITE, align=PP_ALIGN.LEFT) txt(slide, "Pictorial Essay | Soonchunhyang University Seoul Hospital", 1.0, 5.62, 11.0, 0.4, size=13, italic=True, color=LIGHT_PURPLE, align=PP_ALIGN.LEFT) txt(slide, "Radiology Residency – Academic Conference", 1.0, 6.15, 11.0, 0.35, size=13, color=GOLD) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 2 – Outline # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) section_header(slide, "Table of Contents") topics = [ ("1.", "Introduction & Epidemiology"), ("2.", "Pathogenesis"), ("3.", "Diagnosis & Evaluation"), ("4.", "Normal Pelvic Anatomy (MRI & TVUS)"), ("5.", "Entities of Endometriosis – Overview"), ("6.", "Endometrioma: Typical USG & MRI Findings"), ("7.", "Endometrioma: Atypical & O-RADS Classification"), ("8.", "Deep Infiltrating Endometriosis (DIE) – Overview"), ("9.", "DIE – Posterior Compartment"), ("10.", "DIE – Ureter, Appendix & Cecum"), ("11.", "Superficial Peritoneal Endometriosis"), ("12.", "Adenomyosis"), ("13.", "Adenomyosis – Atypical (Adenomyoma & Adenomyotic Cyst)"), ("14.", "Endometriosis-Associated Ovarian Carcinoma (EAOC)"), ("15.", "Seromucinous Tumors"), ("16.", "Challenging Cases: Decidualization & Scar Endometriosis"), ("17.", "Summary Flowchart"), ] col_items = [f"{n} {t}" for n,t in topics[:9]] col_items2 = [f"{n} {t}" for n,t in topics[9:]] rect(slide, 0.4, 1.55, 6.0, 5.7, WHITE) rect(slide, 6.8, 1.55, 6.1, 5.7, WHITE) rect(slide, 0.4, 1.55, 0.07, 5.7, TEAL) rect(slide, 6.8, 1.55, 0.07, 5.7, TEAL) for i, item in enumerate(col_items): num, rest = item.split(" ", 1) tb = slide.shapes.add_textbox(Inches(0.6), Inches(1.75 + i*0.58), Inches(5.8), Inches(0.52)) tf = tb.text_frame; tf.word_wrap = True tf.margin_left=0; tf.margin_right=0; tf.margin_top=0; tf.margin_bottom=0 p = tf.paragraphs[0] r1 = p.add_run(); r1.text = num+" "; r1.font.bold=True; r1.font.size=Pt(14); r1.font.color.rgb=MID_PURPLE; r1.font.name="Calibri" r2 = p.add_run(); r2.text = rest; r2.font.size=Pt(13); r2.font.color.rgb=DARK_GRAY; r2.font.name="Calibri" for i, item in enumerate(col_items2): num, rest = item.split(" ", 1) tb = slide.shapes.add_textbox(Inches(7.0), Inches(1.75 + i*0.58), Inches(5.8), Inches(0.52)) tf = tb.text_frame; tf.word_wrap = True tf.margin_left=0; tf.margin_right=0; tf.margin_top=0; tf.margin_bottom=0 p = tf.paragraphs[0] r1 = p.add_run(); r1.text = num+" "; r1.font.bold=True; r1.font.size=Pt(14); r1.font.color.rgb=MID_PURPLE; r1.font.name="Calibri" r2 = p.add_run(); r2.text = rest; r2.font.size=Pt(13); r2.font.color.rgb=DARK_GRAY; r2.font.name="Calibri" # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 3 – Introduction # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Introduction & Epidemiology") bullet_box(slide, [ "Endometriosis = presence of functional endometrial glands and stroma outside the uterine cavity and myometrium", "Predominantly affects women in reproductive years (mean age 25–29 years)", "Hormonal activity of ectopic tissue → bleeding, inflammation, adhesion", "Symptoms: pelvic pain, dysmenorrhea, infertility", "Ovaries are the most commonly affected site; implants can appear anywhere in the pelvis and beyond", "Ultrasound-based prevalence: DIE and/or ovarian endometrioma ~20%", "56–70.5% of ovarian endometriomas are accompanied by DIE", ], 0.35, 1.1, 6.8, 5.9, size=15) # Place Fig 1 / fig 23 location illustration rect(slide, 7.4, 1.1, 5.6, 5.9, WHITE) add_img(slide, "image23.png", 7.5, 1.15, 5.4) img_caption(slide, "Fig. 1 – Common locations of endometriosis including ovary, fallopian tubes, cul-de-sac, sigmoid, abdominal wall", 7.4, 6.6, 5.6) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 4 – Most common DIE locations # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Most Common DIE Locations (% Prevalence)") data = [ ("Rectocervical area", "47.7%"), ("Uterosacral ligament", "27.6%"), ("Bowel", "11.5%"), ("Adnexa", "9.2%"), ("Vagina", "1.4%"), ("Rectovaginal septum", "0.9%"), ("Abdomen", "0.9%"), ("Bladder / uterovesical fold", "0.9%"), ] rect(slide, 0.35, 1.05, 6.5, 6.2, WHITE) rect(slide, 0.35, 1.05, 0.08, 6.2, GOLD) yy = 1.25 for loc, pct in data: bar_w = float(pct.strip('%')) / 50.0 * 5.5 rect(slide, 0.6, yy, bar_w, 0.42, LIGHT_PURPLE) rect(slide, 0.6, yy, 0.04, 0.42, MID_PURPLE) txt(slide, loc, 0.7, yy+0.03, 4.0, 0.38, size=14, color=DARK_GRAY) txt(slide, pct, 5.7, yy+0.03, 0.9, 0.38, size=14, bold=True, color=MID_PURPLE) yy += 0.66 # fig 9 rect(slide, 7.1, 1.05, 5.85, 6.2, WHITE) add_img(slide, "image28.png", 7.15, 1.1, 5.75) img_caption(slide, "Fig. 9 – Common sites of DIE on pelvic MRI", 7.1, 6.7, 5.85) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 5 – Pathogenesis # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Pathogenesis of Endometriosis") theories = [ ("Metastatic Theory\n(Most Widely Accepted)", "Viable endometrial tissue refluxes via fallopian tube during retrograde menstruation and deposits on peritoneal surface or pelvic organs", MID_PURPLE), ("Metaplastic Theory", "Peritoneal cells differentiate into functional endometrial cells due to common embryonic origin from coelomic epithelium. Supported by cases in Turner syndrome, gonadal dysgenesis, uterine agenesis, and even in men", TEAL), ("Induction Theory", "Substances released by shed endometrium induce undifferentiated mesenchyme formation in endometriotic tissue", GOLD), ] for i, (title, body, col) in enumerate(theories): xo = 0.35 + i * 4.28 rect(slide, xo, 1.1, 4.0, 2.5, WHITE) rect(slide, xo, 1.1, 4.0, 0.55, col) txt(slide, title, xo+0.1, 1.15, 3.8, 0.52, size=14, bold=True, color=WHITE) txt(slide, body, xo+0.1, 1.75, 3.8, 1.8, size=13, color=DARK_GRAY, word_wrap=True) rect(slide, 0.35, 3.8, 12.65, 3.35, WHITE) rect(slide, 0.35, 3.8, 0.08, 3.35, TEAL) txt(slide, "Key Pathophysiological Drivers", 0.55, 3.88, 12.0, 0.38, size=16, bold=True, color=TEAL) drivers = [ "Endocrinological factors: ectopic tissue responds to estrogen → proliferation, hemorrhage, tumorigenesis", "Immunological dysregulation: monocytes, macrophages, T-cells, eosinophils → pro-inflammatory cytokines, chemokines, prostaglandins", "Pro-angiogenic factors: enhanced vasculogenesis and adhesion molecules", "Outcome: proliferation, vascularization, and nociception of endometriotic lesions → clinical symptoms", ] tb = slide.shapes.add_textbox(Inches(0.55), Inches(4.28), Inches(12.3), Inches(2.75)) tf = tb.text_frame; tf.word_wrap = True tf.margin_left=0; tf.margin_right=0; tf.margin_top=0; tf.margin_bottom=0 first = True for d in drivers: if first: p=tf.paragraphs[0]; first=False else: p=tf.add_paragraph() r=p.add_run(); r.text="• "+d; r.font.size=Pt(14); r.font.color.rgb=DARK_GRAY; r.font.name="Calibri" # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 6 – Diagnosis & Evaluation # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Diagnosis & Evaluation") cards = [ ("Gold Standard", "Laparoscopic biopsy with\nhistological confirmation", DARK_PURPLE, "image1.png"), ("Ultrasound (1st Line)", "Primary imaging technique for initial assessment. TVUS differentiates endometriomas from other ovarian cysts", MID_PURPLE, None), ("MRI (Most Effective)", "Best for mapping DIE; more reliable than physical exam or TVUSG. Assesses exact location, ovarian cyst features, and full extent of pelvic endometriosis", TEAL, None), ] for i, (h, b, col, img) in enumerate(cards): xo = 0.35 + i * 4.28 rect(slide, xo, 1.1, 4.0, 5.8, WHITE) rect(slide, xo, 1.1, 4.0, 0.65, col) txt(slide, h, xo+0.12, 1.18, 3.8, 0.55, size=17, bold=True, color=WHITE) txt(slide, b, xo+0.12, 1.85, 3.75, 2.0, size=14, color=DARK_GRAY, word_wrap=True) # imaging roles table rect(slide, 0.35, 4.05, 12.65, 2.8, RGBColor(0xF0,0xEC,0xFA)) txt(slide, "MRI Specific Role in Endometriosis", 0.55, 4.12, 12.0, 0.38, size=16, bold=True, color=DARK_PURPLE) mri_pts = [ "• Characterizing lesions (low T2 SI nodules in DIE; T1-bright, T2-shading in endometrioma)", "• Mapping exact locations → guides surgical planning", "• Determines depth of infiltration >5 mm for DIE", "• Evaluates complications: hydronephrosis, bowel involvement, adhesions", ] tb = slide.shapes.add_textbox(Inches(0.55), Inches(4.55), Inches(12.3), Inches(2.1)) tf = tb.text_frame; tf.word_wrap = True tf.margin_left=0; tf.margin_right=0; tf.margin_top=0; tf.margin_bottom=0 first=True for pt in mri_pts: if first: p=tf.paragraphs[0]; first=False else: p=tf.add_paragraph() r=p.add_run(); r.text=pt; r.font.size=Pt(14); r.font.color.rgb=DARK_GRAY; r.font.name="Calibri" # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 7 – Normal Anatomy – Anterior & Middle Compartments # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Normal Pelvic Anatomy – Anterior & Middle Compartments") rect(slide, 0.35, 1.05, 6.1, 6.2, WHITE) add_img(slide, "image2.jpeg", 0.4, 1.1, 5.95) img_caption(slide, "Fig. 2 – Sagittal T2WI + TVUS: anterior compartment (bladder, prevesical space, vesicouterine pouch, vesicovaginal septum)", 0.35, 6.65, 6.1) rect(slide, 6.7, 1.05, 6.25, 6.2, WHITE) add_img(slide, "image3.jpeg", 6.75, 1.1, 6.15) img_caption(slide, "Fig. 3 – TVUS + T2WI: middle compartment (cervix, vagina, uterus, ovaries, broad ligaments, mesovarium)", 6.7, 6.65, 6.25) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 8 – Normal Anatomy – Posterior Compartment # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Normal Pelvic Anatomy – Posterior Compartment") rect(slide, 0.35, 1.05, 7.5, 6.2, WHITE) add_img(slide, "image4.jpeg", 0.4, 1.1, 7.4) img_caption(slide, "Fig. 4 – Sagittal + axial T2WI + TVUS: posterior compartment (rectouterine pouch/pouch of Douglas, rectovaginal septum, uterosacral ligaments)", 0.35, 6.65, 7.5) bullet_box(slide, [ "Posterior compartment: most prevalent site for endometriosis", "Extends from posterior uterine serosa to presacral space; contains rectum", "Rectovaginal septum: thin membranous fat structure between posterior vaginal wall and anterior rectal wall", "Uterosacral ligaments: T2-hypointense, originate from lateral cervix, encircle rectum, insert on sacrum", "TVUS: rectosigmoid defined by peritoneal reflection in rectovaginal area", ], 8.1, 1.05, 5.0, 5.6, size=14) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 9 – Entities Overview # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) section_header(slide, "Entities of Endometriosis", "Classification by location and type") items = [ ("Endometrioma", "Endometriotic cysts in the ovary; 'chocolate cysts' filled with dark degenerated blood", MID_PURPLE), ("Deep Infiltrating Endometriosis (DIE)", "Penetration >5 mm below peritoneum; solid nodules, fibrotic thickening, anatomical distortion", TEAL), ("Superficial Peritoneal Endometriosis", "Ectopic implants <5 mm on visceral/parietal peritoneal surface; 'powder-burn' lesions", GOLD), ("Adenomyosis (Internal)", "'Inside-out' invasion of endometrial glands into myometrium; widens junctional zone", DARK_PURPLE), ("External Adenomyosis / DIE of Uterus", "'Outside-in' invasion into myometrium from serosal surface; preserved junctional zone", RGBColor(0xB0,0x00,0x20)), ] for i, (name, desc, col) in enumerate(items): xo = 0.4 + (i % 3) * 4.27 yo = 2.0 + (i // 3) * 2.55 rect(slide, xo, yo, 3.9, 2.2, WHITE) rect(slide, xo, yo, 3.9, 0.5, col) txt(slide, name, xo+0.1, yo+0.06, 3.7, 0.42, size=14, bold=True, color=WHITE) txt(slide, desc, xo+0.1, yo+0.58, 3.7, 1.55, size=13, color=DARK_GRAY, word_wrap=True) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 10 – Endometrioma: Typical USG # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Endometrioma – Typical Ultrasound Findings") bullet_box(slide, [ "Unilocular cyst with homogeneous low-level (ground-glass) echogenicity", "Smooth wall; no septations or solid components (classic form)", "Multilocular variants possible: ≤3 locules, smooth inner walls → O-RADS 2 (<1% malignancy risk)", "Hyperechoic peripheral mural foci: cholesterol deposits from prior hemorrhage (increases specificity)", "Endometrioma <10 cm: follow-up at 12 weeks if not surgically removed in premenopausal women", "Absence of internal vascularity helps distinguish from malignant components", ], 0.35, 1.05, 5.1, 5.8, size=14.5) rect(slide, 5.7, 1.05, 3.5, 5.8, WHITE) add_img(slide, "image5.jpeg", 5.75, 1.1, 3.4) img_caption(slide, "Fig. 5A – TVUS: 4.1 cm unilocular cyst with ground-glass echogenicity (left ovary)", 5.7, 6.3, 3.5) rect(slide, 9.45, 1.05, 3.55, 5.8, WHITE) add_img(slide, "image6.jpeg", 9.5, 1.1, 3.45) img_caption(slide, "Fig. 5B – TVUS: O-RADS 2 thin-septated cyst with homogeneous echogenicity (left ovary)", 9.45, 6.3, 3.55) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 11 – Endometrioma: Typical MRI # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Endometrioma – Typical MRI Findings") # 3-feature box features = [ ("T1 High Signal\n(Multiplicity)", "Multiple T1-hyperintense cysts = recurrent bleeding, new blood locules. Remains bright on fat-sat T1 (differentiates from fat in teratoma)", DARK_PURPLE), ("T2 Shading", "Gradual or complete signal loss on T2WI due to chronic recurrent bleeding → elevated iron and protein concentration within cyst", MID_PURPLE), ("T2 Dark Spot Sign", "Markedly hypointense foci within the cyst on T2WI = high protein/hemosiderin (chronic hemorrhage). Key to differentiate from hemorrhagic cysts", TEAL), ] for i, (f, d, c) in enumerate(features): xo = 0.35 + i * 4.22 rect(slide, xo, 1.1, 3.9, 1.8, WHITE) rect(slide, xo, 1.1, 3.9, 0.52, c) txt(slide, f, xo+0.1, 1.14, 3.7, 0.5, size=14, bold=True, color=WHITE) txt(slide, d, xo+0.1, 1.7, 3.7, 1.15, size=12.5, color=DARK_GRAY, word_wrap=True) # 4 images for Fig 6 imgs6 = [("image7.jpeg","A – T2WI"),("image8.png","B – T1WI"),("image9.jpeg","C – Fat-sat T1WI"),("image10.jpeg","D – T2 dark spot")] for i,(im,cap) in enumerate(imgs6): xo = 0.35 + i * 3.24 rect(slide, xo, 3.1, 3.05, 3.65, WHITE) add_img(slide, im, xo+0.05, 3.15, 2.95) img_caption(slide, f"Fig. 6{cap}", xo, 6.45, 3.05) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 12 – Endometrioma: Atypical & O-RADS # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Endometrioma – Atypical Findings & O-RADS Classification") bullet_box(slide, [ "Irregular inner walls, size >10 cm → 'atypical' endometrioma", "Retracted blood clot may mimic solid mural nodule / papillary projection", "Key: absent vascularity in papillary projections → benign", "Atypical or >10 cm → O-RADS 3 (1–10% malignancy risk)", "Loss of T2 shading → associated with endometriosis-associated ovarian cancer (EAOC)", "T2 shading specificity for endometrioma = 45% alone (overlaps with hemorrhagic cysts)", "Kobayashi et al.: ≥9 cm endometrioma = independent risk factor for ovarian cancer", ], 0.35, 1.05, 5.5, 4.8, size=14) # O-RADS classification table rect(slide, 0.35, 5.95, 5.5, 1.3, RGBColor(0xF0,0xEC,0xFA)) txt(slide, "O-RADS US Classification (v2022)", 0.5, 6.0, 5.2, 0.35, size=13, bold=True, color=DARK_PURPLE) txt(slide, "O-RADS 2 Typical endometrioma ≤10 cm, ≤3 locules, smooth wall, no vascularity <1% malignancy\nO-RADS 3 Atypical or >10 cm, vascular component, rapid enlargement 1–10% malignancy", 0.5, 6.38, 5.2, 0.85, size=12, color=DARK_GRAY) rect(slide, 6.1, 1.05, 3.3, 5.8, WHITE) add_img(slide, "image11.jpeg", 6.15, 1.1, 3.2) img_caption(slide, "Fig. 7 – Atypical TVUS: unilocular cyst with echogenic component (no vascularity) + MR correlation", 6.1, 6.3, 3.3) rect(slide, 9.65, 1.05, 3.35, 5.8, WHITE) add_img(slide, "image16.png", 9.7, 1.1, 3.25) img_caption(slide, "Fig. 8 – Atypical MRI: large left ovary mass, T1 high / T2 low SI, no-enhance solid component = retracted clot", 9.65, 6.3, 3.35) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 13 – DIE Overview # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) section_header(slide, "Deep Infiltrating Endometriosis (DIE)", "Penetration >5 mm below peritoneal surface") bullet_box(slide, [ "Definition: endometrial tissue penetrates peritoneum to a depth >5 mm", "Histology: endometrial glands + stroma infiltrate adjacent tissue → smooth muscle proliferation + fibrosis", "Macroscopic: solid nodules, fibromuscular thickening, anatomical distortion", "MRI appearance: low T2 SI nodules/soft-tissue thickening on T1 & T2WI", "T1-bright foci within lesion = hemorrhagic endometriotic glands", "Multifocal disease: simultaneously involves multiple pelvic sites", ], 0.4, 2.05, 6.7, 5.1, size=15) rect(slide, 7.3, 2.05, 5.6, 5.1, WHITE) add_img(slide, "image23.png", 7.35, 2.1, 5.5) img_caption(slide, "Fig. 9 – Common DIE sites on pelvic MRI: posterior cul-de-sac, torus uterinus, uterosacral ligament, rectosigmoid colon, vesicouterine pouch, bladder", 7.3, 6.7, 5.6) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 14 – DIE: Posterior Compartment – Cul-de-sac & Rectum # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "DIE – Posterior Compartment: Cul-de-sac & Rectum") bullet_box(slide, [ "Most commonly involved region in DIE", "MRI: ill-defined T2-hypointense lesions with internal T2-high foci", "Obliteration of posterior cul-de-sac: retrouterine lesions affect outer rectal wall", "'Mushroom cap' sign: focal T2-hypointense rectal wall thickening (muscularis propria hypertrophy) capped by T2-bright submucosal/mucosal edema", "Normal mucosal layer preserved in muscularis involvement", "'Kissing ovaries': bilateral ovaries displaced medially to posterior cul-de-sac due to adhesions", ], 0.35, 1.05, 5.7, 4.8, size=14) rect(slide, 0.35, 5.95, 5.7, 1.3, RGBColor(0xF0,0xEC,0xFA)) txt(slide, "Key MRI Signs to Report:", 0.5, 6.0, 5.4, 0.35, size=13, bold=True, color=DARK_PURPLE) txt(slide, "• Cul-de-sac obliteration • Mushroom cap sign • Kissing ovaries • Fat plane loss between rectum and uterus", 0.5, 6.38, 5.4, 0.85, size=12.5, color=DARK_GRAY) rect(slide, 6.25, 1.05, 6.7, 5.8, WHITE) add_img(slide, "image26.png", 6.3, 1.1, 6.6) img_caption(slide, "Fig. 10 – Axial + Sagittal T2WI: cul-de-sac obliteration, mushroom cap sign (arrowheads), endometriomas (arrows)", 6.25, 6.3, 6.7) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 15 – DIE: Kissing Ovaries & Uterosacral Ligaments # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "DIE – Kissing Ovaries & Uterosacral Ligaments") rect(slide, 0.35, 1.05, 4.1, 5.8, WHITE) add_img(slide, "image29.png", 0.4, 1.1, 4.0) img_caption(slide, "Fig. 11A – Axial T2WI: T2-hypointense lesion at torus uterinus with adhesions to rectum, posterior pelvic peritoneum and both adnexa", 0.35, 6.4, 4.1) rect(slide, 4.65, 1.05, 4.0, 5.8, WHITE) add_img(slide, "image30.png", 4.7, 1.1, 3.9) img_caption(slide, "Fig. 11B – Axial T1WI: T1-hyperintense cysts in both ovaries (endometriomas)", 4.65, 6.4, 4.0) bullet_box(slide, [ "Kissing ovaries: bilateral ovaries displaced medially, adherent to torus uterinus / posterior cul-de-sac", "Congregation of bilateral ovaries and rectum at torus uterinus = significant adhesions", "Retrocervical space: intraperitoneal space between cervix and midrectum", "Rectovaginal space (extraperitoneal): posterior vaginal fornix and rectovaginal septum", "DIE here → fat obliteration + fibrous thickening of torus uterinus and uterosacral ligaments", "MRI: indistinct T2-dark signal intensity lesions, internal T2-high foci in posterior cul-de-sac", ], 8.9, 1.05, 4.1, 5.8, size=13.5) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 16 – DIE: Vagina & Cervix # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "DIE – Cervix, Vagina & Rectovaginal Pouch") rect(slide, 0.35, 1.05, 6.5, 5.8, WHITE) add_img(slide, "image33.png", 0.4, 1.1, 6.4) img_caption(slide, "Fig. 12 – Axial + sagittal T2WI: T2-dark lesion involving rectovaginal pouch, posterior cervix and vaginal wall with internal T1-high foci (fat-sat). Adhesions to rectum with posterior cul-de-sac obliteration", 0.35, 6.4, 6.5) bullet_box(slide, [ "Involves posterior vaginal fornix and rectovaginal septum", "MRI: T2-dark signal intensity lesion with T1-bright (fat-sat) internal foci in posterior fornix / rectovaginal wall", "Associated with fibrous adhesions to rectum and obliteration of posterior cul-de-sac", "Clinical symptoms: deep dyspareunia, dyschezia, cyclic rectal bleeding", "Must be differentiated from primary vaginal / cervical pathology", ], 7.1, 1.05, 5.85, 5.8, size=14.5) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 17 – DIE: Ureter # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "DIE – Ureteral Involvement") bullet_box(slide, [ "Urinary tract involvement: 1–6.4% of endometriosis patients", "Left-sided predominance: sigmoid colon impedes peritoneal flow", "Distal ureter most commonly affected", "", "Extrinsic type (more common):", " - Periureteral infiltration from adjacent pelvic structures", " - Fat plane obliteration between ureter and endometrioma/DIE plaque", " - CT/MRI: indistinct soft tissue / T2-hypointense fibrotic implant surrounding ureter", "", "Intrinsic type:", " - Endometriotic infiltration of muscularis and lamina propria", " - Luminal narrowing → proximal dilatation → hydronephroureterosis", " - >50% intrinsic involvement when complete periureteral encasement present", ], 0.35, 1.05, 5.9, 6.2, size=13.5) rect(slide, 6.5, 1.05, 6.5, 6.2, WHITE) add_img(slide, "image35.png", 6.55, 1.1, 6.4) img_caption(slide, "Fig. 13 – Enhanced CT: soft tissue lesion (asterisk) infiltrating right distal ureter → right hydronephroureterosis (arrow). Confirmed DIE on pathology", 6.5, 6.7, 6.5) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 18 – DIE: Appendix & Cecum # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "DIE – Appendix & Cecum") bullet_box(slide, [ "Appendiceal endometriosis: uncommon; 5–6% of bowel endometriosis cases", "Presents as acute/chronic appendicitis symptoms or cyclic right lower quadrant pain", "Cecal involvement: rare, <5% of bowel cases", "Imaging: T2-hypointense thickening of appendix or cecal wall", "Cecal endometriosis may mimic tumor: heterogeneous internal density + moderate enhancement on CT", "MRI: T2 intermediate to low SI mass ± T2-hyperintense foci", "Diagnosis can be clinically challenging; histopathology required for confirmation", ], 0.35, 1.05, 5.5, 5.6, size=14.5) rect(slide, 6.15, 1.05, 6.8, 5.6, WHITE) add_img(slide, "image36.jpeg", 6.2, 1.1, 6.7) img_caption(slide, "Fig. 14 – CT (coronal + axial) + MRI: lobulated heterogeneous mass at cecum (arrow) + posterior myometrial lesion extending to cul-de-sac. Pathology: endometriosis of appendix and cecum", 6.15, 6.2, 6.8) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 19 – Superficial Peritoneal Endometriosis # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Superficial Peritoneal Endometriosis") bullet_box(slide, [ "Invasion of ectopic endometrial tissue into visceral or parietal pelvic peritoneal surface", "Typically measures <5 mm (below MRI resolution in most cases)", "Laparoscopic appearance: 'powder-burn' or 'gunshot' lesions – black, dark brown, or blue", "Subtle lesions: red or clear; small hemorrhagic cysts; white fibrous areas", "MRI: often invisible; T1-hyperintense foci along peritoneal surface may be the only indicator", "T2WI: thin hypointense line along posterior pelvic peritoneum", "Frequently under-detected on cross-sectional imaging compared to laparoscopy", ], 0.35, 1.05, 5.7, 5.6, size=14.5) rect(slide, 6.25, 1.05, 3.4, 5.6, WHITE) add_img(slide, "image41.png", 6.3, 1.1, 3.3) img_caption(slide, "Fig. 15A – Sagittal T2WI: thin hypointense line along posterior pelvic peritoneum (arrows); anterior endometrioma (asterisk)", 6.25, 6.2, 3.4) rect(slide, 9.85, 1.05, 3.15, 5.6, WHITE) add_img(slide, "image42.png", 9.9, 1.1, 3.05) img_caption(slide, "Fig. 15B – Axial fat-sat T1WI: punctate/linear T1-hyperintense peritoneal implants (arrows)", 9.85, 6.2, 3.15) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 20 – Adenomyosis: Overview & MRI # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Adenomyosis – Definition & Imaging Findings") bullet_box(slide, [ "Definition: ectopic endometrial glands and stroma within myometrium → junctional zone thickening + smooth muscle hyperplasia", "Histopathology: glands >1/4 of myometrium depth", "'Inside-out' invasion (contrast with DIE: 'outside-in')", "TVUS: poorly defined hypoechoic heterogeneous areas; asymmetrically/diffusely enlarged uterus", "MRI hallmarks:", " – Junctional zone thickness >12 mm (normal 2–8 mm)", " – Indistinct T2-low SI myometrial thickening", " – T2-bright foci = ectopic endometrial tissue + cystic glandular dilatation", " – T1-bright foci = hemorrhagic foci", " – Tortuous penetrating vessels (distinguishes from leiomyoma)", ], 0.35, 1.05, 5.9, 6.2, size=13.5) rect(slide, 6.5, 1.05, 6.5, 6.2, WHITE) add_img(slide, "image43.jpeg", 6.55, 1.1, 6.4) img_caption(slide, "Fig. 16 – Sagittal + axial T2WI (38-yr female, menorrhagia): diffuse uterine enlargement, widened junctional zone with T2-high foci (asterisks) – typical adenomyosis", 6.5, 6.7, 6.5) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 21 – Adenomyosis vs DIE # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Adenomyosis vs Deep Infiltrating Endometriosis – Key Differences") headers = ["Feature", "Adenomyosis", "DIE of Uterus"] rows = [ ["Invasion direction", "'Inside-out' (endometrium → myometrium)", "'Outside-in' (serosa → myometrium)"], ["Junctional zone", "Thickened / involved", "Preserved / spared"], ["US appearance", "Echogenic striations/nodules from endometrium into inner myometrium", "Outer serosal involvement; spares endometrial-myometrial interface"], ["MRI T2 signal", "T2-low SI with T2-bright foci within thickened JZ", "T2-low nodule in outer myometrium; JZ intact"], ["Associated findings", "Tortuous penetrating vessels", "Cul-de-sac obliteration, adhesions, endometriomas"], ] col_w = [3.2, 4.5, 4.5] col_x = [0.35, 3.6, 8.15] row_h = 0.82 start_y = 1.1 for ci, (hdr, cw, cx) in enumerate(zip(headers, col_w, col_x)): rect(slide, cx, start_y, cw, 0.5, DARK_PURPLE if ci==0 else MID_PURPLE if ci==1 else TEAL) txt(slide, hdr, cx+0.08, start_y+0.06, cw-0.12, 0.42, size=14, bold=True, color=WHITE) for ri, row in enumerate(rows): y = start_y + 0.52 + ri * row_h bg = LIGHT_GRAY if ri%2==0 else WHITE for ci, (val, cw, cx) in enumerate(zip(row, col_w, col_x)): rect(slide, cx, y, cw, row_h-0.04, bg) txt(slide, val, cx+0.08, y+0.05, cw-0.12, row_h-0.1, size=12.5, color=DARK_GRAY, word_wrap=True) # Fig 17 rect(slide, 0.35, 5.62, 12.6, 1.65, WHITE) add_img(slide, "image45.jpeg", 0.4, 5.67, 12.5, 1.55) img_caption(slide, "Fig. 17 – Sagittal T2WI comparison: adenomyosis (left, thickened JZ with T2-high foci) vs DIE (right, outer myometrial lesion with preserved JZ + endometrioma)", 0.35, 7.2, 12.6) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 22 – Adenomyoma # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Atypical Adenomyosis – Adenomyoma (Focal Adenomyosis)") bullet_box(slide, [ "Localized form of adenomyosis: clusters of adenomyotic glands, may form mass-like lesion", "", "MRI differences from Leiomyoma:", " – Adenomyoma: T2 low SI + T2-high foci (ectopic endometrium)", " – Leiomyoma: variable T2 SI; well-defined with pseudocapsule", " – Adenomyoma: ill-defined margins; interdigitates with adjacent smooth muscle", " – Adenomyoma: oval shape aligned with long axis of uterus", " – Leiomyoma: typically circular; compresses surrounding myometrium", "Both may contain internal cystic/hemorrhagic components", ], 0.35, 1.05, 5.9, 6.2, size=14) rect(slide, 6.5, 1.05, 6.5, 6.2, WHITE) add_img(slide, "image47.jpeg", 6.55, 1.1, 6.4) img_caption(slide, "Fig. 18 – TVUS + MRI (31-yr female): >6 cm subserosal mass (left uterine fundus) with T2-hypointense solid component + fluid-fluid level (T1-high) – confirmed adenomyoma", 6.5, 6.7, 6.5) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 23 – Adenomyotic Cyst # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Atypical Adenomyosis – Adenomyotic Cyst") bullet_box(slide, [ "Rare manifestation: extensive menstrual bleeding into ectopic endometrium → large hemorrhagic cyst", "Cyst content: T1-high AND T2-high signal (hemorrhagic fluid)", "Cyst wall: T2-low SI (reactive myometrial hypertrophy) surrounding the cyst", "Fluid-fluid level may be present", "Fat suppression: hemorrhagic content retains high signal (differentiates from fat)", "'Miniature uterus' appearance: thick wall develops two zones", " – Inner zone: T2-low SI (analogous to junctional zone)", " – Outer zone: T2-bright SI (analogous to outer myometrium)", "No communication with uterine cavity (histopathological hallmark)", ], 0.35, 1.05, 5.9, 6.2, size=14) rect(slide, 6.5, 1.05, 6.5, 6.2, WHITE) add_img(slide, "image49.png", 6.55, 1.1, 6.4) img_caption(slide, "Fig. 19 – Sagittal + axial T2WI + axial T1WI: >7 cm adenomyotic cyst in anterior myometrium with fluid-fluid level (T1-high) and thick T2-low SI wall; background diffuse adenomyosis", 6.5, 6.7, 6.5) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 24 – EAOC: Risk & Features # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) section_header(slide, "Endometriosis-Associated Ovarian Carcinoma (EAOC)", "Malignant transformation of endometriosis") risk_factors = [ "Long-standing endometriosis", "Endometriotic cysts ≥9–10 cm in diameter", "Rapid enlargement of endometriotic cyst", "Postmenopausal status", "Early recurrence after treatment", "Loss of T2 shading", "Enhancing mural nodule in endometriotic cyst", ] bullet_box(slide, risk_factors, 0.35, 2.1, 5.5, 4.8, size=15, title="Risk Factors & Red Flags", title_color=RGBColor(0xB0,0x00,0x20)) histo = [ ("Clear Cell Carcinoma", "50–74% associated with endometriosis; most common EAOC type"), ("Endometrioid Carcinoma", "2nd most common; arises from endometriosis in 85–90% of cases"), ("Concurrent Pathology", "20–30% of endometrioid carcinomas have concurrent endometrial hyperplasia/carcinoma"), ] xo = 6.1 for i, (h, d) in enumerate(histo): rect(slide, xo, 2.1 + i*1.6, 6.8, 1.45, WHITE) rect(slide, xo, 2.1 + i*1.6, 6.8, 0.42, RGBColor(0xB0,0x00,0x20)) txt(slide, h, xo+0.1, 2.13 + i*1.6, 6.6, 0.38, size=14, bold=True, color=WHITE) txt(slide, d, xo+0.1, 2.58 + i*1.6, 6.6, 0.95, size=13.5, color=DARK_GRAY, word_wrap=True) txt(slide, "Most sensitive MRI sign: ENHANCING MURAL NODULE in endometriotic cyst", 0.35, 6.9, 12.6, 0.4, size=15, bold=True, color=RGBColor(0xB0,0x00,0x20)) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 25 – EAOC: Imaging Examples # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "EAOC – Imaging Examples") rect(slide, 0.35, 1.05, 6.0, 5.8, WHITE) add_img(slide, "image52.png", 0.4, 1.1, 5.9) img_caption(slide, "Fig. 20 – TVUS + MRI (35-yr female): 9.5 cm multilocular cystic mass with enhancing papillary solid component + diffusion restriction → clear cell carcinoma from pre-existing endometrioma", 0.35, 6.4, 6.0) rect(slide, 6.6, 1.05, 6.4, 5.8, WHITE) add_img(slide, "image57.png", 6.65, 1.1, 6.3) img_caption(slide, "Fig. 21 – MRI (49-yr female): bilateral ovarian cystic masses with thick irregular septa, eccentric solid nodules + endometrial mass → synchronous endometrial cancer and endometrioid carcinoma", 6.6, 6.4, 6.4) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 26 – Seromucinous Tumors # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Seromucinous Tumors & Endometriosis") bullet_box(slide, [ "Introduced in 2014 WHO classification as an endometriosis-associated ovarian epithelial tumor", "Seromucinous borderline tumor (SMBT): most common form; 30–70% associated with endometriosis", "Arise from atypical endometriotic cysts undergoing mucinous differentiation", "MRI: often multiloculated; characteristic 'nodule-in-cyst' appearance", "Papillary projections show homogeneous enhancement on contrast T1WI", "Seromucinous adenofibroma: rare benign neoplasm; fibromatous stromal component", " – T2-high papillary projections with homogeneous enhancement", " – Can coexist with DIE (adhesion bands between adnexa and uterus/rectum)", ], 0.35, 1.05, 5.6, 5.8, size=14) rect(slide, 6.15, 1.05, 3.3, 5.8, WHITE) add_img(slide, "image60.png", 6.2, 1.1, 3.2) img_caption(slide, "Fig. 22 – MRI: cystic mass with intermediate SI content + T2-high papillary projections (arrows) with homogeneous enhancement → SMBT", 6.15, 6.4, 3.3) rect(slide, 9.65, 1.05, 3.35, 5.8, WHITE) add_img(slide, "image63.png", 9.7, 1.1, 3.25) img_caption(slide, "Fig. 23 – MRI: multilocular cystic mass with enhancing solid component + diffusion restriction + DIE in posterior uterus → seromucinous adenofibroma + endometriosis", 9.65, 6.4, 3.35) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 27 – Decidualization of Endometriosis # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Challenging Case – Decidualization of Endometriosis") bullet_box(slide, [ "Decidualization: hypertrophy of endometrial stromal cells in response to progesterone during pregnancy", "Occurs in ectopic endometrial tissue in pregnant women with endometriosis (esp. ovarian endometriomas)", "Mimics ovarian malignancy: mural nodules ± vascularity on US/MRI", "TEMPORARY – resolves on follow-up imaging", "", "MRI features favoring decidualization (vs. malignancy):", " – Solid component height <11 mm", " – T2-HIGH SI solid component (decidualized tissue)", " – DWI high SI due to T2 shine-through (ADC higher than ovarian cancer)", " – T1-high intracystic fluid (confirms hemorrhagic content)", "", "Serious bleeding complication: vascular invasion/rupture of decidualized implants", "DIE decidualization can cause post-partum hemorrhage (esp. rectovaginal)", ], 0.35, 1.05, 6.4, 6.2, size=13) rect(slide, 7.0, 1.05, 5.95, 6.2, WHITE) add_img(slide, "image66.png", 7.05, 1.1, 5.85) img_caption(slide, "Fig. 24 – Sagittal + axial T2WI + T1WI (36-yr pregnant female): septated cystic mass with T2-hypointense content + thick irregular T2-isointense solid component (placenta-like signal) = decidualized endometrioma", 7.0, 6.7, 5.95) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 28 – Decidualized DIE & Post-partum Bleeding # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Decidualized DIE – Post-partum Hemorrhage (Rare Case)") rect(slide, 0.35, 1.05, 6.3, 5.8, WHITE) add_img(slide, "image68.png", 0.4, 1.1, 6.2) img_caption(slide, "Fig. 25 – CT (post-caesarean): soft tissue lesion in rectovaginal pouch + active bleeding from posterior vaginal wall. Post-UAE follow-up: TVUS (hypervascular lesion) and MRI (T2-dark DIE lesion with adhesions to rectum). Biopsy: DIE with decidual reaction", 0.35, 6.4, 6.3) bullet_box(slide, [ "33-yr female with vaginal bleeding after cesarean section", "CT: soft tissue lesion with indistinct margins in rectovaginal pouch with active bleeding", "Biopsy confirmed DIE with decidual reaction", "Treated with uterine artery embolization (UAE)", "Post-UAE TVUS: hypervascular lesion in rectovaginal pouch", "2 months later MRI: persistent T2-dark DIE in rectovaginal pouch/posterior vaginal wall", "", "Teaching Point: Always consider decidualized DIE in post-partum bleeding when mass is present at scar/rectovaginal site", ], 6.85, 1.05, 6.1, 5.8, size=14) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 29 – Scar Endometriosis # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Scar Endometriosis – Abdominal & Pelvic Wall") bullet_box(slide, [ "Uncommon: ectopic endometrial implants in abdominal/pelvic wall scars", "Typically following cesarean section or hysterectomy", "Mechanism 1: iatrogenic implantation of endometrial cells during surgery", "Mechanism 2: differentiation of primitive pluripotent mesenchymal cells", "Clinical: palpable mass at previous incision site ± cyclic pain with menses", "", "US findings:", " – Heterogeneous hypoechoic mass with echogenic strands (fibrosis)", " – Internal and peripheral vascularity on Doppler", " – Located in subcutaneous fat layer ± rectus abdominis muscle", "", "MRI findings:", " – Hypointense nodular lesion on T2WI", " – Hyperintense foci (hemorrhagic glands)", " – Associated with abdominal/pelvic wall scar", " – Enhancement on contrast T1WI", ], 0.35, 1.05, 5.6, 6.2, size=13) rect(slide, 6.15, 1.05, 3.3, 6.2, WHITE) add_img(slide, "image74.jpeg", 6.2, 1.1, 3.2) img_caption(slide, "Fig. 26 – Grayscale + Doppler USG: irregularly shaped hypoechoic mass with calcifications + vascularity near cesarean scar → scar endometriosis", 6.15, 6.7, 3.3) rect(slide, 9.65, 1.05, 3.35, 6.2, WHITE) add_img(slide, "image77.png", 9.7, 1.1, 3.25) img_caption(slide, "Fig. 27 – Sagittal + axial T2WI + CE T1WI: adenomyosis + T2-low nodule with T2-high foci and enhancement in right lower abdominal wall at cesarean scar → scar endometriosis", 9.65, 6.7, 3.35) # ══════════════════════════════════════════════════════════════════════════════ # SLIDE 30 – Summary Flowchart + Key Takeaways # ══════════════════════════════════════════════════════════════════════════════ slide = prs.slides.add_slide(blank) content_header(slide, "Summary – Endometriosis Imaging Flowchart & Key Takeaways") rect(slide, 0.35, 1.05, 7.6, 5.8, WHITE) add_img(slide, "image79.png", 0.4, 1.1, 7.5) img_caption(slide, "Fig. 28 – Schematic overview of endometriosis manifestations by location and atypical presentation", 0.35, 6.4, 7.6) key = [ ("USG", "First-line; ground-glass cyst = endometrioma; assess for vascularity and O-RADS risk"), ("MRI", "Gold-standard for DIE mapping; T1-high + T2-shading + T2-dark-spot for endometrioma"), ("DIE", "Low T2 SI nodule; mushroom cap sign; kissing ovaries; obliterated cul-de-sac"), ("EAOC", "Enhancing nodule + loss of T2 shading + large size = malignancy red flags"), ("Atypical", "Always consider decidualization in pregnancy; scar endometriosis after surgery"), ("Adenomyosis", "JZ >12 mm, T2-low + T2-high foci, tortuous vessels; distinguish from DIE & leiomyoma"), ] yy = 1.1 for k,v in key: rect(slide, 8.2, yy, 4.8, 0.85, WHITE) rect(slide, 8.2, yy, 0.08, 0.85, MID_PURPLE) txt(slide, k, 8.38, yy+0.06, 1.1, 0.35, size=12, bold=True, color=MID_PURPLE) txt(slide, v, 9.52, yy+0.06, 3.4, 0.75, size=11.5, color=DARK_GRAY, word_wrap=True) yy += 0.92 txt(slide, "Kim HJ et al., J Korean Soc Radiol 2025;86(5):720-745 | doi: 10.3348/jksr.2024.0104", 0.35, 7.18, 12.6, 0.28, size=10, italic=True, color=MED_GRAY) # ────────────────────────────────────────────────────────────────────────────── out = "/tmp/workspace/endometriosis-ppt/Endometriosis_Imaging_Radiology.pptx" prs.save(out) print(f"Saved: {out}") print(f"Slides: {len(prs.slides)}") PYEOF python3 /tmp/workspace/endometriosis-ppt/build_ppt.py

Running Command

ls -lh /tmp/workspace/endometriosis-ppt/Endometriosis_Imaging_Radiology.pptx && python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/endometriosis-ppt/Endometriosis_Imaging_Radiology.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.strip()[:60] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] imgs = [s for s in slide.shapes if s.shape_type == 13] print(f' Slide {i:2d}: {texts[0] if texts else \"(no text)\"} | {len(imgs)} image(s)') "

Your 30-slide presentation is ready for download:

Endometriosis Imaging Radiology

Presentation · PPTX


Here's what's inside (slide-by-slide breakdown):
#Slide TitleContent
1Title SlideStyled cover – journal citation, authors, institution
2Table of ContentsAll 17 topics in two columns
3Introduction & EpidemiologyDefinition, mean age 25-29 yrs, prevalence, DIE stats + Fig 1 (anatomy diagram)
4Most Common DIE LocationsVisual bar chart of 8 sites by % + Fig 9 (MRI locations map)
5Pathogenesis3 theories (Metastatic, Metaplastic, Induction) + key pathophysiological drivers
6Diagnosis & EvaluationGold standard, USG (1st line), MRI roles – specific MRI features listed
7Normal Anatomy: Anterior & MiddleFigs 2 & 3 – TVUS + sagittal T2WI
8Normal Anatomy: PosteriorFig 4 – TVUS + T2WI with bullet points on compartment contents
9Entities Overview5 entity cards: Endometrioma, DIE, Superficial, Adenomyosis (internal), DIE of uterus
10Endometrioma – Typical USGGround-glass echogenicity, O-RADS 2 criteria, mural foci + Figs 5A & 5B
11Endometrioma – Typical MRIT1-high multiplicity, T2-shading, T2-dark-spot + all 4 panels of Fig 6
12Endometrioma – Atypical & O-RADSAtypical features, O-RADS 3, EAOC risk indicators + Figs 7 & 8
13DIE – OverviewDefinition >5 mm, fibrosis, MRI signal characteristics + Fig 9
14DIE – Cul-de-sac & RectumMushroom cap sign, cul-de-sac obliteration, kissing ovaries + Fig 10
15DIE – Kissing Ovaries & USLTorus uterinus, retrocervical space, rectovaginal septum + Figs 11A-B
16DIE – Cervix, Vagina & Rectovaginal PouchT2-dark lesion anatomy, clinical symptoms + Fig 12
17DIE – UreterExtrinsic vs intrinsic, hydronephrosis, left-sided predominance + Fig 13 CT
18DIE – Appendix & CecumTumor-like cecal lesion, cyclic RLQ pain + Fig 14
19Superficial Peritoneal EndometriosisPowder-burn lesions, T1-peritoneal foci, MRI limitations + Figs 15A-B
20Adenomyosis – Overview & MRIJZ >12 mm, T2-low + T2-bright foci, tortuous vessels + Fig 16
21Adenomyosis vs DIEFull comparison table + Fig 17
22AdenomyomaFocal adenomyosis vs leiomyoma differentiation + Fig 18
23Adenomyotic Cyst'Miniature uterus' appearance, fluid-fluid level + Fig 19
24EAOC – Risk & Histology7 red flags, clear cell vs endometrioid types, prevalence stats
25EAOC – Imaging ExamplesFigs 20 & 21 – enhancing nodule, diffusion restriction, synchronous malignancy
26Seromucinous TumorsSMBT, adenofibroma, nodule-in-cyst + Figs 22 & 23
27Decidualization of EndometriosisMimics malignancy, MRI distinguishing features, ADC + Fig 24
28Decidualized DIE – Post-partum BleedingRare case, UAE treatment + Fig 25
29Scar EndometriosisTwo mechanisms, cyclic pain at scar, US + MRI features + Figs 26 & 27
30Summary Flowchart & Key TakeawaysFig 28 flowchart + 6-point rapid review by modality/entity
Design: Dark purple / gold / teal color scheme with left accent bars, image-text side-by-side layouts, and figure captions directly beneath each image - presentation-ready for residency conference use.

Find recent clinical guidelines on endometriosis imaging protocols and reporting

Searching PubMed

endometriosis MRI imaging protocol guidelines

Searching PubMed

endometriosis ultrasound reporting standardized protocol

Searching the Web

endometriosis MRI imaging protocol guidelines 2024 2025 ACR ESUR ESGE radiology reporting

Reading Article

PMID: 40425755

Reading Article

PMID: 39772972

Reading Article

PMID: 41507077

Reading Article

PMID: 38110143

Reading Web Page

https://www.endobreizh.com/wp-content/uploads/2025/09/ESUR-c…

Reading Article

PMID: 40632542

Reading Article

PMID: 40576666

Searching the Web

ACR Radiology 2024 endometriosis imaging interpretation reporting VanBuren state-of-the-art

Reading Article

PMID: 39488350

Reading Web Page

https://www.endobreizh.com/wp-content/uploads/2025/09/ESUR-c…

I now have comprehensive data from all major recent guidelines. Here is the full synthesis:

Recent Clinical Guidelines on Endometriosis Imaging Protocols & Reporting

1. ESUR 2025 Consensus – MRI Protocol, Lexicon & Compartment Analysis

The most comprehensive update to date
Reference: Thomassin-Naggara I, Dolciami M, Chamie LP, et al. "ESUR consensus MRI for endometriosis: protocol, lexicon, and compartment-based analysis." European Radiology 2025. PMID: 40425755 | doi: 10.1007/s00330-025-11611-3
Method: 20-expert ESUR Female Pelvic Imaging Working Group; formal Delphi process; updates the previous 2017 ESUR guidelines.

Patient Preparation (Recommended)

  • Fasting prior to exam
  • Antiperistaltic agents (e.g., hyoscine butylbromide/glucagon) to reduce bowel motion artifact
  • Moderate bladder filling (partially full - not empty, not overfull)
  • Bowel preparation (rectal/vaginal gel opacification in select centers)

Mandatory MRI Sequences

SequenceRequirement
T2W multiplanar (axial, sagittal, coronal)Mandatory
T1W (with fat saturation)Mandatory
Kidney visualization sequenceMandatory (to detect hydronephrosis)
DWIUseful but not universally mandatory
3D high-resolution sequencesRecommended where available

Structured Reporting – Compartmental Framework

The pelvis is divided using two horizontal and two vertical lines into compartments. Each compartment must be systematically addressed:
  • Superficial endometriosis: T1WFS - high SI foci on peritoneal surface
  • Adnexal endometriosis:
    • Micro-endometrioma: T1WFS hyperintense intraovarian focus ≤1 cm
    • Endometrioma (>1 cm): report maximal diameter, multiplicity, location (central/peripheral), bilaterality, associated dilated tube, residual ovarian parenchyma
  • Deep Pelvic Endometriosis (DIE) - compartment-by-compartment:
    • Anterior: bladder nodule - location, size, distance to ureteric orifice
    • Posterior: rectosigmoid - location, number of nodules, longitudinal extent, distance to anal verge, wall thickening
    • Uterosacral ligaments: abnormal if nodule or spiculation visible in ≥2 planes OR T1W bright spot present
    • Posterior vaginal wall: nodule must be measured
    • External adenomyosis: location and size
    • Lateral compartment: anterior distal round ligament, mediolateral and posterolateral parametrium
    • Extra-pelvic: abdominal wall nodules, ileocaecal junction, appendiceal nodules, sigmoid nodules - all must be systematically described
    • Diaphragmatic endometriosis: requires dedicated sequence (no consensus to add routinely)

2. ESUR 2025 Consensus – Indications, Reporting & Classifications

Reference: Companion paper to the above (Thomassin-Naggara I et al., Eur Radiol 2025). PDF available

Indications for MRI (over TVUS)

  • Inconclusive transvaginal ultrasound
  • Surgical treatment planning
  • Persistent symptoms after surgery
  • Suspected rectovaginal, parametrial, or ureteral involvement

Classification Systems - ESUR Position

SystemESUR 2025 Assessment
dPEI (deep pelvic endometriosis index)"Most useful classification" - 9 pelvic compartments + 1 extrapelvic; 1 point per involved compartment; score correlates with surgical complexity
#EnzianMost widely studied; endorsed by 2024 International Consensus; good for A (rectovaginal) and C (rectal) lesions; poor reproducibility for B (USL, pelvic sidewall) lesions
rASRMLaparoscopic-based; limited MRI applicability
dPEI scoring: Mild = 0-3; Moderate = 4-6; Severe = 7+. Vaginal/trigone involvement or ureteral dilatation each add 1 point.

3. ACR Appropriateness Criteria – Endometriosis (2024)

Reference: Feldman MK, Wasnik AP, Adamson M, et al. (ACR Expert Panel on GYN & OB Imaging). J Am Coll Radiol 2024;21(11S):S384-S395. PMID: 39488350 | doi: 10.1016/j.jacr.2024.08.017

ACR Appropriateness Ratings

ProcedureRating
TVUS + transabdominal US (combined)Usually Appropriate
TVUS aloneUsually Appropriate
MRI pelvis ± IV contrastUsually Appropriate
CT pelvis (any)Usually NOT Appropriate
Transabdominal US aloneUsually NOT Appropriate

ACR Specific Indications for MRI

  • Initial diagnosis when TVUS is negative or indeterminate
  • Characterization and treatment planning
  • Suspected rectosigmoid involvement
  • Follow-up of known disease
  • When advanced TVUS is unavailable

4. CAR/CSAR Practice Statement on Pelvic MRI for Endometriosis (2025)

Reference: Pang E, Shergill A, Chang S, et al. Can Assoc Radiol J 2025 Aug. PMID: 39772972 | doi: 10.1177/08465371241306658 (Note: Erratum published PMID 40243234)
Key Canadian-specific guidance:
  • Pelvic MRI is recommended when advanced TVUS is unavailable or inaccessible
  • Provides standardized MRI technique recommendations for both community and academic practice
  • Includes structured reporting templates adapted for the Canadian health system
  • Aligns with ESUR protocol requirements

5. IDEA Group Addendum – Superficial Endometriosis Sonographic Protocol (2025)

Reference: Guerriero S, Condous G, Rolla M, et al. Ultrasound Obstet Gynecol 2025. PMID: 40632542 | doi: 10.1002/uog.29288
Key shift: Many international/national guidelines have moved toward non-invasive imaging-based diagnosis rather than laparoscopy as the gold standard, including for superficial lesions.
The addendum provides a standardized ultrasound protocol specifically for superficial endometriosis, including:
  • Systematic evaluation of peritoneal surfaces
  • Sonographic characteristics of superficial lesions (previously only described laparoscopically)
  • Complementary role to MRI when deep disease is ruled out

6. ACR/Radiology State-of-the-Art Review (2024)

Reference: VanBuren W, Feldman M, Shenoy-Bhangle AS, et al. "Radiology State-of-the-Art Review: Endometriosis Imaging Interpretation and Reporting." Radiology 2024;312:e233482. DOI: 10.1148/radiol.233482
Developed by the Society of Abdominal Radiology (SAR) Endometriosis Disease-Focused Panel - one of the most widely cited practical guides for American radiologists. Covers interpretation pearls, reporting language, and clinical scenarios.

7. Systematic Review – eMRI Diagnostic Accuracy (2024)

Reference: Avery JC, Knox S, Deslandes A, et al. "Noninvasive diagnostic imaging for endometriosis part 2: a systematic review." Fertil Steril 2024 Feb. PMID: 38110143
Key performance data confirmed:
  • eMRI sensitivity for deep + ovarian endometriosis: 91-93.5%
  • eMRI specificity: 86-87.5%
  • Negative eMRI does NOT exclude superficial endometriosis (lesions <5 mm below MRI resolution)
  • AI tools combining eMRI + eTVUS markers show promise

8. Practical Pitfalls Review (2026)

Reference: Elias Z, Kielar A, Arif-Tiwari H, et al. "Optimizing endometriosis detection: a review of technical approaches and interpretative pitfalls." Abdom Radiol 2026. PMID: 40576666
Challenging anatomic areas specifically highlighted:
  • Thoracic endometriosis
  • Gastrointestinal wall involvement
  • Abdominal wall scar endometriosis
  • Urinary tract and neurovascular involvement
  • Pelvic nerve endometriosis (parametria, sciatic notch)

Summary: What's Changed / What to Apply Now

AreaCurrent Standard (2024-2026)
First-line modalityTVUS (dynamic, real-time, operator-dependent)
Second-line / preoperativeMRI - preferred over repeat TVUS when TVUS inconclusive or surgery planned
MRI field strength1.5T minimum; 3T preferred
Essential sequencesT2W multiplanar + T1W fat-sat + kidney coverage
Patient prepFasting + antiperistaltic + moderate bladder fill + bowel prep
Reporting styleStructured, compartment-based (not free-text)
ClassificationdPEI (ESUR preferred) or #Enzian (international consensus preferred)
CT roleNot appropriate for endometriosis evaluation
Superficial lesionsAccepted that MRI cannot reliably detect <5 mm; clinical correlation essential
Malignancy surveillanceReport loss of T2 shading, enhancing nodule, cyst >9 cm, rapid growth
The single most impactful change for daily practice is adopting structured, compartment-based MRI reporting - multiple studies show free-text reports routinely miss key compartments, reducing surgical planning accuracy.

middle option looks like a better one now i want u to prepare a journal club presenttaion regarding the article named van buren et al 2024 for my journal presentation...and for referencecheck other article and also check out this website also https://rad.bwh.harvard.edu/mri-of-endometriosis/ total slides i want is around 50 including some things about endometriosiis breilfly and about this article mainly

Reading File
Reading Article

PMID: 38861486

Reading Web Page

https://rad.bwh.harvard.edu/mri-of-endometriosis/

Searching the Web

VanBuren 2024 Radiology endometriosis imaging interpretation reporting state of the art review full details

Reading Web Page

https://ctisus.com/learning/journalclub/349654

Searching PubMed

Society Radiologists Ultrasound endometriosis consensus pelvic ultrasound routine

Searching the Web

VanBuren Radiology 2024 endometriosis MRI technique T1 T2 sequences compartment bowel bladder ureter reporting template key findings

Running Command

mkdir -p /tmp/workspace/jc-endometriosis && ls /tmp/workspace/endometriosis-ppt/images/ | head -20

ppt is getting prepared?

how long shld i wait

Running Command

mkdir -p /tmp/workspace/jc-endometriosis && ls /tmp/workspace/endometriosis-ppt/images/ | wc -l

Running Command

cat << 'PYEOF' > /tmp/workspace/jc-endometriosis/build_jc.py 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 import os # ── Palette ────────────────────────────────────────────────────────────────── NAVY = RGBColor(0x0D, 0x2B, 0x55) # deep navy BLUE = RGBColor(0x1A, 0x5C, 0x96) # mid-blue LTBLUE = RGBColor(0xD6, 0xE8, 0xF7) # light blue tint TEAL = RGBColor(0x00, 0x7B, 0x83) # teal accent ORANGE = RGBColor(0xE8, 0x7B, 0x1E) # orange highlight RED = RGBColor(0xC0, 0x39, 0x2B) # red alert WHITE = RGBColor(0xFF, 0xFF, 0xFF) DARK = RGBColor(0x1C, 0x1C, 0x1C) MGRAY = RGBColor(0x55, 0x55, 0x66) LGRAY = RGBColor(0xF2, 0xF4, 0xF8) GREEN = RGBColor(0x1E, 0x8B, 0x4C) IMG = "/tmp/workspace/endometriosis-ppt/images" prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) BLANK = prs.slide_layouts[6] # ── Helpers ─────────────────────────────────────────────────────────────────── def add_slide(): return prs.slides.add_slide(BLANK) def box(sl, x,y,w,h, fill=None): sh = sl.shapes.add_shape(1, Inches(x),Inches(y),Inches(w),Inches(h)) sh.line.fill.background() if fill: sh.fill.solid(); sh.fill.fore_color.rgb=fill else: sh.fill.background() return sh def txt(sl, t, x,y,w,h, sz=16, bold=False, color=DARK, align=PP_ALIGN.LEFT, italic=False, wrap=True, va=MSO_ANCHOR.TOP): tb = sl.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)) tf = tb.text_frame; tf.word_wrap=wrap; tf.vertical_anchor=va tf.margin_left=0;tf.margin_right=0;tf.margin_top=0;tf.margin_bottom=0 p=tf.paragraphs[0]; p.alignment=align r=p.add_run(); r.text=t; r.font.size=Pt(sz); r.font.bold=bold r.font.italic=italic; r.font.color.rgb=color; r.font.name="Calibri" return tf def mtxt(sl, lines, x,y,w,h, sz=14, bold=False, color=DARK, align=PP_ALIGN.LEFT, wrap=True): """lines = list of str or (str, bold, size, color)""" tb = sl.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)) tf = tb.text_frame; tf.word_wrap=wrap tf.margin_left=0;tf.margin_right=0;tf.margin_top=Pt(2);tf.margin_bottom=0 first=True for line in lines: if isinstance(line,str): t,b,s,c = line,bold,sz,color else: t=line[0]; b=line[1] if len(line)>1 else bold s=line[2] if len(line)>2 else sz; c=line[3] if len(line)>3 else color p = tf.paragraphs[0] if first else tf.add_paragraph() first=False; p.alignment=align r=p.add_run(); r.text=t; r.font.size=Pt(s); r.font.bold=b r.font.italic=False; r.font.color.rgb=c; r.font.name="Calibri" def img(sl, name, x,y,w,h=None): p=os.path.join(IMG,name) if not os.path.exists(p): return try: if h: sl.shapes.add_picture(p,Inches(x),Inches(y),Inches(w),Inches(h)) else: sl.shapes.add_picture(p,Inches(x),Inches(y),width=Inches(w)) except: pass def cap(sl, t, x,y,w): box(sl,x,y,w,0.3,RGBColor(0xE8,0xF0,0xFB)) txt(sl,t,x+0.05,y+0.02,w-0.1,0.28,sz=10,italic=True,color=DARK) def hdr(sl, title, sub=None): """Standard content header""" box(sl,0,0,13.333,7.5,LGRAY) box(sl,0,0,13.333,0.92,NAVY) box(sl,0,0.92,13.333,0.07,ORANGE) txt(sl,title,0.32,0.1,12.6,0.78,sz=28,bold=True,color=WHITE) if sub: txt(sl,sub,0.32,0.95,12.6,0.35,sz=14,italic=True,color=BLUE) def sec(sl, title, sub=None): """Section divider slide""" box(sl,0,0,13.333,7.5,NAVY) box(sl,0,3.1,13.333,0.1,ORANGE) for cx,cy,cr in [(12.5,1.0,2.5),(1.0,6.5,2.0),(-0.3,2.5,1.8)]: sh=sl.shapes.add_shape(9,Inches(cx-cr/2),Inches(cy-cr/2),Inches(cr),Inches(cr)) sh.fill.solid(); sh.fill.fore_color.rgb=RGBColor(0x1A,0x3F,0x6F) sh.line.fill.background() txt(sl,title,1.2,2.6,10.8,1.5,sz=42,bold=True,color=WHITE,align=PP_ALIGN.CENTER) if sub: txt(sl,sub,1.2,4.15,10.8,0.6,sz=20,italic=True,color=RGBColor(0xAD,0xD8,0xFF),align=PP_ALIGN.CENTER) def bullets(sl, items, x,y,w,h, sz=14, title=None, tc=BLUE, lcolor=BLUE): box(sl,x,y,w,h,WHITE) box(sl,x,y,0.07,h,lcolor) yo=y+0.15 if title: txt(sl,title,x+0.15,yo,w-0.2,0.35,sz=15,bold=True,color=tc) yo+=0.38 tb=sl.shapes.add_textbox(Inches(x+0.15),Inches(yo),Inches(w-0.2),Inches(h-(yo-y)-0.1)) tf=tb.text_frame; tf.word_wrap=True tf.margin_left=0;tf.margin_right=0;tf.margin_top=0;tf.margin_bottom=0 first=True for item in items: p=tf.paragraphs[0] if first else tf.add_paragraph() first=False; p.alignment=PP_ALIGN.LEFT r=p.add_run() if item.startswith(" "): r.text=" "+item.lstrip() else: r.text="• "+item r.font.size=Pt(sz); r.font.color.rgb=DARK; r.font.name="Calibri" def ref_line(sl, text, y): txt(sl,text,0.4,y,12.5,0.28,sz=10,italic=True,color=MGRAY) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 1 – Title # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() box(sl,0,0,13.333,7.5,NAVY) box(sl,0,4.75,13.333,2.75,BLUE) box(sl,0,4.73,13.333,0.09,ORANGE) # decorative arcs for cx,cy,cr in [(12.0,0.8,2.8),(0.5,7.2,2.2)]: sh=sl.shapes.add_shape(9,Inches(cx-cr/2),Inches(cy-cr/2),Inches(cr),Inches(cr)) sh.fill.solid();sh.fill.fore_color.rgb=RGBColor(0x1A,0x3F,0x6F);sh.line.fill.background() txt(sl,"JOURNAL CLUB PRESENTATION",0.8,0.6,11.5,0.55,sz=18,color=ORANGE,bold=True,align=PP_ALIGN.CENTER) txt(sl,"Endometriosis Imaging\nInterpretation and Reporting",0.5,1.25,12.3,2.4,sz=44,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,"Radiology State-of-the-Art Review",0.5,3.7,12.3,0.55,sz=22,italic=True,color=RGBColor(0xAD,0xD8,0xFF),align=PP_ALIGN.CENTER) txt(sl,"VanBuren W, Feldman M, Shenoy-Bhangle AS, et al.\nRadiology 2024;312(3):e233482 | DOI: 10.1148/radiol.233482",0.5,5.05,12.3,0.75,sz=15,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,"Society of Abdominal Radiology Endometriosis Disease-Focused Panel • 34 co-authors",0.5,5.85,12.3,0.4,sz=13,italic=True,color=RGBColor(0xAD,0xD8,0xFF),align=PP_ALIGN.CENTER) txt(sl,"Radiology Residency | Journal Club | July 2026",0.5,6.5,12.3,0.38,sz=13,color=ORANGE,align=PP_ALIGN.CENTER) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 2 – Article at a Glance # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Article at a Glance") cards=[ ("Journal","Radiology – RSNA flagship journal",NAVY), ("Publication","September 2024 | Vol 312(3) | e233482",BLUE), ("Type","State-of-the-Art Review (invited, peer-reviewed)",TEAL), ("Authors","34 co-authors – radiologists, gynecologists, pathologists, surgeons",GREEN), ("Org.","Society of Abdominal Radiology (SAR)\nEndometriosis Disease-Focused Panel",ORANGE), ("Cited by","63+ citations (as of 2025)",RED), ] for i,(label,val,col) in enumerate(cards): xo=0.35+(i%3)*4.3; yo=1.15+(i//3)*2.0 box(sl,xo,yo,4.05,1.75,WHITE) box(sl,xo,yo,4.05,0.5,col) txt(sl,label,xo+0.1,yo+0.07,3.8,0.38,sz=14,bold=True,color=WHITE) txt(sl,val,xo+0.1,yo+0.58,3.8,1.1,sz=13,color=DARK,wrap=True) txt(sl,"Why this article matters: First comprehensive SAR consensus-based imaging guide covering interpretation + reporting language for both MRI and TVUS", 0.35,5.35,12.6,0.65,sz=14,bold=True,color=NAVY) ref_line(sl,"VanBuren et al. Radiology 2024;312(3):e233482",7.1) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 3 – Outline # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Presentation Outline") sec_items=[ ("PART A","Endometriosis – Brief Clinical Background","Slides 4–10"), ("PART B","The Article – VanBuren et al. 2024","Slides 11–38"), ("PART C","BWH/Harvard Protocol Reference","Slides 39–43"), ("PART D","Supporting Evidence & Guidelines","Slides 44–47"), ("PART E","Critical Appraisal & Take-home Points","Slides 48–50"), ] cols=[NAVY,BLUE,TEAL,GREEN,ORANGE] for i,(part,title,slides) in enumerate(sec_items): yo=1.2+i*1.12 box(sl,0.35,yo,12.6,1.0,WHITE) box(sl,0.35,yo,1.05,1.0,cols[i]) txt(sl,part,0.37,yo+0.12,1.0,0.35,sz=13,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,title,1.55,yo+0.08,9.5,0.5,sz=17,bold=True,color=DARK) txt(sl,slides,11.2,yo+0.08,1.6,0.35,sz=13,italic=True,color=MGRAY,align=PP_ALIGN.RIGHT) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 4 – Section A divider # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() sec(sl,"PART A: Endometriosis","Clinical Background") # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 5 – Definition & Epidemiology # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Endometriosis – Definition & Epidemiology") bullets(sl,[ "Definition: ectopic endometrial-like glands and stroma outside the uterine cavity", "Affects ~190 million individuals worldwide (up to 10% of reproductive-age women)", "Up to 50% of women with infertility have endometriosis", "Mean age at diagnosis: 25–29 years", "Diagnostic delay: average 7–12 years from symptom onset", "Symptoms: pelvic pain, dysmenorrhea, dyspareunia, dyschezia, infertility", "Ectopic tissue is hormonally active → cyclical bleeding, inflammation, fibrosis", "Ovaries most commonly affected; implants can appear anywhere in pelvis and beyond", ],0.35,1.1,7.5,5.9,sz=15,title="Key Facts",tc=NAVY) box(sl,8.1,1.1,4.9,5.9,WHITE) img(sl,"image23.png",8.15,1.15,4.8) cap(sl,"Common locations of endometriosis",8.1,6.6,4.9) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 6 – Classification / Entities # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Classification of Endometriosis") entities=[ ("Superficial Peritoneal\nEndometriosis","Implants <5 mm on peritoneal surface. 'Powder-burn' lesions. Usually below MRI resolution.",TEAL), ("Endometrioma","Endometriotic cysts of the ovary ('chocolate cysts'). Most common surgically detected form.",BLUE), ("Deep Infiltrating\nEndometriosis (DIE)","Penetration >5 mm below peritoneum. Fibrotic nodules. Involves posterior compartment, bowel, bladder, ureter.",NAVY), ("Adenomyosis","Endometrial glands invading myometrium ('inside-out'). Often coexists with DIE.",ORANGE), ] for i,(name,desc,col) in enumerate(entities): xo=0.35+(i%2)*6.45; yo=1.1+(i//2)*2.65 box(sl,xo,yo,6.1,2.45,WHITE) box(sl,xo,yo,6.1,0.65,col) txt(sl,name,xo+0.12,yo+0.09,5.85,0.55,sz=15,bold=True,color=WHITE) txt(sl,desc,xo+0.12,yo+0.72,5.85,1.65,sz=13.5,color=DARK,wrap=True) ref_line(sl,"Zondervan KT et al. N Engl J Med 2020;382:1244–1256",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 7 – Pathogenesis # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Pathogenesis – Why It Matters for Imaging") theories=[ ("Metastatic Theory\n(Most Accepted)","Retrograde menstruation → viable endometrial cells implant on peritoneal surface. Explains multifocal pelvic disease.",NAVY), ("Metaplastic Theory","Coelomic epithelium differentiates into endometrial tissue. Explains cases in men, Turner syndrome.",BLUE), ("Induction Theory","Shed endometrial substances induce mesenchyme differentiation. Explains deep fibrotic involvement.",TEAL), ] for i,(h,d,col) in enumerate(theories): xo=0.35+i*4.28 box(sl,xo,1.1,3.95,2.3,WHITE) box(sl,xo,1.1,3.95,0.6,col) txt(sl,h,xo+0.1,1.15,3.75,0.55,sz=14,bold=True,color=WHITE) txt(sl,d,xo+0.1,1.78,3.75,1.55,sz=13,color=DARK,wrap=True) bullets(sl,[ "Estrogen-dependent → disease regresses post-menopause (mostly)", "Fibrotic reaction: endometrial stroma + smooth muscle proliferation → T2-hypointense nodules on MRI", "Hemorrhagic content: cyclical bleeding → T1-hyperintense foci (hemosiderin/blood products)", "Adhesions: tethering of pelvic organs → characteristic architectural distortion on imaging", "Pro-inflammatory microenvironment → nociception, vascularization, proliferation", ],0.35,3.6,12.6,3.35,sz=14,title="Imaging Implications of Pathogenesis",tc=ORANGE,lcolor=ORANGE) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 8 – Diagnostic Gold Standard & Imaging Role # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Diagnostic Challenge & the Role of Imaging") bullets(sl,[ "Gold standard: laparoscopic biopsy + histopathology", "Problem: surgery has risk, cost, and is not always appropriate", "Average diagnostic delay: 7–12 years (symptom to diagnosis)", "Imaging enables non-invasive diagnosis and preoperative mapping", "", "Two dedicated imaging strategies:", " Advanced TVUS: dynamic, real-time, high-resolution, operator-dependent", " Dedicated MRI: global pelvic assessment, operator-independent, better for extrapelvic/complex disease", "", "Imaging goals:", " 1. Confirm diagnosis", " 2. Map location, extent, and depth of all lesions", " 3. Identify complications (hydronephrosis, bowel stenosis)", " 4. Guide surgical planning (urology, colorectal involvement?)", " 5. Assess malignant transformation", ],0.35,1.05,8.1,6.15,sz=14) box(sl,8.7,1.05,4.3,6.15,WHITE) img(sl,"image28.png",8.75,1.1,4.2) cap(sl,"MRI: common DIE sites",8.7,6.7,4.3) # ═════════════════════════════════════════════════════════════════════��═════ # SLIDE 9 – Normal Anatomy Relevant to Endometriosis # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Pelvic Compartments – Anatomy Relevant to Endometriosis") comps=[ ("ANTERIOR","Bladder, urethra, prevesical space, vesicouterine pouch, vesicovaginal septum","Bladder dome (peritoneal), bladder base (extraperitoneal)",TEAL), ("MIDDLE","Uterus, cervix, vagina, ovaries, fallopian tubes, broad ligaments, mesovarium","Most common site of endometriomas",BLUE), ("POSTERIOR","Rectum, rectouterine pouch (Douglas), rectovaginal septum, uterosacral ligaments","MOST COMMON site for DIE; torus uterinus origin of USLs",NAVY), ("LATERAL","Parametria, pelvic sidewall, ureters, pelvic nerves, vessels","Important for surgical risk; often missed on routine MRI",ORANGE), ] for i,(name,contents,imp,col) in enumerate(comps): xo=0.35+(i%2)*6.45; yo=1.1+(i//2)*2.75 box(sl,xo,yo,6.1,2.6,WHITE) box(sl,xo,yo,1.35,2.6,col) txt(sl,name,xo+0.07,yo+0.6,1.2,0.6,sz=12,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,"Contents:",xo+1.52,yo+0.1,4.5,0.28,sz=12,bold=True,color=col) txt(sl,contents,xo+1.52,yo+0.38,4.5,1.0,sz=12,color=DARK,wrap=True) txt(sl,"Key: "+imp,xo+1.52,yo+1.5,4.5,0.9,sz=11.5,italic=True,color=col,wrap=True) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 10 – MRI Signal Characteristics # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"MRI Signal Characteristics in Endometriosis") rows=[ ("Chronic hemorrhage\n(hemosiderin, denatured protein)","HIGH","LOW (T2-shading)","Endometrioma content, chronic hematosalpinx"), ("Active / subacute hemorrhage","HIGH","HIGH","Hemorrhagic foci in DIE, adenomyosis"), ("Fibrosis / smooth muscle","LOW–ISO","LOW","DIE nodule; adenomyosis JZ thickening"), ("Edema (submucosal)","LOW","HIGH","Mushroom cap sign inner layer"), ("Ectopic endometrial glands\n(cystic dilatation)","Variable","HIGH foci","T2-bright spots in adenomyosis; micro-endometrioma"), ("Malignant nodule (EAOC)","ISO","ISO + enhancement","Loss of T2 shading + enhancing mural nodule"), ] hdrs=["Tissue / Finding","T1 Signal","T2 Signal","Clinical Relevance"] cols_w=[3.8,1.7,1.7,4.8]; cols_x=[0.35,4.2,5.95,7.7] # header row for ci,(h,cw,cx) in enumerate(zip(hdrs,cols_w,cols_x)): box(sl,cx,1.05,cw,0.5,NAVY) txt(sl,h,cx+0.08,1.1,cw-0.12,0.38,sz=13,bold=True,color=WHITE) for ri,row in enumerate(rows): y=1.57+ri*0.83; bg=LGRAY if ri%2==0 else WHITE for ci,(val,cw,cx) in enumerate(zip(row,cols_w,cols_x)): box(sl,cx,y,cw,0.8,bg) col=RED if "malignant" in val.lower() or "EAOC" in val else DARK txt(sl,val,cx+0.08,y+0.05,cw-0.12,0.72,sz=12,color=col,wrap=True) ref_line(sl,"VanBuren et al. Radiology 2024;312(3):e233482 | Kido A et al. Korean J Radiol 2022;23:426–445",7.15) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 11 – Section B divider # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() sec(sl,"PART B: VanBuren et al. 2024","Radiology State-of-the-Art Review – Deep Dive") # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 12 – Study Scope & Methods # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Study Scope & Author Panel") bullets(sl,[ "34 co-authors from academic centers across USA (Mayo Clinic, UCSF, BWH/Harvard, Cleveland Clinic…)", "Multidisciplinary: radiologists (body/GYN MRI, US), gynecologists, surgeons, pathologists", "Developed under the Society of Abdominal Radiology (SAR) Endometriosis Disease-Focused Panel", "Purpose: provide state-of-the-art interpretation and reporting guidance for both MRI and TVUS", "Scope: from mild superficial disease through advanced DIE, EAOC, and extrapelvic manifestations", "", "Key gaps addressed:", " No prior unified SAR/ACR guidance on interpretation language and reporting structure", " Variable practice across institutions → inconsistent communication with surgeons", " Need for compartment-based, pattern-recognition framework for radiologists", ],0.35,1.1,8.5,5.9,sz=14.5) box(sl,9.1,1.1,3.9,5.9,WHITE) txt(sl,"Key Message",9.2,1.2,3.7,0.4,sz=15,bold=True,color=NAVY) txt(sl,'"Endometriosis is a disease requiring a compartment-based, pattern-recognition approach."', 9.2,1.65,3.7,2.2,sz=14,italic=True,color=BLUE,wrap=True) box(sl,9.1,4.0,3.9,2.6,LTBLUE) txt(sl,"Modalities Covered:",9.2,4.1,3.7,0.35,sz=13,bold=True,color=NAVY) for item in ["• Dedicated pelvic MRI","• Advanced transvaginal US","• Routine pelvic US (screening role)","• CT (limited role)"]: pass mtxt(sl,["• Dedicated pelvic MRI","• Advanced transvaginal US","• Routine pelvic US (screening role)","• CT (limited, extrapelvic)"],9.2,4.5,3.7,2.0,sz=13) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 13 – MRI Technique & Patient Preparation # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"MRI Technique & Patient Preparation") bullets(sl,[ "Field strength: 1.5T minimum; 3T preferred for spatial resolution", "Patient preparation:", " - Fasting 4 hours prior (reduces bowel peristalsis artifacts)", " - Antiperistaltic agent: e.g., hyoscine butylbromide (Buscopan) 20 mg IV or glucagon", " - Moderate bladder filling (not empty, not over-distended)", " - Vaginal/rectal gel opacification: optional but improves posterior compartment assessment", " - No bowel prep universally required; some centers use it for posterior DIE", "", "Minimum required sequences:", " 1. T2W sagittal (whole pelvis) – roadmap, uterus, rectovaginal space", " 2. T2W axial (uterus oblique) – parametria, adnexa, JZ", " 3. T2W coronal – ovaries, ligaments, ureters", " 4. T1W axial (with fat saturation) – identifies hemorrhagic foci", " 5. Kidney coverage sequence – detects hydronephrosis", " Optional: DWI, DCE, 3D-T2W for lateral compartment / nerve involvement", ],0.35,1.05,8.8,6.2,sz=13.5) box(sl,9.15,1.05,3.85,6.2,WHITE) box(sl,9.15,1.05,3.85,0.45,TEAL) txt(sl,"VanBuren Recommendation",9.25,1.1,3.65,0.38,sz=13,bold=True,color=WHITE) mtxt(sl,[ "T1 hyperintensity is NOT required to diagnose DE – its absence does not exclude endometriosis.", "", "T1WI increases specificity by identifying hemorrhagic components.", "", "Compartment-based reporting template recommended over free-text.", ],9.25,1.6,3.65,5.5,sz=13,color=DARK) ref_line(sl,"VanBuren et al. Radiology 2024 | ESUR Consensus Eur Radiol 2025",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 14 – Compartment-Based Approach # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Core Concept: Compartment-Based, Pattern-Recognition Approach") box(sl,0.35,1.1,12.6,0.5,NAVY) txt(sl,"Divide the pelvis into compartments – evaluate each systematically on EVERY endometriosis MRI", 0.5,1.15,12.3,0.42,sz=16,bold=True,color=WHITE,align=PP_ALIGN.CENTER) compartments=[ ("ANTERIOR","Bladder\nVesicouterine pouch\nUreter (distal)","image2.jpeg"), ("MIDDLE","Uterus (torus, serosa)\nAdnexa (ovaries, tubes)\nBroad ligaments","image3.jpeg"), ("POSTERIOR","Cul-de-sac (Douglas)\nRectovaginal septum\nUterosacral ligaments\nRectosigmoid colon","image4.jpeg"), ("LATERAL","Parametria\nPelvic sidewall\nPelvic nerves\nUreter","image26.png"), ] colors=[TEAL,BLUE,NAVY,ORANGE] for i,(name,contents,im) in enumerate(compartments): xo=0.35+i*3.22 box(sl,xo,1.75,3.0,5.55,WHITE) box(sl,xo,1.75,3.0,0.45,colors[i]) txt(sl,name,xo+0.08,1.78,2.85,0.38,sz=13,bold=True,color=WHITE,align=PP_ALIGN.CENTER) img(sl,im,xo+0.08,2.25,2.85) txt(sl,contents,xo+0.08,4.85,2.85,2.3,sz=12,color=DARK,wrap=True) ref_line(sl,"VanBuren et al. Radiology 2024;312(3):e233482",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 15 – Endometrioma: USG Findings # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Endometrioma – Ultrasound Findings (VanBuren 2024)") bullets(sl,[ "Classic appearance: unilocular cyst, homogeneous ground-glass (low-level) echogenicity", "Smooth inner wall; no internal vascularity", "O-RADS US 2022 – O-RADS 2 (<1% malignancy): unilocular, homogeneous, ≤3 locules", "Hyperechoic wall foci: cholesterol deposits from prior hemorrhage → increases specificity", "", "Advanced TVUS features to evaluate:", " - Sliding sign: real-time assessment of posterior compartment mobility/adhesions", " - Tender guided examination: identifies adhesion-related fixed pelvic organs", " - Color Doppler: absence of internal vascularity = benign; vascularity = red flag", "", "Atypical features → upgrade to O-RADS 3 (1–10% malignancy risk):", " - Size >10 cm", " - Vascular solid component", " - Rapid enlargement on follow-up", " - Loss of typical ground-glass echotexture", ],0.35,1.05,7.1,6.2,sz=13.5) box(sl,7.7,1.05,2.85,6.2,WHITE) img(sl,"image5.jpeg",7.75,1.1,2.75) cap(sl,"Fig 5A – TVUS: ground-glass endometrioma",7.7,6.3,2.85) box(sl,10.75,1.05,2.25,6.2,WHITE) img(sl,"image6.jpeg",10.8,1.1,2.15) cap(sl,"Fig 5B – O-RADS 2 septated cyst",10.75,6.3,2.25) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 16 – Endometrioma: MRI Findings # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Endometrioma – MRI Findings (VanBuren 2024)") signs=[ ("T1 Hyperintensity\n(Multiplicity)","Multiple T1-bright cysts = recurrent hemorrhage\n→ recurrent blood locules. Persists on fat-sat T1 (differentiates from fat/teratoma)",NAVY), ("T2 Shading","Progressive signal loss on T2WI. Chronic recurrent bleeding → elevated iron, protein. Specificity alone only 45%",BLUE), ("T2 Dark Spot Sign","Well-defined markedly hypointense foci within cyst on T2WI. HIGH specificity for chronic hemorrhage/hemosiderin. Key differentiator from hemorrhagic cyst",TEAL), ] for i,(s,d,c) in enumerate(signs): xo=0.35+i*4.28 box(sl,xo,1.1,3.9,2.0,WHITE) box(sl,xo,1.1,3.9,0.55,c) txt(sl,s,xo+0.1,1.14,3.7,0.5,sz=14,bold=True,color=WHITE) txt(sl,d,xo+0.1,1.72,3.7,1.3,sz=12.5,color=DARK,wrap=True) imgs=["image7.jpeg","image8.png","image9.jpeg","image10.jpeg"] caps=["Fig 6A – T2WI","Fig 6B – T1WI","Fig 6C – fat-sat T1WI","Fig 6D – T2 dark spot"] for i,(im,ca) in enumerate(zip(imgs,caps)): xo=0.35+i*3.24 box(sl,xo,3.25,3.05,3.6,WHITE) img(sl,im,xo+0.05,3.3,2.95) cap(sl,ca,xo,6.55,3.05) ref_line(sl,"VanBuren et al. Radiology 2024 | Corwin MT et al. Radiology 2014;271:126–132",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 17 – Endometrioma: Differential & Malignancy # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Endometrioma – Differential Diagnosis & Malignancy Risk") diffs=[ ("Hemorrhagic Functional Cyst","T1-high, T2-variable. NO T2 dark spots. Resolves on follow-up (6–12 wks). Usually unilocular, no multiplicity"), ("Mature Cystic Teratoma","T1-high (fat). Signal DROPS on fat-sat T1. Contains hair/teeth on CT. Rokitansky nodule"), ("Mucinous Cystadenoma","T1-high (mucin can be bright), T2-variable. No T2 shading. No T2 dark spots"), ("EAOC (Clear Cell / Endometrioid)","Enhancing mural nodule. Loss of T2 shading. Large cyst (>9 cm). Diffusion restriction"), ] box(sl,0.35,1.1,7.5,5.25,WHITE) box(sl,0.35,1.1,7.5,0.42,NAVY) txt(sl,"Differential Diagnosis of T1-Bright Adnexal Cysts",0.45,1.14,7.3,0.35,sz=14,bold=True,color=WHITE) yo=1.6 for name,desc in diffs: box(sl,0.4,yo,7.4,1.05,LGRAY if diffs.index((name,desc))%2==0 else WHITE) txt(sl,name,0.5,yo+0.06,2.5,0.35,sz=13,bold=True,color=BLUE) txt(sl,desc,3.1,yo+0.06,4.6,0.9,sz=12.5,color=DARK,wrap=True) yo+=1.12 box(sl,8.1,1.1,4.9,5.25,WHITE) box(sl,8.1,1.1,4.9,0.42,RED) txt(sl,"Malignancy Red Flags (EAOC)",8.2,1.14,4.7,0.35,sz=14,bold=True,color=WHITE) red_flags=[ "Enhancing mural nodule", "Loss of T2 shading", "Cyst >9 cm or rapid growth", "Restricted diffusion (DWI)", "Post-menopausal status", "Vascular solid component on US", "Long-standing endometriosis", ] for j,rf in enumerate(red_flags): box(sl,8.15,1.6+j*0.5,4.8,0.46,LGRAY if j%2==0 else WHITE) txt(sl,"⚠ "+rf,8.25,1.65+j*0.5,4.6,0.38,sz=13,color=RED if j<3 else DARK) ref_line(sl,"VanBuren et al. Radiology 2024 | Sakala MD et al. MR Imaging Clin N Am 2023;31:121–135",6.5) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 18 – DIE Introduction & MRI Hallmarks # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Deep Infiltrating Endometriosis (DIE) – MRI Hallmarks") bullets(sl,[ "Definition: endometrial tissue penetrates peritoneum >5 mm", "Histology: fibrosis + smooth muscle proliferation → T2-hypointense nodule", "", "PRIMARY MRI appearance:", " - T2-hypointense nodular lesion or soft-tissue thickening (fibrosis dominant)", " - Internal T1-bright foci (hemorrhagic glands) – present in ~60%", " - T1 hyperintensity NOT required – its absence does NOT exclude DIE", " - Spiculated margins; loss of fat planes between organs", " - Architectural distortion: organ tethering, angular deformity", "", "Two histological patterns (VanBuren 2024):", " Active glandular DIE: viable ectopic glands + hemorrhage → T1-bright foci", " Chronic stromal fibrotic DIE: predominantly fibrosis → T2-dark only, no T1 bright", "", "Clinical implication: chronic fibrotic DIE still requires surgical excision", ],0.35,1.05,7.5,6.25,sz=13.5) box(sl,8.1,1.05,4.9,6.25,WHITE) img(sl,"image26.png",8.15,1.1,4.8) cap(sl,"Cul-de-sac obliteration + mushroom cap sign (arrowheads)",8.1,6.7,4.9) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 19 – DIE Posterior Compartment # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"DIE – Posterior Compartment (Most Common Site)") bullets(sl,[ "Structures involved: cul-de-sac, uterosacral ligaments, torus uterinus, rectovaginal septum, rectosigmoid colon", "", "Cul-de-sac obliteration:", " - Loss of fat plane between posterior uterus and rectum", " - Fixed retroversion/retroflexion of uterus", " - MRI: T2-dark soft tissue replacing the normal fat", "", "Uterosacral Ligaments (USLs) – most common DIE site:", " - USL abnormal if: nodule or spiculation visible in ≥2 planes", " - OR: T1-bright spot within the USL", " - Report: smooth vs nodular/irregular thickening", "", "Mushroom Cap Sign (rectosigmoid):", " - T2-hypointense cap = muscularis propria hypertrophy", " - Inner T2-bright rim = submucosal/mucosal edema", " - Normal mucosal layer preserved (distinguishes from primary bowel malignancy)", "", "Kissing Ovaries: bilateral ovaries adherent in midline posterior cul-de-sac", ],0.35,1.05,7.5,6.25,sz=13) box(sl,8.1,1.05,4.9,6.25,WHITE) img(sl,"image33.png",8.15,1.1,4.8) cap(sl,"DIE: cervix/vagina/rectovaginal – T2-dark lesion with T1-bright foci",8.1,6.7,4.9) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 20 – DIE Reporting: Posterior Compartment # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Reporting Checklist: Posterior Compartment DIE") rows=[ ("Cul-de-sac","Obliteration: Yes/No | Fat plane status","Degree of obliteration impacts laparoscopic access"), ("Uterosacral Ligaments","Location (unilateral/bilateral) | Smooth vs nodular/irregular | Size","Irregular = higher disease burden"), ("Torus Uterinus","Involvement: Yes/No | Size","Often co-involved with USLs"), ("Rectovaginal Septum","Thickness | T2-bright foci | Fat-sat T1 signal","Extraperitoneal – requires deeper surgical dissection"), ("Posterior Vaginal Wall","Nodule size + location | Depth of invasion","Report distance from vaginal cuff"), ("Rectosigmoid Colon","Location | Longitudinal extent | Number of nodules\nWall thickening | Distance to anal verge | Mucosal involvement","Determines need for colorectal surgeon"), ] hdrs_r=["Structure","What to Report","Surgical Implication"] cw=[2.8,5.2,4.5]; cx=[0.35,3.2,8.45] for ci,(h,w,x) in enumerate(zip(hdrs_r,cw,cx)): box(sl,x,1.08,w,0.46,NAVY) txt(sl,h,x+0.08,1.12,w-0.12,0.38,sz=13,bold=True,color=WHITE) for ri,row in enumerate(rows): y=1.57+ri*0.83; bg=LGRAY if ri%2==0 else WHITE for ci,(val,w,x) in enumerate(zip(row,cw,cx)): box(sl,x,y,w,0.8,bg) c=RED if "colorectal" in val.lower() else DARK txt(sl,val,x+0.08,y+0.04,w-0.12,0.73,sz=11.5,color=c,wrap=True) ref_line(sl,"VanBuren et al. Radiology 2024 | BWH Harvard: rad.bwh.harvard.edu/mri-of-endometriosis",7.15) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 21 – DIE Anterior Compartment: Bladder # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"DIE – Anterior Compartment: Bladder Involvement") bullets(sl,[ "Prevalence: ~4% of women with endometriosis; ~90% of urinary tract DIE involves bladder", "Most often involves posterior bladder wall (dome or trigone)", "", "MRI appearance:", " - T1 isointense, T2 hypointense nodule", " - Increased and delayed enhancement vs. normal detrusor", " - Sessile or polypoid lesion projecting into bladder lumen", "", "Mandatory reporting elements (VanBuren + BWH protocol):", " - Lesion size", " - Location: posterior wall / dome / trigone", " - Depth of detrusor muscle invasion (superficial vs. full-thickness)", " - Distance from each ureterovesical junction (UVJ) – bilateral", " - Involvement of trigone (most complex surgically)", "", "Clinical implication: trigone involvement → urology team required", ],0.35,1.05,7.5,6.2,sz=13.5) box(sl,8.1,1.05,4.9,6.2,WHITE) img(sl,"image35.png",8.15,1.1,4.8) cap(sl,"Enhanced CT: right distal ureteral DIE → hydronephrosis",8.1,6.7,4.9) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 22 – DIE Ureter # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"DIE – Ureteral Involvement") bullets(sl,[ "Occurs in 1–6.4% of endometriosis patients", "Left-sided predominance: sigmoid colon impedes peritoneal flow", "Distal ureter most commonly affected", "", "Two types:", " Extrinsic (more common): periureteral fibrotic adhesion", " - CT/MRI: indistinct soft tissue / T2-hypointense fibrotic implant", " - Obliteration of fat plane between ureter and adjacent DIE plaque", " Intrinsic: endometriosis within muscularis/lamina propria", " - Luminal narrowing → hydronephroureterosis", " - >50% intrinsic when complete periureteral encasement present", "", "Mandatory reporting (BWH/VanBuren):", " - Presence of hydronephrosis (indirect sign, often the only sign)", " - Level and length of ureteral involvement", " - Extrinsic vs. intrinsic", " - Always report relationship of any DIE plaque to the ureter", "", "Silent hydronephrosis: can occur without symptoms → MRI must include kidneys", ],0.35,1.05,8.5,6.2,sz=13) box(sl,8.85,1.05,4.1,6.2,WHITE) img(sl,"image41.png",8.9,1.1,4.0) cap(sl,"T2WI: superficial peritoneal implants (arrows)",8.85,6.7,4.1) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 23 – DIE Bowel # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"DIE – Bowel Involvement") bullets(sl,[ "Bowel endometriosis: 4–37% of women with endometriosis", "Sites: rectosigmoid (most common) > cecum > appendix > ileum", "", "MRI signs of bowel DIE:", " - T2-hypointense wall thickening (fibrosis of muscularis propria)", " - Fan-shaped hypointense lesion = typical muscularis infiltration", " - Mushroom cap sign: T2-dark cap + T2-bright submucosal rim (edema)", " - Tethering and angulation of bowel loops", " - Stricture/stenosis in severe cases", "", "Mandatory reporting elements:", " - Location (cm from anal verge) – critical for colorectal planning", " - Number of nodules (single vs. multifocal)", " - Longitudinal extent (cm)", " - Depth of wall invasion: serosa only / muscularis / submucosa / mucosa", " - Mucosal involvement: Yes/No (if yes → full-thickness resection more likely)", "", "TVUS advantage over MRI: higher spatial resolution for depth of bowel wall invasion", ],0.35,1.05,7.5,6.2,sz=13) box(sl,8.1,1.05,4.9,6.2,WHITE) img(sl,"image29.png",8.15,1.1,4.8) cap(sl,"'Kissing ovaries' + torus uterinus involvement + rectal adhesion",8.1,6.7,4.9) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 24 – Lateral Compartment & Pelvic Nerves # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"DIE – Lateral Compartment & Pelvic Nerve Involvement (Often Missed)") bullets(sl,[ "Lateral compartment: parametria, cardinal ligaments, pelvic sidewall, pelvic nerves, vessels", "Often missed on routine MRI – requires dedicated evaluation", "", "Pelvic nerve endometriosis (rare but important):", " - Sciatic nerve: cyclic sciatica, perineal pain", " - Obturator nerve: inner thigh pain with menses", " - Pudendal nerve: perianal pain, dyspareunia", "", "MRI approach for lateral compartment:", " - Axial T2W at level of cervix: parametrial involvement, tethering", " - 3D T2W multiplanar: follows nerve course, high spatial resolution", " - Relationship to ureter and uterine artery: anterolaterally", " - Relationship to sacral roots: posteriorly", " - Extension to sciatic notch / piriformis: rare but reported", "", "Mandatory report elements:", " - Anterior distal round ligament", " - Mediolateral and posterolateral parametrium", " - Any nerve/vessel proximity in large lateral DIE", ],0.35,1.05,12.6,6.2,sz=13.5) ref_line(sl,"VanBuren et al. Radiology 2024 | Colak C et al. Radiographics 2024;44:e230106 (pelvic nerve)",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 25 – Adenomyosis # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Adenomyosis – Imaging Findings (VanBuren 2024)") bullets(sl,[ "Definition: endometrial glands + stroma within myometrium – 'inside-out' process", "Junctional zone (JZ) thickening >12 mm = adenomyosis (normal: 2–8 mm)", "", "MRI findings:", " - Diffuse: globular uterus, diffuse T2-low JZ thickening", " - T2-bright foci: ectopic glands + cystic dilatation", " - T1-bright foci: hemorrhagic foci", " - Tortuous penetrating vessels traversing myometrium", "", "Key distinction from DIE:", " Adenomyosis = 'inside-out' (endometrium → myometrium); JZ involved", " DIE of uterus = 'outside-in' (serosa → myometrium); JZ PRESERVED", "", "VanBuren 2024 – External Adenomyosis:", " - Ectopic endometrial tissue invading from serosal surface", " - Reports should describe: location + size", " - Distinguish from primary adenomyosis for surgical planning", ],0.35,1.05,7.5,6.2,sz=13.5) box(sl,8.1,1.05,4.9,6.2,WHITE) img(sl,"image43.jpeg",8.15,1.1,4.8) cap(sl,"Fig 16 – Sagittal + axial T2WI: diffuse adenomyosis with widened JZ and T2-bright foci",8.1,6.7,4.9) # save part 1 out="/tmp/workspace/jc-endometriosis/JC_Endometriosis_VanBuren2024_PART1.pptx" prs.save(out) print(f"Part 1 saved: {out} | Slides: {len(prs.slides)}") PYEOF python3 /tmp/workspace/jc-endometriosis/build_jc.py

Running Command

cat << 'PYEOF' > /tmp/workspace/jc-endometriosis/build_jc2.py from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR import os NAVY = RGBColor(0x0D,0x2B,0x55); BLUE = RGBColor(0x1A,0x5C,0x96) LTBLUE= RGBColor(0xD6,0xE8,0xF7); TEAL = RGBColor(0x00,0x7B,0x83) ORANGE= RGBColor(0xE8,0x7B,0x1E); RED = RGBColor(0xC0,0x39,0x2B) WHITE = RGBColor(0xFF,0xFF,0xFF); DARK = RGBColor(0x1C,0x1C,0x1C) MGRAY = RGBColor(0x55,0x55,0x66); LGRAY = RGBColor(0xF2,0xF4,0xF8) GREEN = RGBColor(0x1E,0x8B,0x4C); PURPLE= RGBColor(0x6A,0x2C,0x91) IMG = "/tmp/workspace/endometriosis-ppt/images" # load part 1 prs = Presentation("/tmp/workspace/jc-endometriosis/JC_Endometriosis_VanBuren2024_PART1.pptx") BLANK = prs.slide_layouts[6] def add_slide(): return prs.slides.add_slide(BLANK) def box(sl,x,y,w,h,fill=None): sh=sl.shapes.add_shape(1,Inches(x),Inches(y),Inches(w),Inches(h)) sh.line.fill.background() if fill: sh.fill.solid(); sh.fill.fore_color.rgb=fill else: sh.fill.background() return sh def txt(sl,t,x,y,w,h,sz=16,bold=False,color=DARK,align=PP_ALIGN.LEFT,italic=False,wrap=True,va=MSO_ANCHOR.TOP): tb=sl.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)) tf=tb.text_frame; tf.word_wrap=wrap; tf.vertical_anchor=va tf.margin_left=0;tf.margin_right=0;tf.margin_top=0;tf.margin_bottom=0 p=tf.paragraphs[0]; p.alignment=align r=p.add_run(); r.text=t; r.font.size=Pt(sz); r.font.bold=bold r.font.italic=italic; r.font.color.rgb=color; r.font.name="Calibri" return tf def mtxt(sl,lines,x,y,w,h,sz=14,bold=False,color=DARK,align=PP_ALIGN.LEFT): tb=sl.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)) tf=tb.text_frame; tf.word_wrap=True tf.margin_left=0;tf.margin_right=0;tf.margin_top=Pt(2);tf.margin_bottom=0 first=True for line in lines: if isinstance(line,str): t,b,s,c=line,bold,sz,color else: t=line[0]; b=line[1] if len(line)>1 else bold s=line[2] if len(line)>2 else sz; c=line[3] if len(line)>3 else color p=tf.paragraphs[0] if first else tf.add_paragraph(); first=False p.alignment=align r=p.add_run(); r.text=t; r.font.size=Pt(s); r.font.bold=b r.font.color.rgb=c; r.font.name="Calibri" def img(sl,name,x,y,w,h=None): p=os.path.join(IMG,name) if not os.path.exists(p): return try: if h: sl.shapes.add_picture(p,Inches(x),Inches(y),Inches(w),Inches(h)) else: sl.shapes.add_picture(p,Inches(x),Inches(y),width=Inches(w)) except: pass def cap(sl,t,x,y,w): box(sl,x,y,w,0.3,RGBColor(0xE8,0xF0,0xFB)) txt(sl,t,x+0.05,y+0.02,w-0.1,0.28,sz=10,italic=True,color=DARK) def hdr(sl,title,sub=None): box(sl,0,0,13.333,7.5,LGRAY) box(sl,0,0,13.333,0.92,NAVY) box(sl,0,0.92,13.333,0.07,ORANGE) txt(sl,title,0.32,0.1,12.6,0.78,sz=28,bold=True,color=WHITE) if sub: txt(sl,sub,0.32,0.95,12.6,0.35,sz=14,italic=True,color=BLUE) def sec(sl,title,sub=None): box(sl,0,0,13.333,7.5,NAVY) box(sl,0,3.1,13.333,0.1,ORANGE) for cx,cy,cr in [(12.5,1.0,2.5),(1.0,6.5,2.0),(-0.3,2.5,1.8)]: sh=sl.shapes.add_shape(9,Inches(cx-cr/2),Inches(cy-cr/2),Inches(cr),Inches(cr)) sh.fill.solid(); sh.fill.fore_color.rgb=RGBColor(0x1A,0x3F,0x6F); sh.line.fill.background() txt(sl,title,1.2,2.6,10.8,1.5,sz=42,bold=True,color=WHITE,align=PP_ALIGN.CENTER) if sub: txt(sl,sub,1.2,4.15,10.8,0.6,sz=20,italic=True,color=RGBColor(0xAD,0xD8,0xFF),align=PP_ALIGN.CENTER) def bullets(sl,items,x,y,w,h,sz=14,title=None,tc=BLUE,lcolor=BLUE): box(sl,x,y,w,h,WHITE); box(sl,x,y,0.07,h,lcolor) yo=y+0.15 if title: txt(sl,title,x+0.15,yo,w-0.2,0.35,sz=15,bold=True,color=tc); yo+=0.38 tb=sl.shapes.add_textbox(Inches(x+0.15),Inches(yo),Inches(w-0.2),Inches(h-(yo-y)-0.1)) tf=tb.text_frame; tf.word_wrap=True tf.margin_left=0;tf.margin_right=0;tf.margin_top=0;tf.margin_bottom=0 first=True for item in items: p=tf.paragraphs[0] if first else tf.add_paragraph(); first=False p.alignment=PP_ALIGN.LEFT; r=p.add_run() r.text=(" "+item.lstrip()) if item.startswith(" ") else ("• "+item) r.font.size=Pt(sz); r.font.color.rgb=DARK; r.font.name="Calibri" def ref_line(sl,text,y): txt(sl,text,0.4,y,12.5,0.28,sz=10,italic=True,color=MGRAY) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 26 – Superficial Endometriosis # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Superficial Peritoneal Endometriosis – Imaging Limitations") bullets(sl,[ "Lesions <5 mm – often BELOW MRI spatial resolution", "Laparoscopy remains gold standard for superficial disease", "MRI role: incidental T1-bright peritoneal foci on fat-sat T1WI", "T2WI: thin T2-hypointense line along posterior pelvic peritoneum may be the only finding", "", "VanBuren 2024 – key point:", " A NEGATIVE MRI does NOT exclude superficial endometriosis", " MRI should be reported with this limitation stated", "", "IDEA Group 2025 Addendum:", " New standardized TVUS protocol specifically for superficial endometriosis", " Systematic evaluation of peritoneal surfaces with TVUS", " Shift toward non-invasive diagnosis even for superficial disease", "", "Practical implication:", " If symptoms persist and MRI/TVUS negative → laparoscopy still indicated", " MRI negative = diagnoses endometrioma and DIE reliably, NOT superficial", ],0.35,1.05,7.5,6.2,sz=13.5) box(sl,8.1,1.05,3.2,3.0,WHITE) img(sl,"image41.png",8.15,1.1,3.1) cap(sl,"Fig 15A – T2 peritoneal line",8.1,3.8,3.2) box(sl,11.5,1.05,1.5,3.0,WHITE) img(sl,"image42.png",11.55,1.1,1.4) cap(sl,"Fig 15B – T1 foci",11.5,3.8,1.5) bullets(sl,[ "Sensitivity of eMRI for deep+ovarian endometriosis: 91–93.5%", "Specificity: 86–87.5%", "Superficial lesions: significantly lower sensitivity", ],8.1,4.05,5.0,2.8,sz=13,title="Diagnostic Accuracy Data",tc=TEAL,lcolor=TEAL) ref_line(sl,"Avery JC et al. Fertil Steril 2024 (Systematic Review) | PMID 38110143",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 27 – EAOC: Malignancy in Endometriosis # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"EAOC – Endometriosis-Associated Ovarian Carcinoma") bullets(sl,[ "1.2–1.8× increased relative risk of ovarian cancer vs. general population", "Younger age at presentation than sporadic ovarian cancer; higher proportion early-stage", "Histological types: Clear Cell Carcinoma (50–74% from endometriosis) and Endometrioid Carcinoma", "20–30% of endometrioid carcinomas have concurrent endometrial hyperplasia/carcinoma", "", "Most sensitive MRI sign: ENHANCING MURAL NODULE within endometriotic cyst", "", "Key MRI features distinguishing EAOC from benign endometrioma:", " EAOC: Loss of T2 shading (diluted by non-hemorrhagic fluid from tumor)", " EAOC: Enhancing solid component or mural nodule", " EAOC: Restricted diffusion (low ADC)", " EAOC: Mean cyst diameter 11.2 cm (vs. smaller benign cysts)", " Benign: T2 shading present in 81% of cases", " EAOC: T2 shading in only 33% of cases", "", "Beware mimics: polypoid endometriosis, decidualized endometrioma can also show mural nodules", "Distinguishing: absence of vascularity on US + no enhancement on MRI = benign", ],0.35,1.05,7.5,6.2,sz=13) box(sl,8.1,1.05,4.9,6.2,WHITE) img(sl,"image52.png",8.15,1.1,4.8) cap(sl,"Fig 20 – Clear cell carcinoma: enhancing solid component + diffusion restriction in pre-existing endometrioma",8.1,6.7,4.9) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 28 – TVUS vs MRI – Comparison # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"TVUS vs MRI – Complementary Roles (VanBuren 2024)") rows=[ ("Spatial resolution","Higher for bowel wall","Lower (improving with 3T/3D)"), ("Pelvic overview","Limited field of view","Excellent global assessment"), ("Dynamic assessment","Real-time sliding sign for adhesions","Static imaging only"), ("Operator dependence","High – requires trained sonographer","Lower – standardized protocol"), ("Extrapelvic disease","Limited","Excellent (uterosacral, pelvic wall, nerve)"), ("Malignancy assessment","Good (Doppler, IETA)","Excellent (enhancement, DWI)"), ("Kidneys/ureters","Limited","Excellent – mandatory sequence"), ("Bowel wall invasion depth","HIGHER spatial resolution","Good for location, less depth detail"), ("Cost/Availability","Low cost, widely available","Higher cost, limited availability"), ("Recommended use","First-line; screening; adhesions","Preoperative mapping; complex/DIE; TVUS inconclusive"), ] hdrs_c=["Feature","TVUS","MRI"] cw=[3.8,4.2,4.2]; cx=[0.35,4.2,8.45] for ci,(h,w,x) in enumerate(zip(hdrs_c,cw,cx)): col=NAVY if ci==0 else TEAL if ci==1 else BLUE box(sl,x,1.05,w,0.45,col) txt(sl,h,x+0.08,1.09,w-0.12,0.38,sz=14,bold=True,color=WHITE) for ri,row in enumerate(rows): y=1.52+ri*0.58; bg=LGRAY if ri%2==0 else WHITE for ci,(val,w,x) in enumerate(zip(row,cw,cx)): box(sl,x,y,w,0.56,bg) c=GREEN if "Higher" in val or "Excellent" in val else RED if "Limited" in val or "Lower" in val else DARK txt(sl,val,x+0.08,y+0.04,w-0.12,0.5,sz=11.5,color=c,wrap=True) ref_line(sl,"VanBuren et al. Radiology 2024;312(3):e233482",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 29 – Structured Reporting Template # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Structured Reporting – VanBuren 2024 Framework") box(sl,0.35,1.05,12.6,0.45,RED) txt(sl,"Free-text reports miss key compartments in up to 75% of cases – structured templates increase completeness by 30 percentage points", 0.5,1.09,12.3,0.38,sz=14,bold=True,color=WHITE,align=PP_ALIGN.CENTER) sections=[ ("1. CLINICAL CONTEXT","Indication / relevant history / prior surgery / hormonal therapy"), ("2. TECHNIQUE","Field strength, sequences, patient prep, contrast use"), ("3. ADNEXAL FINDINGS","Both ovaries: endometrioma size/multiplicity/bilaterality/residual parenchyma\nAssociated dilated tube (hematosalpinx)"), ("4. ANTERIOR COMPARTMENT","Bladder: nodule size/location/depth/distance to UVJ\nUreter: extrinsic vs intrinsic/level of involvement/hydronephrosis"), ("5. MIDDLE COMPARTMENT","Uterus: version+flexion, torus uterinus, external adenomyosis, serosal involvement\nAdnexal structures: round ligament"), ("6. POSTERIOR COMPARTMENT","Cul-de-sac: obliteration Y/N\nUSL: smooth vs nodular, bilateral\nRectovaginal septum: thickness/T1-bright foci\nVagina: nodule size/location\nRectosigmoid: distance to anus, longitudinal extent, number, depth, mucosal"), ("7. LATERAL COMPARTMENT","Parametria: mediolateral/posterolateral involvement\nUreter proximity, nerve involvement"), ("8. EXTRAPELVIC","Abdominal wall, appendix, cecum, ileocaecal junction, sigmoid\nDiaphragm (if dedicated sequence acquired)"), ("9. IMPRESSION","Disease burden summary, classification (dPEI or #Enzian recommended)\nSurgical complexity prediction"), ] for i,( label,content) in enumerate(sections): xo=0.35+(i%3)*4.3; yo=1.6+(i//3)*1.72 box(sl,xo,yo,4.05,1.62,WHITE) box(sl,xo,yo,4.05,0.38,NAVY if i<3 else BLUE if i<6 else TEAL) txt(sl,label,xo+0.08,yo+0.04,3.9,0.32,sz=11,bold=True,color=WHITE) txt(sl,content,xo+0.08,yo+0.42,3.9,1.14,sz=10.5,color=DARK,wrap=True) ref_line(sl,"VanBuren et al. Radiology 2024 | Mind the gap: PMC12886655 (underreporting study)",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 30 – Why Structured Reporting Matters: Evidence # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Evidence: Why Structured Reporting Matters") box(sl,0.35,1.05,12.6,5.7,WHITE) box(sl,0.35,1.05,0.08,5.7,ORANGE) txt(sl,"Recent Study: 'Mind the gap – underreporting of key compartments in endometriosis MRI'", 0.55,1.12,12.2,0.4,sz=15,bold=True,color=NAVY) txt(sl,"Single-centre 186 pelvic MRI reports (2022–2025): Free-text vs General template vs Endometriosis-specific template", 0.55,1.55,12.2,0.35,sz=13,italic=True,color=MGRAY) rows=[ ("Bladder (FB)","25.5%","29.2%","71.7%","12.8×"), ("Rectum (C)","30.0%","45.8%","75.0%","6.5×"), ("Uterus/Adenomyosis (FA)","40.0%","45.8%","80.0%","5.9×"), ("Vagina/Rectovaginal (A)","45.1%","33.3%","81.7%","5.4×"), ("Intestine (FI)","35.0%","25.0%","65.0%","5.1×"), ("Ureter (FU)","25.5%","37.5%","71.7%","4.6×"), ("USL/Parametria (B)","25.5%","16.7%","71.7%","3.1×"), ("Fallopian Tubes (T)","33.3%","37.5%","65.0%","2.5×"), ] hdrs2=["Compartment","Free-text","General Template","Endo-specific Template","Odds Ratio (vs free-text)"] cw2=[3.0,2.0,2.5,2.8,1.95]; cx2=[0.45,3.5,5.55,8.1,11.0] for ci,(h,w,x) in enumerate(zip(hdrs2,cw2,cx2)): box(sl,x,1.98,w,0.4,NAVY) txt(sl,h,x+0.06,2.01,w-0.1,0.35,sz=11,bold=True,color=WHITE,align=PP_ALIGN.CENTER) for ri,row in enumerate(rows): y=2.42+ri*0.52; bg=LGRAY if ri%2==0 else WHITE for ci,(val,w,x) in enumerate(zip(row,cw2,cx2)): box(sl,x,y,w,0.5,bg) c=RED if ci==1 else GREEN if ci==3 else ORANGE if "×" in val and float(val.replace("×",""))>5 else DARK txt(sl,val,x+0.06,y+0.06,w-0.1,0.4,sz=11.5,bold=(ci==3),color=c,align=PP_ALIGN.CENTER,wrap=False) txt(sl,"Overall completeness: Free-text 50% vs Endo-specific template 80% (p<0.0001)", 0.45,6.7,12.2,0.32,sz=13,bold=True,color=RED) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 31 – Atypical / Challenging Manifestations # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Atypical & Challenging Manifestations (VanBuren 2024)") cases=[ ("Decidualized\nEndometrioma","Occurs in pregnancy. Mural nodule ± vascularity mimics malignancy. Key: T2-HIGH solid component, ADC > ovarian cancer, T1-bright cyst fluid, height <11 mm. TEMPORARY – follow up postpartum.",PURPLE), ("Scar Endometriosis","Post-cesarean/hysterectomy scar. US: hypoechoic heterogeneous mass ± vascularity at scar site. MRI: T2-low nodule + T2-bright foci + enhancement in abdominal/pelvic wall. Cyclic pain history key.",TEAL), ("Hematosalpinx","Dilated tube filled with hemorrhagic content. T1-bright/T2-dark tubular adnexal structure. May be only imaging sign of ipsilateral endometriosis.",BLUE), ("Postmenopausal\nEndometriosis","Usually regresses. Persistence/growth → malignancy risk. Loss of typical T2 shading. Consider EAOC. Chamie et al. 2024.",ORANGE), ("Extrapelvic\nEndometriosis","Diaphragm (catamenial pneumothorax), thorax, abdominal wall, surgical scars, sciatic nerve. MRI: T2-dark nodule ± T1-bright foci at atypical sites.",NAVY), ("Seromucinous\nBorderline Tumor","30–70% associated with endometriosis. 'Nodule-in-cyst' appearance. Papillary projections: T2-bright + homogeneous enhancement.",RED), ] for i,(name,desc,col) in enumerate(cases): xo=0.35+(i%3)*4.3; yo=1.1+(i//3)*2.75 box(sl,xo,yo,4.05,2.55,WHITE) box(sl,xo,yo,4.05,0.55,col) txt(sl,name,xo+0.1,yo+0.07,3.85,0.48,sz=14,bold=True,color=WHITE) txt(sl,desc,xo+0.1,yo+0.62,3.85,1.85,sz=12.5,color=DARK,wrap=True) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 32 – Routine TVUS for Endometriosis: SRU Consensus 2024 # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"SRU 2024 Consensus: Routine Pelvic US for Endometriosis") txt(sl,"Companion paper by VanBuren's group: Young SW, Jha P, VanBuren W, et al. Radiology 2024;311(1):e232191", 0.35,1.0,12.6,0.35,sz=12,italic=True,color=MGRAY) bullets(sl,[ "Routine pelvic US (non-dedicated) plays a SCREENING role for endometriosis", "Radiologists performing routine pelvic US should evaluate for:", " - Endometriomas: ground-glass echogenicity, O-RADS risk stratification", " - Posterior compartment: evaluate for fixed uterus, obliterated cul-de-sac", " - Note: routine US is NOT equivalent to dedicated/advanced endometriosis TVUS", "", "SRU 2024 consensus key recommendations:", " 1. Describe endometriomas by O-RADS criteria", " 2. Evaluate for 'sliding sign' if posterior disease suspected", " 3. Comment on uterine mobility and cul-de-sac obliteration", " 4. If DIE suspected → recommend dedicated advanced TVUS or MRI", "", "Recent validation (Shenoy-Bhangle et al. Acad Radiol 2026):", " Routine US using static 2024 SRU criteria: limited sensitivity for deep endometriosis", " Confirms dedicated advanced TVUS/MRI needed for complete mapping", ],0.35,1.45,8.2,5.85,sz=14) bullets(sl,[ "SRU 2024 Criteria (routine US):", "Endometrioma: O-RADS 2/3", "Fixed uterus/kissing ovaries", "Obliterated cul-de-sac", "Bowel tethering", "", "If ANY positive →", "recommend dedicated", "advanced imaging", ],8.7,1.45,4.3,5.85,sz=13,title="Quick Screening Guide",tc=TEAL,lcolor=TEAL) ref_line(sl,"Young SW et al. Radiology 2024;311:e232191 | Shenoy-Bhangle AS et al. Acad Radiol 2026",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 33 – Extrapelvic Endometriosis # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Extrapelvic Endometriosis – Radiologist Awareness") bullets(sl,[ "Abdominal wall / scar: post-cesarean, post-laparoscopy port sites", " US: heterogeneous hypoechoic mass ± vascularity at scar site", " MRI: T2-dark nodule ± T2-bright foci + enhancement, within scar tract", "", "Diaphragm / thorax:", " Catamenial pneumothorax (cyclic with menses) – right-sided predominance", " CT/MRI: nodule on right hemidiaphragm", "", "Appendix / Cecum (VanBuren 2024):", " 5–6% of bowel endometriosis involves appendix", " Mimics acute/chronic appendicitis", " MRI: T2-dark appendiceal wall thickening ± T2-bright foci", "", "Pelvic nerve involvement (Colak et al. Radiographics 2024):", " Sciatic nerve → cyclic sciatica", " 3D T2W MRI essential to follow nerve course", "", "VanBuren message: 'Understanding mild through advanced manifestations, including", "malignancy evaluation, is within the scope and breadth of radiologists' interpretation.'", ],0.35,1.05,7.5,6.2,sz=13.5) box(sl,8.1,1.05,2.9,3.0,WHITE) img(sl,"image74.jpeg",8.15,1.1,2.8) cap(sl,"Fig 26 – USG scar endometriosis with vascularity",8.1,3.8,2.9) box(sl,11.2,1.05,1.8,3.0,WHITE) img(sl,"image77.png",11.25,1.1,1.7) cap(sl,"Fig 27 – MRI: scar DIE at cesarean site",11.2,3.8,1.8) bullets(sl,[ "Cyclic symptoms at ANY site = think endometriosis", "CT: limited but shows hydronephrosis, bowel obstruction", "MRI: preferred for soft tissue characterization", ],8.1,4.05,5.0,2.8,sz=13,title="CT Role (Limited)",tc=TEAL,lcolor=TEAL) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 34 – Classification Systems in VanBuren Context # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Classification Systems – MRI Staging Context") rows=[ ("rASRM","American Society for Reproductive Medicine. Score I–IV. Based on laparoscopic findings. Limited MRI applicability. Does NOT predict surgical complexity well."), ("#Enzian","Comprehensive anatomical staging. Compartments A (rectovaginal/vagina), B (USLs/parametria), C (rectum), F (other). Most studied MRI classification. 2024 International Consensus endorsed it. Poor reproducibility for B lesions."), ("dPEI\n(deep pelvic\nendometriosis index)","ESUR 2025 preferred system. 9 pelvic compartments + 1 extrapelvic. 1 point per involved compartment. Mild 0–3 / Moderate 4–6 / Severe ≥7. Predicts surgical complexity. +1 for vaginal/trigone/ureteral dilatation."), ("ENDO-STAGE","MRI-specific classification. Includes peritoneal, ovarian, deep, and adhesion scoring. Less widely adopted."), ] hdrs_c=["System","Description & Clinical Use"] cw=[2.5,9.9]; cx=[0.35,2.9] for ci,(h,w,x) in enumerate(zip(hdrs_c,cw,cx)): box(sl,x,1.05,w,0.44,NAVY) txt(sl,h,x+0.08,1.09,w-0.12,0.36,sz=14,bold=True,color=WHITE) for ri,row in enumerate(rows): h=1.38 if ri==2 else 1.05 y=1.52+sum([1.38 if j==2 else 1.05 for j in range(ri)]) bg=LGRAY if ri%2==0 else WHITE for ci,(val,w,x) in enumerate(zip(row,cw,cx)): box(sl,x,y,w,h,bg) c=GREEN if ri==2 else DARK txt(sl,val,x+0.08,y+0.05,w-0.12,h-0.1,sz=13,color=c,wrap=True,bold=(ci==0)) ref_line(sl,"VanBuren et al. Radiology 2024 | ESUR Consensus Eur Radiol 2025 | Condous G et al. Eur J Radiol 2024",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 35 – Pitfalls & Common Errors # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Pitfalls & Common Interpretive Errors") pitfalls=[ ("PITFALL 1","Mistaking hemorrhagic functional cyst for endometrioma","Check for T2 dark spots (present in endometrioma, absent in hemorrhagic cyst). Follow-up at 6 wks – functional cyst resolves"), ("PITFALL 2","Missing DIE because T1 bright foci are absent","T1 hyperintensity NOT required for DIE. Chronic fibrotic DIE = T2-dark only. Report T2-dark nodules regardless of T1 signal."), ("PITFALL 3","Missing ureteral involvement (silent hydronephrosis)","Always include kidney sequence. Hydronephrosis may be ONLY sign. Always report fat plane between DIE and ureter."), ("PITFALL 4","Mistaking decidualized endometrioma for malignancy in pregnant patient","T2-HIGH solid component (not T2-low like EAOC). High ADC. T1-bright cyst. Component height <11 mm. Temporary."), ("PITFALL 5","Free-text report missing lateral compartment and USLs","Use structured template. USLs seen on axial T2WI at cervical level. Check parametria in all DIE cases."), ("PITFALL 6","Mistaking adenomyosis for DIE or leiomyoma","Adenomyosis: JZ involved, inside-out. DIE: JZ preserved, outside-in. Adenomyoma: T2-low + T2-bright foci, oval shape, ill-defined margins."), ] for i,(label,pit,sol) in enumerate(pitfalls): xo=0.35+(i%2)*6.45; yo=1.1+(i//2)*1.9 box(sl,xo,yo,6.1,1.78,WHITE) box(sl,xo,yo,1.3,1.78,RED) txt(sl,label,xo+0.07,yo+0.25,1.15,0.5,sz=12,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,"Problem: "+pit,xo+1.45,yo+0.06,4.55,0.55,sz=12,bold=True,color=RED,wrap=True) txt(sl,"Solution: "+sol,xo+1.45,yo+0.68,4.55,1.0,sz=12,color=DARK,wrap=True) ref_line(sl,"Elias Z et al. Abdom Radiol 2026 | VanBuren et al. Radiology 2024",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 36 – Surgical Communication # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Communicating with Surgeons – What They Need to Know") box(sl,0.35,1.05,12.6,0.45,NAVY) txt(sl,"Your MRI report DIRECTLY determines whether a urology team, colorectal surgeon, or specialist center is involved", 0.5,1.09,12.3,0.38,sz=15,bold=True,color=WHITE,align=PP_ALIGN.CENTER) items=[ ("Bowel wall invasion depth\n+ distance to anal verge","Determines: bowel shaving vs discoid excision vs segmental resection\nColorectal surgeon involvement if muscularis invaded",ORANGE), ("Ureteral encasement\n+ hydronephrosis","Determines: ureterolysis vs stenting vs partial ureterectomy\nUrology involvement",TEAL), ("Bladder depth + UVJ\ndistance","Determines: partial cystectomy vs transurethral resection\nDistance to UVJ critical for ureteral reimplantation risk",BLUE), ("Cul-de-sac obliteration\n+ USL involvement","Determines: surgical difficulty, need for expert center\nIncomplete cul-de-sac access affects laparoscopic approach",NAVY), ("Pelvic sidewall / nerve\nproximity","Determines: nerve-sparing approach\nNeurologist/urogynaecologist may be needed",PURPLE), ("Disease extent (dPEI score)","Predicts surgical complexity and OR time\nHelps patient counseling pre-operatively",GREEN), ] for i,(title,imp,col) in enumerate(items): xo=0.35+(i%3)*4.3; yo=1.65+(i//2)*1.92 box(sl,xo,yo,4.05,1.78,WHITE) box(sl,xo,yo,4.05,0.5,col) txt(sl,title,xo+0.1,yo+0.06,3.85,0.44,sz=13,bold=True,color=WHITE) txt(sl,imp,xo+0.1,yo+0.56,3.85,1.15,sz=12,color=DARK,wrap=True) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 37 – Summary of VanBuren Article Key Messages # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Key Messages – VanBuren et al. 2024") key_msgs=[ ("1","Compartment-based, pattern-recognition approach is ESSENTIAL for endometriosis MRI interpretation","Use a structured template covering all 4 compartments on every dedicated MRI"), ("2","T1 hyperintensity increases specificity but is NOT required to diagnose DIE","Do not dismiss a T2-dark nodule because T1 signal is absent"), ("3","MRI and TVUS are COMPLEMENTARY, not competing modalities","TVUS: dynamic assessment, bowel wall depth; MRI: global pelvic map, extrapelvic, malignancy"), ("4","Structured reporting significantly improves compartment documentation vs free-text","Bladder is missed in 75% of free-text reports; structured template drops this to <30%"), ("5","Negative MRI does NOT exclude superficial endometriosis","State this limitation explicitly in every report when clinical suspicion is high"), ("6","Endometriosis is within the full scope of radiologists' expertise","Including malignancy detection, extrapelvic disease, and surgical planning communication"), ] for i,(num,msg,impl) in enumerate(key_msgs): yo=1.1+i*1.02 box(sl,0.35,yo,12.6,0.96,LGRAY if i%2==0 else WHITE) box(sl,0.35,yo,0.55,0.96,NAVY) txt(sl,num,0.37,yo+0.12,0.5,0.5,sz=22,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,msg,1.05,yo+0.05,7.4,0.48,sz=13,bold=True,color=NAVY,wrap=True) txt(sl,"→ "+impl,1.05,yo+0.55,11.5,0.38,sz=12,italic=True,color=DARK,wrap=True) ref_line(sl,"VanBuren et al. Radiology 2024;312(3):e233482",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 38 – Article Strengths & Limitations # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Critical Appraisal – Strengths & Limitations") strengths=[ "34 co-authors – multidisciplinary (radiologists, gynecologists, surgeons, pathologists)", "SAR Disease-Focused Panel – highest available US consensus body for this topic", "Covers full spectrum: superficial → DIE → EAOC → extrapelvic", "Both MRI AND TVUS addressed equally (not MRI-only)", "Clinical integration: what surgeons need from the report", "High impact: 63+ citations within 1 year of publication", "Practical reporting language and checklists provided", ] limits=[ "State-of-the-art review – NOT a systematic review or meta-analysis (lower evidence tier)", "No formal GRADE methodology or Delphi process (vs. ESUR 2025 consensus)", "Primarily US-based panel – international variation in practice not addressed", "No formal sensitivity/specificity data – cites existing literature for accuracy", "Imaging examples may not cover all racial/ethnic presentations", "Rapidly evolving field – AI diagnostics and 3D protocols not fully addressed", ] box(sl,0.35,1.05,6.1,5.75,WHITE) box(sl,0.35,1.05,6.1,0.44,GREEN) txt(sl,"STRENGTHS",0.45,1.09,5.9,0.36,sz=14,bold=True,color=WHITE) for j,s in enumerate(strengths): txt(sl,"✓ "+s,0.45,1.56+j*0.73,5.9,0.68,sz=12.5,color=DARK,wrap=True) box(sl,6.7,1.05,6.3,5.75,WHITE) box(sl,6.7,1.05,6.3,0.44,RED) txt(sl,"LIMITATIONS",6.8,1.09,6.1,0.36,sz=14,bold=True,color=WHITE) for j,l in enumerate(limits): txt(sl,"✗ "+l,6.8,1.56+j*0.84,6.1,0.78,sz=12,color=DARK,wrap=True) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 39 – Section C divider # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() sec(sl,"PART C: BWH Harvard Protocol","rad.bwh.harvard.edu/mri-of-endometriosis") # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 40 – BWH Protocol Overview # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"BWH/Harvard MRI Endometriosis Protocol – Online Reference") txt(sl,"Source: rad.bwh.harvard.edu/mri-of-endometriosis (RAD-ASSIST, Dept. of Radiology, Mass General Brigham)", 0.35,1.0,12.6,0.32,sz=12,italic=True,color=MGRAY) bullets(sl,[ "Publicly accessible protocol reference from Brigham & Women's / Harvard Medical School", "Covers every anatomical site with dedicated MRI examples and reporting checklists", "", "Sites with dedicated reporting guidance:", " Bladder, vagina, fallopian tubes (hematosalpinx)", " Torus uterinus, rectouterine/cervical space", " Uterosacral ligaments, rectosigmoid colon", " Lateral compartment (parametria, pelvic sidewall)", "", "For each site, BWH protocol specifies:", " What to look for (T2 and T1 appearance)", " What to report (mandatory elements)", " Illustrative MRI cases with labeled sequences", ],0.35,1.38,7.5,5.8,sz=14) box(sl,8.1,1.38,4.9,5.8,WHITE) box(sl,8.1,1.38,4.9,0.45,TEAL) txt(sl,"BWH Reporting Framework",8.2,1.42,4.7,0.37,sz=14,bold=True,color=WHITE) mtxt(sl,[ ("Active Glandular DIE:",True,13,BLUE), ("T2: intermediate SI, T1: bright foci\n(viable glands + hemorrhage)",False,12,DARK), "", ("Chronic Stromal Fibrotic DIE:",True,13,NAVY), ("T2: dark only, no T1 bright\n(fibrosis dominant, no active glands)",False,12,DARK), "", ("Key: Both types require\nsurgical excision",True,13,RED), ],8.2,1.9,4.7,5.1,sz=12) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 41 – BWH Posterior Compartment Specifics # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"BWH Protocol – Posterior Compartment Reporting Details") rows_bwh=[ ("Rectouterine/\nCervical Space","Obliteration causes pronounced uterine retroversion/retroflexion", "• Lesion size\n• Obliteration: Y/N\n• If rectovaginal disease: present (extraperitoneal → deeper dissection)","Impedes laparoscopic cul-de-sac evaluation"), ("Uterosacral\nLigaments","Extends from torus uterinus towards sacrum. MOST COMMON posterior site", "• Smooth vs irregular/nodular thickening\n• Asymmetric shortening\n• Unilateral vs bilateral","Most common posterior DIE location"), ("Rectosigmoid\nColon","Chronic fibrotic DIE: fan-shaped T2-dark lesion in muscularis", "• Wall thickening: present + measure\n• Mushroom cap sign: Y/N\n• Longitudinal extent\n• Distance from anal verge\n• Number of nodules\n• Mucosal involvement","Determines bowel shaving vs resection need"), ("Vagina","Most often posterior fornix. Nodular thickening or polypoid mass", "• Lesion size\n• Location\n• Depth of invasion\n• Vaginal cuff tethering","Extraperitoneal – requires specific approach"), ("Fallopian Tubes","Hematosalpinx = T2 hypointense/T1 hyperintense tubular structure in adnexa", "• Presence and side\n• May be the ONLY finding of endometriosis on that side","Indirect sign – document bilateral"), ] cw=[2.2,3.2,4.2,2.75]; cx=[0.35,2.6,5.85,10.12] hdrs_bwh=["Structure","Key Features","Report Should Include","Surgical Relevance"] for ci,(h,w,x) in enumerate(zip(hdrs_bwh,cw,cx)): box(sl,x,1.05,w,0.42,NAVY) txt(sl,h,x+0.07,1.09,w-0.1,0.35,sz=12,bold=True,color=WHITE) for ri,row in enumerate(rows_bwh): y=1.5+ri*1.15; bg=LGRAY if ri%2==0 else WHITE for ci,(val,w,x) in enumerate(zip(row,cw,cx)): box(sl,x,y,w,1.12,bg) txt(sl,val,x+0.07,y+0.04,w-0.1,1.04,sz=11,color=DARK,wrap=True) ref_line(sl,"BWH Harvard: rad.bwh.harvard.edu/mri-of-endometriosis | VanBuren et al. Radiology 2024",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 42 – BWH Anterior Compartment # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"BWH Protocol – Anterior Compartment & Uterus Reporting Details") items=[ ("BLADDER","• Posterior wall most common (dome or trigone)\n• T1 isointense, T2 hypointense, increased/delayed enhancement vs detrusor\n• Report: lesion size + location + depth of detrusor invasion + distance from both UVJs\n• Trigone involvement = complex surgery (urologist essential)",TEAL), ("UTERUS","• Report uterine version (angle relative to vagina)\n• Report uterine flexion (angle of uterine body vs cervix)\n• Exaggerated retroversion/retroflexion → strong indicator of posterior DIE\n• Torus uterinus: very common DIE site (origin of USLs)\n• Report: lesion size + location + depth from serosa + distance from endometrium",BLUE), ("URETERS","• Always check for ureteral dilatation (indirect sign)\n• Mandatory kidney sequence in all pelvic endometriosis MRI\n• Extrinsic (fat plane obliteration) vs intrinsic (luminal narrowing)\n• Report level and length of involvement",NAVY), ("LATERAL\nCOMPARTMENT","• Anterior distal round ligament\n• Mediolateral parametrium\n• Posterolateral parametrium\n• Pelvic sidewall / vessels\n• Requires dedicated T2W axial at cervix level ± 3D T2W",ORANGE), ] for i,(name,content,col) in enumerate(items): xo=0.35+(i%2)*6.45; yo=1.1+(i//2)*2.85 box(sl,xo,yo,6.1,2.68,WHITE) box(sl,xo,yo,1.5,2.68,col) txt(sl,name,xo+0.12,yo+0.7,1.25,0.75,sz=14,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,content,xo+1.65,yo+0.1,4.35,2.5,sz=12.5,color=DARK,wrap=True) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 43 – BWH Key Sequences Summary # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"BWH Protocol – Key MRI Sequences Summary") seqs=[ ("Sagittal T2W\n(whole pelvis)","Roadmap sequence. Uterus orientation, cul-de-sac, rectovaginal space, mushroom cap sign, bladder dome",NAVY,"MANDATORY"), ("Axial T2W\n(uterus oblique)","Adnexa, parametria, junctional zone, uterosacral ligaments, ovaries",BLUE,"MANDATORY"), ("Coronal T2W","Ovaries, ureters, kidneys (indirect), ligaments, ovarian fossa",TEAL,"MANDATORY"), ("Axial T1W\nfat-saturated","Hemorrhagic foci identification. Endometrioma vs teratoma. Peritoneal implants. Hematosalpinx",ORANGE,"MANDATORY"), ("Kidney sequence\n(e.g. coronal HASTE)","Hydronephrosis detection. Ureteral dilatation. Always included.",RED,"MANDATORY"), ("3D T2W","Lateral compartment, pelvic nerve assessment. High spatial resolution. Multiplanar reformats",GREEN,"STRONGLY RECOMMENDED"), ("DWI","Malignancy evaluation. ADC values in EAOC vs decidualization. Bowel wall assessment",PURPLE,"RECOMMENDED"), ("DCE\n(dynamic contrast)","Solid component enhancement in EAOC. Not universally required for DIE alone",MGRAY,"OPTIONAL"), ] for i,(name,use,col,req) in enumerate(seqs): xo=0.35+(i%4)*3.22; yo=1.1+(i//4)*2.75 box(sl,xo,yo,3.05,2.55,WHITE) box(sl,xo,yo,3.05,0.5,col) txt(sl,name,xo+0.1,yo+0.06,2.85,0.42,sz=13,bold=True,color=WHITE) txt(sl,req,xo+0.1,yo+0.52,2.85,0.28,sz=11,bold=True,color=col) txt(sl,use,xo+0.1,yo+0.82,2.85,1.65,sz=11.5,color=DARK,wrap=True) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 44 – Section D divider # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() sec(sl,"PART D: Supporting Evidence & Guidelines","2024–2026 Landmark References") # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 45 – ESUR 2025 Consensus # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"ESUR 2025 Consensus MRI Guidelines – Protocol & Lexicon") txt(sl,"Thomassin-Naggara I, Dolciami M, Chamie LP, et al. Eur Radiol 2025. PMID: 40425755", 0.35,1.0,12.6,0.32,sz=12,italic=True,color=MGRAY) bullets(sl,[ "20-expert DELPHI process; updates 2017 ESUR guidelines", "Mandatory sequences: T2W multiplanar + T1W fat-sat + kidney visualization", "Patient prep: fasting + antiperistaltic + moderate bladder fill", "", "Standardized reporting using compartmental analysis:", " Superficial endometriosis: T1WFS high SI foci on peritoneum", " Micro-endometrioma: T1WFS intraovarian focus ≤1 cm", " Endometrioma: size + multiplicity + bilaterality + residual ovary", " Bladder: size + location + distance to UVJ", " USL: abnormal if nodule/spiculation in ≥2 planes OR T1 bright spot", " Rectosigmoid: location + number + extent + distance to anus + wall thickening", " Lateral: round ligament + parametria (mediolateral + posterolateral)", " Extrapelvic: abdominal wall + appendix + cecum + ileocaecal junction + sigmoid", "", "Classification: dPEI preferred over #Enzian for MRI", "Structured reporting over free-text: strong consensus agreement", ],0.35,1.38,8.5,5.8,sz=13) box(sl,9.1,1.38,3.9,5.8,WHITE) box(sl,9.1,1.38,3.9,0.42,TEAL) txt(sl,"dPEI Score",9.2,1.42,3.7,0.35,sz=14,bold=True,color=WHITE) mtxt(sl,[ ("9 pelvic + 1 extrapelvic compartments",False,12,DARK), ("1 point per compartment with DIE",False,12,DARK), "+1 vaginal/trigone/ureteral dilatation","", ("Mild: 0–3",True,13,GREEN),("Moderate: 4–6",True,13,ORANGE),("Severe: ≥7",True,13,RED), "","Predicts surgical complexity","Facilitates MDT communication", ],9.2,1.88,3.7,5.2,sz=12) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 46 – ACR Appropriateness Criteria 2024 # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"ACR Appropriateness Criteria – Endometriosis (2024)") txt(sl,"Feldman MK, Wasnik AP, et al. J Am Coll Radiol 2024;21(11S):S384–S395. PMID: 39488350", 0.35,1.0,12.6,0.32,sz=12,italic=True,color=MGRAY) rows_acr=[ ("TVUS + transabdominal US (combined)","Usually Appropriate","O (no radiation)"), ("TVUS alone","Usually Appropriate","O (no radiation)"), ("MRI pelvis without contrast","Usually Appropriate","O (no radiation)"), ("MRI pelvis without AND with IV contrast","Usually Appropriate","O (no radiation)"), ("CT pelvis with IV contrast","Usually NOT Appropriate","☢☢☢ (moderate radiation)"), ("CT pelvis without IV contrast","Usually NOT Appropriate","☢☢☢ (moderate radiation)"), ("CT pelvis without and with contrast","Usually NOT Appropriate","☢☢☢☢ (high radiation)"), ("Transabdominal US alone","Usually NOT Appropriate","O (no radiation)"), ] hdrs_acr=["Procedure","ACR Rating","Radiation Level"] cw=[6.5,3.5,2.3]; cx=[0.35,6.9,10.45] for ci,(h,w,x) in enumerate(zip(hdrs_acr,cw,cx)): box(sl,x,1.38,w,0.42,NAVY); txt(sl,h,x+0.07,1.41,w-0.1,0.35,sz=13,bold=True,color=WHITE) for ri,row in enumerate(rows_acr): y=1.83+ri*0.62; bg=LGRAY if ri%2==0 else WHITE for ci,(val,w,x) in enumerate(zip(row,cw,cx)): box(sl,x,y,w,0.59,bg) c=GREEN if "Appropriate" in val and "NOT" not in val else RED if "NOT" in val else DARK txt(sl,val,x+0.07,y+0.08,w-0.1,0.48,sz=12,color=c,bold=("NOT" in val or ("Appropriate" in val and "NOT" not in val)),wrap=True) bullets(sl,[ "MRI appropriate as: initial diagnosis if TVUS negative/indeterminate, preoperative planning, suspected rectosigmoid disease, follow-up", "CT not appropriate for primary endometriosis evaluation due to radiation and inferior soft-tissue contrast", "Transabdominal US alone insufficient – does not evaluate posterior compartment adequately", ],0.35,6.6,12.6,0.95,sz=12.5,lcolor=ORANGE) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 47 – Other Supporting References # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Other Key Supporting References") refs=[ ("CAR/CSAR 2025\nPractice Statement","Pang E, et al. Can Assoc Radiol J 2025. PMID: 39772972","Canadian radiology guidance for pelvic MRI in endometriosis. Recommends MRI when advanced TVUS unavailable. Structured reporting for community + academic practice.",BLUE), ("IDEA Group Addendum\n2025","Guerriero S, Condous G, et al. Ultrasound Obstet Gynecol 2025. PMID: 40632542","New standardized TVUS protocol specifically for SUPERFICIAL endometriosis. International shift toward non-invasive imaging-based diagnosis.",TEAL), ("Dev H et al. 2026\nBr J Radiol","Dev H, Falkner NM, Lee E. Br J Radiol 2026. PMID: 41507077","Review of endometriosis + adenomyosis imaging updates 2026. Discusses dynamic TVUS, improved MRI techniques, recent guidelines.",GREEN), ("Avery JC et al. 2024\nFertil Steril (Syst. Review)","PMID: 38110143. Fertil Steril 2024","eMRI sensitivity 91–93.5%, specificity 86–87.5% for deep+ovarian endometriosis. Negative eMRI does NOT exclude superficial disease.",NAVY), ("Elias Z et al. 2026\nAbdom Radiol","PMID: 40576666. Abdom Radiol 2026","Technical pitfalls review. Optimal patient prep, challenging anatomic areas, structured reporting templates. Multidisciplinary approach for DIE.",ORANGE), ("Colak C et al. 2024\nRadiographics","Colak C, VanBuren WM, et al. Radiographics 2024;44:e230106","Pelvic nerve endometriosis MRI features. 3D sequences for nerve evaluation. Lateral compartment DIE.",RED), ] for i,(title,cite,summary,col) in enumerate(refs): xo=0.35+(i%2)*6.45; yo=1.1+(i//2)*1.92 box(sl,xo,yo,6.1,1.78,WHITE) box(sl,xo,yo,2.2,1.78,col) txt(sl,title,xo+0.1,yo+0.3,2.0,0.7,sz=12,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,cite,xo+2.35,yo+0.05,3.65,0.35,sz=11,italic=True,color=MGRAY,wrap=True) txt(sl,summary,xo+2.35,yo+0.42,3.65,1.28,sz=12,color=DARK,wrap=True) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 48 – Section E divider # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() sec(sl,"PART E: Appraisal & Take-home Points","What This Means for Your Radiology Practice") # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 49 – Discussion Points for Journal Club # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() hdr(sl,"Discussion Points – Journal Club Questions") qs=[ ("Q1","Should endometriosis MRI always include a kidney sequence, even in young patients with small ovarian endometriomas and no posterior DIE concern?", "VanBuren says YES – silent hydronephrosis can occur with any DIE. Single sequence adds minimal scan time."), ("Q2","Is T1WI mandatory in all endometriosis protocols, or can it be omitted to reduce scan time in resource-limited settings?", "T1WI increases specificity (identifies hemorrhagic foci) but is NOT required to diagnose DIE. Institutional protocol decision but ESUR/BWH/VanBuren recommend it universally."), ("Q3","How should radiologists in our institution adopt structured reporting for endometriosis MRI?", "Implement endometriosis-specific template. Evidence shows it increases compartment documentation from 50% to 80% (vs free-text)."), ("Q4","When should routine pelvic US prompt a recommendation for dedicated MRI vs advanced TVUS?", "If O-RADS 3+ endometrioma, fixed uterus, or posterior compartment pathology on routine US → recommend dedicated imaging. MRI if TVUS not available or surgery planned."), ("Q5","What is the most common site for DIE missed on free-text reports in clinical practice?", "Bladder (FB compartment): 75% missed rate on free-text vs 28% with endometriosis-specific template (aOR 12.8)."), ] for i,(q,question,answer) in enumerate(qs): yo=1.1+i*1.22 box(sl,0.35,yo,12.6,1.14,LGRAY if i%2==0 else WHITE) box(sl,0.35,yo,0.7,1.14,BLUE) txt(sl,q,0.37,yo+0.18,0.65,0.45,sz=14,bold=True,color=WHITE,align=PP_ALIGN.CENTER) txt(sl,question,1.18,yo+0.05,7.3,0.48,sz=13,bold=True,color=NAVY,wrap=True) txt(sl,"→ "+answer,1.18,yo+0.62,11.4,0.48,sz=12,italic=True,color=DARK,wrap=True) ref_line(sl,"VanBuren et al. Radiology 2024 | ESUR Eur Radiol 2025 | PMC12886655 (underreporting)",7.2) # ═══════════════════════════════════════════════════════════════════════════ # SLIDE 50 – Take-home Points & Final Summary # ═══════════════════════════════════════════════════════════════════════════ sl=add_slide() box(sl,0,0,13.333,7.5,NAVY) box(sl,0,0,13.333,0.92,RGBColor(0x08,0x1A,0x3A)) box(sl,0,0.92,13.333,0.07,ORANGE) txt(sl,"TAKE-HOME POINTS",0.4,0.1,12.5,0.78,sz=26,bold=True,color=WHITE) points=[ ("IMAGING FIRST","Endometriosis affects 190 million people. Average 7–12 yr delay. MRI + advanced TVUS can end diagnostic odyssey – be the radiologist who makes the diagnosis.",TEAL), ("COMPARTMENTS","Always evaluate all 4 compartments (anterior/middle/posterior/lateral). Every dedicated endometriosis MRI needs a structured checklist report.",BLUE), ("T1 IS SUPPORTIVE","T1 hyperintensity increases specificity but is NOT required for DIE. Never dismiss a T2-dark nodule because T1 is negative.",ORANGE), ("STRUCTURED TEMPLATE","Free-text reports miss bladder in 75% of cases. Implement an endometriosis-specific template. Your report directly determines surgical team composition.",GREEN), ("COMPLEMENTARY","MRI and TVUS are complementary. MRI = global map + malignancy + extrapelvic. TVUS = dynamic adhesion assessment + bowel wall depth.",PURPLE), ("STAY CURRENT","ESUR 2025, ACR 2024, CAR 2025, IDEA 2025, SRU 2024 – consensus is converging. Structured reporting with dPEI scoring is the new standard.",RED), ] for i,(label,msg,col) in enumerate(points): xo=0.35+(i%3)*4.3; yo=1.1+(i//3)*2.75 box(sl,xo,yo,4.05,2.55,RGBColor(0x12,0x35,0x6A)) box(sl,xo,yo,4.05,0.5,col) txt(sl,label,xo+0.1,yo+0.07,3.85,0.4,sz=14,bold=True,color=WHITE) txt(sl,msg,xo+0.1,yo+0.58,3.85,1.88,sz=12,color=RGBColor(0xDD,0xEE,0xFF),wrap=True) txt(sl,"VanBuren W et al. Radiology 2024;312(3):e233482 • ESUR Eur Radiol 2025 • ACR J Am Coll Radiol 2024 • BWH Harvard rad.bwh.harvard.edu/mri-of-endometriosis", 0.35,7.1,12.6,0.32,sz=10,italic=True,color=RGBColor(0xAA,0xCC,0xFF),align=PP_ALIGN.CENTER) # ── Save final ──────────────────────────────────────────────────────────── out="/tmp/workspace/jc-endometriosis/JC_Endometriosis_VanBuren2024_FINAL.pptx" prs.save(out) print(f"FINAL saved: {out}") print(f"Total slides: {len(prs.slides)}") PYEOF python3 /tmp/workspace/jc-endometriosis/build_jc2.py

Running Command

ls -lh /tmp/workspace/jc-endometriosis/JC_Endometriosis_VanBuren2024_FINAL.pptx && python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/jc-endometriosis/JC_Endometriosis_VanBuren2024_FINAL.pptx') print(f'Total slides: {len(prs.slides)}') for i,slide in enumerate(prs.slides,1): texts=[s.text_frame.text.strip()[:65] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] imgs=[s for s in slide.shapes if s.shape_type==13] print(f' {i:2d}: {texts[0] if texts else \"(empty)\"} | imgs:{len(imgs)}') "

This is a shared conversation. Sign in to Orris to start your own chat.