Create a oral case presentation. For oral case presentation competition, the case should not be present in any textbook, any guides, any articles, nowhere. It should be very interesting and in from the anesthesia side because it is the competition for anesthesia residents. Okay? And it should be in the PPT format. I will send you the format. It should be in that format and choose the topic accordingly and it should be anesthesia side and it should be very interesting topic. Okay.
Refer this but change the presenter name shrinidhi bhandare
python3 << 'EOF' from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor import json prs = Presentation("/tmp/workspace/attachments/365db7e5-1886-450c-8646-ee32e1a64f0c/CASE STUDY.pptx") print(f"Slide dimensions: {prs.slide_width.inches:.2f} x {prs.slide_height.inches:.2f} inches") print(f"Total slides: {len(prs.slides)}") print("="*60) for i, slide in enumerate(prs.slides, 1): print(f"\n--- SLIDE {i} ---") print(f"Layout: {slide.slide_layout.name}") for shape in slide.shapes: print(f" Shape: '{shape.name}' | Type: {shape.shape_type}") if shape.has_text_frame: for para in shape.text_frame.paragraphs: txt = para.text.strip() if txt: # Get font info from first run if available font_info = "" if para.runs: run = para.runs[0] font_info = f" [Font: {run.font.name}, Size: {run.font.size}, Bold: {run.font.bold}, Color: {run.font.color.rgb if run.font.color and run.font.color.type else 'inherited'}]" print(f" TEXT: '{txt}'{font_info}") # Check for background/fill if hasattr(shape, 'fill'): try: fill = shape.fill if fill.type is not None: print(f" Fill type: {fill.type}") except: pass # Position and size try: print(f" Pos: left={shape.left/914400:.2f}\", top={shape.top/914400:.2f}\", width={shape.width/914400:.2f}\", height={shape.height/914400:.2f}\"") except: pass EOF
python3 << 'EOF' from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.dml import MSO_THEME_COLOR import zipfile, os pptx_path = "/tmp/workspace/attachments/365db7e5-1886-450c-8646-ee32e1a64f0c/CASE STUDY.pptx" # Unpack to inspect XML and find theme colors with zipfile.ZipFile(pptx_path, 'r') as z: # List all files files = z.namelist() for f in files: print(f) EOF
python3 << 'EOF' import zipfile pptx_path = "/tmp/workspace/attachments/365db7e5-1886-450c-8646-ee32e1a64f0c/CASE STUDY.pptx" # Extract all media and theme files to inspect os.makedirs("/tmp/workspace/case_study_extracted", exist_ok=True) with zipfile.ZipFile(pptx_path, 'r') as z: # Read theme theme = z.read("ppt/theme/theme1.xml").decode("utf-8") print("=== THEME (first 3000 chars) ===") print(theme[:3000]) # Read slide 1 XML slide1 = z.read("ppt/slides/slide1.xml").decode("utf-8") print("\n=== SLIDE 1 XML (first 2000 chars) ===") print(slide1[:2000]) # Extract media files for f in z.namelist(): if f.startswith("ppt/media/"): data = z.read(f) fname = f.replace("ppt/media/", "") with open(f"/tmp/workspace/case_study_extracted/{fname}", "wb") as out: out.write(data) print("\nMedia files extracted.") import os files = os.listdir("/tmp/workspace/case_study_extracted") print("Extracted:", files) EOF
python3 << 'EOF' import zipfile, os pptx_path = "/tmp/workspace/attachments/365db7e5-1886-450c-8646-ee32e1a64f0c/CASE STUDY.pptx" os.makedirs("/tmp/workspace/case_study_extracted", exist_ok=True) with zipfile.ZipFile(pptx_path, 'r') as z: # Read theme theme = z.read("ppt/theme/theme1.xml").decode("utf-8") print("=== THEME (first 3000 chars) ===") print(theme[:3000]) # Extract media files for f in z.namelist(): if f.startswith("ppt/media/"): data = z.read(f) fname = f.replace("ppt/media/", "") with open(f"/tmp/workspace/case_study_extracted/{fname}", "wb") as out: out.write(data) print("\nMedia files extracted.") files = os.listdir("/tmp/workspace/case_study_extracted") print("Extracted:", files) EOF
ls /tmp/workspace/case_study_extracted/
python3 << 'PYEOF' import zipfile, os, shutil from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.util import Inches, Pt from pptx.oxml.ns import qn from pptx.oxml import parse_xml from lxml import etree import copy # ─── 0. Workspace ─────────────────────────────────────────────── os.makedirs("/tmp/workspace/anesthesia_ppt", exist_ok=True) SRC = "/tmp/workspace/attachments/365db7e5-1886-450c-8646-ee32e1a64f0c/CASE STUDY.pptx" OUT = "/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case.pptx" # Copy the original as our base (to keep theme, layouts, background images) shutil.copy(SRC, OUT) prs = Presentation(OUT) # ─── Helper: set text in a text frame ─────────────────────────── def set_tf(tf, paragraphs_data, default_size=20, default_bold=False, default_color=None): """ paragraphs_data = list of: str -> single paragraph, default style dict -> {"text": str, "size": int, "bold": bool, "color": RGBColor, "align": PP_ALIGN} """ from pptx.util import Pt from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN # Clear existing paragraphs tf.clear() for item in paragraphs_data: if isinstance(item, str): item = {"text": item} p = tf.add_paragraph() p.text = "" run = p.add_run() run.text = item["text"] font = run.font font.name = "Times New Roman" font.size = Pt(item.get("size", default_size)) font.bold = item.get("bold", default_bold) if item.get("color"): font.color.rgb = item["color"] p.alignment = item.get("align", PP_ALIGN.LEFT) # Space after paragraph if item.get("space_after"): p.space_after = Pt(item["space_after"]) # Remove the initial blank paragraph that clear() leaves # tf.paragraphs[0] is the first one added - actually clear() leaves one empty para # We added our own, so let's remove the first empty one if it exists try: first = tf._txBody.findall(qn("a:p")) if len(first) > len(paragraphs_data) and first[0].text is None: tf._txBody.remove(first[0]) except: pass def clear_and_set(shape, paragraphs_data, default_size=20, default_bold=False): if shape.has_text_frame: tf = shape.text_frame tf.word_wrap = True set_tf(tf, paragraphs_data, default_size, default_bold) # ─── Color palette matching "Retrospect" theme ────────────────── DARK_BLUE = RGBColor(0x1F, 0x49, 0x7D) # deep navy for titles ORANGE = RGBColor(0xE4, 0x83, 0x12) # theme accent1 DARK_GREEN = RGBColor(0x63, 0x70, 0x52) # dk2 WHITE = RGBColor(0xFF, 0xFF, 0xFF) BLACK = RGBColor(0x00, 0x00, 0x00) # ─── SLIDE 1: Title / Cover ────────────────────────────────────── slide1 = prs.slides[0] for shape in slide1.shapes: if shape.name == "Title 1": clear_and_set(shape, [ {"text": "Anesthesia for Intraoperative Takotsubo Cardiomyopathy", "size": 24, "bold": True, "color": WHITE} ]) elif "TextBox" in shape.name: clear_and_set(shape, [ {"text": "Presented by:", "size": 16, "bold": True, "color": WHITE}, {"text": "Shrinidhi Bhandare", "size": 18, "bold": True, "color": WHITE}, {"text": "Anesthesia Resident", "size": 14, "bold": False, "color": WHITE}, {"text": "18/07/2026", "size": 14, "bold": False, "color": WHITE}, ]) # ─── SLIDE 2: Case Title ───────────────────────────────────────── slide2 = prs.slides[1] for shape in slide2.shapes: if shape.name == "Title 1": clear_and_set(shape, [ {"text": "When the Heart Breaks on the Table:\nIntraoperative Takotsubo Cardiomyopathy", "size": 22, "bold": True, "color": DARK_BLUE} ]) elif "TextBox" in shape.name: clear_and_set(shape, [ {"text": "CASE TITLE", "size": 36, "bold": True, "color": ORANGE} ]) # ─── SLIDE 3: Introduction ─────────────────────────────────────── slide3 = prs.slides[2] for shape in slide3.shapes: if shape.name == "Title 1": clear_and_set(shape, [ {"text": "Introduction to Takotsubo Cardiomyopathy (TCM)", "size": 28, "bold": True} ]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Takotsubo Cardiomyopathy (TCM), also known as stress cardiomyopathy or 'broken heart syndrome,' is a transient left ventricular dysfunction characterized by apical ballooning and basal hyperkinesis.", "size": 19}, {"text": ""}, {"text": "First described in Japan in 1990, it classically follows emotional or physical stress — but its intraoperative occurrence under general anesthesia is exceedingly rare, poorly characterized, and anesthesia-specific in its triggers and management.", "size": 19}, {"text": ""}, {"text": "This case presents a unique perioperative scenario where the anesthesiologist became both the first responder and primary decision-maker.", "size": 19, "bold": True}, ]) # ─── SLIDE 4: Clinical Features ───────────────────────────────── slide4 = prs.slides[3] for shape in slide4.shapes: if shape.name == "Title 1": clear_and_set(shape, [ {"text": "Clinical Features of TCM", "size": 28, "bold": True} ]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Cardinal features include:", "size": 20, "bold": True}, {"text": "• Transient apical LV dysfunction with preserved or hyperkinetic base", "size": 18}, {"text": "• Acute chest pain mimicking acute MI (with ECG changes)", "size": 18}, {"text": "• ST-segment elevation / deep T-wave inversions", "size": 18}, {"text": "• Mild troponin elevation disproportionate to wall motion abnormality", "size": 18}, {"text": "• Normal coronary angiography (absence of obstructive CAD)", "size": 18}, {"text": "• Spontaneous recovery of LV function within days to weeks", "size": 18}, {"text": "", "size": 12}, {"text": "Intraoperative clue: sudden hemodynamic collapse without obvious surgical cause", "size": 17, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, ]) # ─── SLIDE 5: Cont... Pathophysiology ─────────────────────────── slide5 = prs.slides[4] for shape in slide5.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Cont... Pathophysiology", "size": 28, "bold": True}]) elif "Subtitle" in shape.name or "Content" in shape.name: if shape.has_text_frame: clear_and_set(shape, [ {"text": "Proposed mechanisms:", "size": 20, "bold": True}, {"text": "• Catecholamine surge: Direct myocardial toxicity from epinephrine/norepinephrine", "size": 18}, {"text": "• Coronary microvascular spasm: Transient ischemia without epicardial obstruction", "size": 18}, {"text": "• Adrenoreceptor overstimulation: High density of β2-receptors at the apex → apical stunning", "size": 18}, {"text": "• Neurogenic stunning: Via activation of the brain-heart axis under anesthetic stress", "size": 18}, {"text": "", "size": 12}, {"text": "Key anesthetic link: Laryngoscopy, surgical stimulation, awareness, vasopressors, and even neostigmine have all been implicated as intraoperative precipitants.", "size": 17, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, ]) # ─── SLIDE 6: Case Study / Patient Info ───────────────────────── slide6 = prs.slides[5] for shape in slide6.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Case Study", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Patient Information", "size": 22, "bold": True}, {"text": "Age: 34 years", "size": 19}, {"text": "Sex: Female", "size": 19}, {"text": "Weight: 58 kg | Height: 162 cm | ASA: II", "size": 19}, {"text": "Medical History:", "size": 19, "bold": True}, {"text": "Known anxiety disorder (on sertraline). No cardiac history. No prior surgeries. Non-smoker.", "size": 18}, {"text": "Surgical Indication:", "size": 19, "bold": True}, {"text": "Elective laparoscopic sleeve gastrectomy for morbid obesity (BMI 41 kg/m²)", "size": 18}, ]) # ─── SLIDE 7: Chief Complaint ──────────────────────────────────── slide7 = prs.slides[6] for shape in slide7.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Chief Complaint", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Sudden intraoperative hemodynamic collapse 35 minutes into elective laparoscopic sleeve gastrectomy.", "size": 20}, {"text": "", "size": 12}, {"text": "The patient had been stable under general anesthesia. Abruptly: blood pressure dropped to 68/40 mmHg, heart rate rose to 128 bpm, SpO₂ fell to 91%, and new ST-segment elevation appeared on the ECG monitor — all within 90 seconds.", "size": 19}, {"text": "", "size": 12}, {"text": "No surgical bleeding. Capnoperitoneum pressure normal. No anaphylaxis signs.", "size": 19, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, ]) # ─── SLIDE 8: History of Presenting Illness ───────────────────── slide8 = prs.slides[7] for shape in slide8.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "History of Presenting Illness", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "A 34-year-old anxious female underwent elective laparoscopic sleeve gastrectomy under general anesthesia. Induction was uneventful: propofol 150 mg, fentanyl 100 mcg, rocuronium 50 mg, smooth intubation on first attempt.", "size": 17}, {"text": "", "size": 10}, {"text": "Maintenance with sevoflurane 1.2 MAC and a propofol infusion. At 35 minutes intraoperatively, during port insertion and abdominal insufflation, the following occurred simultaneously:", "size": 17}, {"text": " → Acute ST-elevation in leads II, III, aVF on multiparameter monitor", "size": 17, "bold": True}, {"text": " → Rapid BP drop from 118/72 to 68/40 mmHg", "size": 17, "bold": True}, {"text": " → New-onset tachycardia 128 bpm, SpO₂ 91%", "size": 17, "bold": True}, {"text": "", "size": 10}, {"text": "Cardiology was called. Bedside TEE revealed apical ballooning with severely reduced LVEF (~25%). Emergent coronary angiography showed entirely normal coronaries. Diagnosis: Intraoperative Takotsubo Cardiomyopathy.", "size": 17}, ]) # ─── SLIDE 9: Vital Signs ──────────────────────────────────────── slide9 = prs.slides[8] for shape in slide9.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Vitals at Time of Collapse (Intraoperative)", "size": 26, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Heart Rate: 128 bpm (sinus tachycardia)", "size": 19}, {"text": "Blood Pressure: 68/40 mmHg (cardiogenic shock)", "size": 19}, {"text": "SpO₂: 91% (on FiO₂ 1.0)", "size": 19}, {"text": "EtCO₂: 28 mmHg (low — reduced cardiac output)", "size": 19}, {"text": "ECG: ST elevation leads II, III, aVF + new T inversions V4-V6", "size": 19}, {"text": "TEE (intraoperative): LVEF ~25%, apical ballooning, basal hyperkinesis", "size": 19}, {"text": "Troponin-I (stat): 0.8 ng/mL (mildly elevated)", "size": 19}, {"text": "Coronary angio: Normal — no obstructive CAD", "size": 19, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, ]) # ─── SLIDE 10: Surgical Procedure ─────────────────────────────── slide10 = prs.slides[9] for shape in slide10.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Surgical Procedure", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Elective Laparoscopic Sleeve Gastrectomy\nfor Morbid Obesity (BMI 41 kg/m²)", "size": 24} ]) # ─── SLIDE 11: Clinical Challenge ─────────────────────────────── slide11 = prs.slides[10] for shape in slide11.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Clinical Challenge", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "The anesthesiologist faced a unique multi-dimensional crisis:", "size": 20, "bold": True}, {"text": "", "size": 10}, {"text": "1. Differentiating TCM from STEMI intraoperatively — without causing surgical delay or harm", "size": 18}, {"text": "2. Managing cardiogenic shock under active general anesthesia — drug choices radically different from usual", "size": 18}, {"text": "3. The very anesthetic agents being used (catecholamines) could WORSEN Takotsubo — a dangerous paradox", "size": 18, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, {"text": "4. Decision: abort surgery (risk of re-anesthesia) vs. proceed carefully (risk of ongoing insult)", "size": 18}, {"text": "5. Obesity-related ventilation compromise compounding the hemodynamic instability", "size": 18}, ]) # ─── SLIDE 12: Preoperative Considerations ────────────────────── slide12 = prs.slides[11] for shape in slide12.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Preoperative Considerations\n(Retrospective Analysis)", "size": 24, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "In retrospect, the following risk factors were identified:", "size": 19, "bold": True}, {"text": "• Female sex + anxiety disorder = elevated baseline sympathetic tone", "size": 18}, {"text": "• SSRI (sertraline) use: serotonin-catecholamine interactions may predispose to vasospasm", "size": 18}, {"text": "• Capnoperitoneum + Trendelenburg: vagal-to-sympathetic reflex swings in laparoscopy", "size": 18}, {"text": "• Obesity: difficult ventilation → hypercapnia → catecholamine surge", "size": 18}, {"text": "• No preoperative cardiac evaluation performed (ASA II, no symptoms)", "size": 18}, {"text": "", "size": 10}, {"text": "Key Lesson: Routine preoperative risk tools may miss rare catecholamine-mediated syndromes. A stress echocardiogram or baseline troponin may have offered early insight.", "size": 17, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, ]) # ─── SLIDE 13: Intraoperative Management ──────────────────────── slide13 = prs.slides[12] for shape in slide13.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Intraoperative Management", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Step 1 – STOP & Stabilize: Surgery halted. 100% FiO₂. Sevoflurane reduced to minimum.", "size": 17, "bold": True}, {"text": "Step 2 – Hemodynamic Support: Norepinephrine infusion 0.1–0.3 mcg/kg/min (NOT adrenaline — catecholamines worsen TCM apical stunning).", "size": 17}, {"text": "Step 3 – Intraoperative TEE: Confirmed apical ballooning → directed therapy.", "size": 17}, {"text": "Step 4 – Fluid Resuscitation: Cautious crystalloid bolus 500 mL (avoid overload in LVSD).", "size": 17}, {"text": "Step 5 – Anticoagulation: Heparin 5000 IU to prevent LV apical thrombus formation.", "size": 17}, {"text": "Step 6 – Coronary angiography: Confirmed no obstructive CAD → Takotsubo confirmed.", "size": 17}, {"text": "Step 7 – Anesthesia maintenance: Switched to full TIVA (propofol + remifentanil) to eliminate volatile agent cardiac depression.", "size": 17}, {"text": "Step 8 – Decision: Surgery abandoned. Patient kept intubated → transferred to cardiac ICU.", "size": 17, "bold": True, "color": RGBColor(0x1F, 0x49, 0x7D)}, ]) # ─── SLIDE 14: Postoperative Management ───────────────────────── slide14 = prs.slides[13] for shape in slide14.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Postoperative Management", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "• Admitted to cardiac ICU — intubated and ventilated for 18 hours", "size": 19}, {"text": "• Norepinephrine weaned over 12 hours as LVEF recovered to 45% on Day 1", "size": 19}, {"text": "• Aspirin + ACE inhibitor initiated for LV remodeling prevention", "size": 19}, {"text": "• Beta-blockers deliberately avoided — risk of triggering vasospasm in acute phase", "size": 19, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, {"text": "• SSRI (sertraline) withheld pending cardiology review", "size": 19}, {"text": "• Repeat echocardiography at 72 hours: LVEF 55% — full recovery", "size": 19}, {"text": "• Extubated Day 2. Discharged Day 6 in stable condition", "size": 19}, {"text": "• Sleeve gastrectomy rescheduled 6 months later with multidisciplinary preanesthetic protocol", "size": 19}, ]) # ─── SLIDE 15: Outcome / Prognosis ────────────────────────────── slide15 = prs.slides[14] for shape in slide15.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Outcome / Prognosis", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "Complete recovery of left ventricular function within 72 hours (LVEF 25% → 55%)", "size": 19}, {"text": "", "size": 10}, {"text": "No permanent myocardial injury. Troponin normalized by Day 3.", "size": 19}, {"text": "", "size": 10}, {"text": "Patient discharged Day 6 with full neurological and cardiac function", "size": 19}, {"text": "", "size": 10}, {"text": "Psychiatric follow-up initiated — anxiety disorder management optimized preoperatively for future surgeries", "size": 19}, {"text": "", "size": 10}, {"text": "Key prognostic fact: Intraoperative TCM carries ~4–5% in-hospital mortality — early recognition by the anesthesiologist was the decisive factor in survival.", "size": 18, "bold": True, "color": RGBColor(0xBD, 0x58, 0x2C)}, ]) # ─── SLIDE 16: Conclusion ──────────────────────────────────────── slide16 = prs.slides[15] for shape in slide16.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Conclusion", "size": 28, "bold": True}]) elif "Content" in shape.name and shape.has_text_frame: clear_and_set(shape, [ {"text": "This case illustrates a rare and diagnostically challenging perioperative emergency — intraoperative Takotsubo Cardiomyopathy — where the anesthesiologist's immediate recognition and decision-making proved life-saving.", "size": 18}, {"text": "", "size": 10}, {"text": "Key learning points:", "size": 18, "bold": True}, {"text": "1. Not all intraoperative ST-elevation is MI — TCM must be in the differential.", "size": 17}, {"text": "2. Intraoperative TEE is an indispensable tool in unexplained hemodynamic collapse.", "size": 17}, {"text": "3. Catecholamine selection is critical — norepinephrine over adrenaline in TCM.", "size": 17}, {"text": "4. The anesthesiologist is the first-line cardiologist in the operating room.", "size": 17, "bold": True, "color": RGBColor(0x1F, 0x49, 0x7D)}, {"text": "", "size": 10}, {"text": "A multidisciplinary approach, anesthetic awareness of rare syndromes, and perioperative vigilance form the backbone of modern anesthesia practice.", "size": 17}, ]) # ─── SLIDE 17: Special Topic — Intraoperative TEE ─────────────── slide17 = prs.slides[16] for shape in slide17.shapes: if shape.name == "Title 1": clear_and_set(shape, [{"text": "Intraoperative TEE: The Anesthesiologist's Eye", "size": 22, "bold": True}]) elif "TextBox" in shape.name: clear_and_set(shape, [ {"text": "Transesophageal Echocardiography (TEE) is a perioperative imaging tool placed by the anesthesiologist to directly visualize cardiac function in real time — critical for diagnosing TCM intraoperatively when coronary angiography is unavailable.", "size": 16} ]) # ─── SLIDE 18: Thank You ────────────────────────────────────────── slide18 = prs.slides[17] for shape in slide18.shapes: if shape.has_text_frame: clear_and_set(shape, [ {"text": "Thank You", "size": 40, "bold": True, "color": DARK_BLUE, "align": PP_ALIGN.CENTER}, {"text": "Presented by: Shrinidhi Bhandare", "size": 22, "bold": False, "align": PP_ALIGN.CENTER}, ]) # Save prs.save(OUT) print(f"Saved: {OUT}") print("Done!") PYEOF
python3 << 'EOF' # Verify the output PPT from pptx import Presentation prs = Presentation("/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case.pptx") print(f"Total slides: {len(prs.slides)}") for i, slide in enumerate(prs.slides, 1): texts = [] for shape in slide.shapes: if shape.has_text_frame: t = shape.text_frame.text.strip() if t: texts.append(t[:80]) print(f"Slide {i}: {' | '.join(texts[:3])}") EOF
python3 << 'EOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN prs = Presentation("/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case.pptx") slide18 = prs.slides[17] print("Slide 18 shapes:") for shape in slide18.shapes: print(f" {shape.name} | Type: {shape.shape_type} | has_tf: {shape.has_text_frame}") if shape.has_text_frame: print(f" Text: {repr(shape.text_frame.text[:100])}") try: print(f" Pos: left={shape.left/914400:.2f}\", top={shape.top/914400:.2f}\", w={shape.width/914400:.2f}\", h={shape.height/914400:.2f}\"") except: pass EOF
python3 << 'EOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.oxml.ns import qn from lxml import etree prs = Presentation("/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case.pptx") slide18 = prs.slides[17] DARK_BLUE = RGBColor(0x1F, 0x49, 0x7D) # Add two text boxes to slide 18 for Thank You # Text box 1: "Thank You" txBox1 = slide18.shapes.add_textbox( Inches(1.5), Inches(2.5), Inches(10), Inches(1.5) ) tf1 = txBox1.text_frame tf1.word_wrap = True p1 = tf1.paragraphs[0] p1.alignment = PP_ALIGN.CENTER run1 = p1.add_run() run1.text = "THANK YOU" run1.font.size = Pt(48) run1.font.bold = True run1.font.name = "Times New Roman" run1.font.color.rgb = DARK_BLUE # Text box 2: Presenter txBox2 = slide18.shapes.add_textbox( Inches(2), Inches(4.5), Inches(9), Inches(1.2) ) tf2 = txBox2.text_frame tf2.word_wrap = True p2 = tf2.paragraphs[0] p2.alignment = PP_ALIGN.CENTER run2 = p2.add_run() run2.text = "Presented by: Shrinidhi Bhandare | Anesthesia Resident" run2.font.size = Pt(20) run2.font.bold = False run2.font.name = "Times New Roman" run2.font.color.rgb = RGBColor(0x63, 0x70, 0x52) prs.save("/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case.pptx") print("Slide 18 updated and saved.") # Quick final check prs2 = Presentation("/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case.pptx") slide18_check = prs2.slides[17] for shape in slide18_check.shapes: if shape.has_text_frame and shape.text_frame.text.strip(): print(f" Slide 18 text: {shape.text_frame.text[:80]}") EOF
Takotsubo Anesthesia Case
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Cover - Presenter: Shrinidhi Bhandare, Anesthesia Resident |
| 2 | Case Title: "When the Heart Breaks on the Table" |
| 3 | Introduction to Takotsubo Cardiomyopathy (TCM) |
| 4 | Clinical Features |
| 5 | Cont... Pathophysiology (catecholamine surge, adrenoreceptor theory) |
| 6 | Patient Info - 34F, BMI 41, elective sleeve gastrectomy |
| 7 | Chief Complaint - Sudden intraoperative collapse at 35 min |
| 8 | History of Presenting Illness |
| 9 | Vitals at Collapse - BP 68/40, HR 128, LVEF ~25% on TEE |
| 10 | Surgical Procedure - Laparoscopic Sleeve Gastrectomy |
| 11 | Clinical Challenge - 5 layered anesthesia-specific dilemmas |
| 12 | Preoperative Considerations (retrospective risk factors) |
| 13 | Intraoperative Management - 8-step protocol |
| 14 | Postoperative Management |
| 15 | Outcome/Prognosis - Full LV recovery (25%→55% LVEF) |
| 16 | Conclusion |
| 17 | Special Topic: Intraoperative TEE |
| 18 | Thank You - Shrinidhi Bhandare |
Add images/diagrams to slides (heart anatomy, ECG tracings, TEE images)
Takotsubo cardiomyopathy apical ballooning diagram ECG site:wikimedia.org OR site:commons.wikimedia.org
heart anatomy diagram labeled ventricle free use wikimedia commons PNG
transesophageal echocardiography TEE probe diagram anesthesia free image wikimedia
mkdir -p /tmp/workspace/anesthesia_ppt/images && cd /tmp/workspace/anesthesia_ppt/images && \ # 1. Takotsubo apical ballooning diagram curl -sL "https://i0.wp.com/emcrit.org/wp-content/uploads/2020/08/takotsubocm.jpg?resize=550%2C519&ssl=1" -o takotsubo_apical.jpg && echo "1 done: $(ls -lh takotsubo_apical.jpg | awk '{print $5}')" && \ # 2. Takotsubo ECG tracing curl -sL "https://litfl.com/wp-content/uploads/2018/08/ECG-Tako-Tsubo-Cardiomyopathy.jpg" -o takotsubo_ecg.jpg && echo "2 done: $(ls -lh takotsubo_ecg.jpg | awk '{print $5}')" && \ # 3. Heart anatomy diagram (Wikimedia CC) curl -sL "https://upload.wikimedia.org/wikipedia/commons/2/2d/Blausen_0462_HeartAnatomy.png" -o heart_anatomy.png && echo "3 done: $(ls -lh heart_anatomy.png | awk '{print $5}')" && \ # 4. TEE probe diagram (Wikimedia CC) curl -sL "https://upload.wikimedia.org/wikipedia/commons/1/13/Transesophageal_echo.jpg" -o tee_echo.jpg && echo "4 done: $(ls -lh tee_echo.jpg | awk '{print $5}')" && \ # 5. TEE diagram SVG -> PNG via another source curl -sL "https://upload.wikimedia.org/wikipedia/commons/8/8e/Transesophageal_Echocardiogram.png" -o tee_diagram.png && echo "5 done: $(ls -lh tee_diagram.png | awk '{print $5}')" && \ # 6. Detailed heart diagram curl -sL "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Heart_diagram-en.svg/3840px-Heart_diagram-en.svg.png" -A "Mozilla/5.0" -o heart_diagram_en.png && echo "6 done: $(ls -lh heart_diagram_en.png | awk '{print $5}')" && \ echo "ALL DONE" && ls -lh /tmp/workspace/anesthesia_ppt/images/
python3 << 'PYEOF' import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.patches as mpatches from matplotlib.patches import FancyArrowPatch, FancyBboxPatch, Ellipse import numpy as np IMG_DIR = "/tmp/workspace/anesthesia_ppt/images" # ─── IMAGE 1: Takotsubo Apical Ballooning Schematic ───────────── fig, axes = plt.subplots(1, 2, figsize=(10, 7), facecolor='#0d1b2a') fig.suptitle("Takotsubo Cardiomyopathy: LV Apical Ballooning", fontsize=16, color='white', fontweight='bold', y=0.98) for ax in axes: ax.set_facecolor('#0d1b2a') ax.set_aspect('equal') ax.axis('off') # Normal LV (left panel) ax1 = axes[0] ax1.set_xlim(-2, 2); ax1.set_ylim(-3, 2) # LV outline - normal teardrop shape theta = np.linspace(0, 2*np.pi, 200) # Normal: elongated teardrop lv_x = 1.1 * np.sin(theta) lv_y = 1.4 * np.cos(theta) - 0.3 ax1.fill(lv_x, lv_y, color='#c0392b', alpha=0.85, zorder=2) ax1.plot(lv_x, lv_y, color='#e74c3c', lw=2.5, zorder=3) # Apex marker ax1.plot(0, -1.7, 'o', color='#f39c12', ms=8, zorder=4) ax1.annotate('Apex', (0, -1.7), (0.3, -2.1), color='#f39c12', fontsize=10, arrowprops=dict(arrowstyle='->', color='#f39c12'), fontweight='bold') ax1.text(0, 0.4, 'LV', color='white', fontsize=18, ha='center', fontweight='bold', zorder=5) # Arrows showing normal contraction for angle in [30, 150, 210, 330]: r = np.radians(angle) x1, y1 = 0.7*np.sin(r), 0.7*np.cos(r)-0.3 x2, y2 = 1.0*np.sin(r), 1.0*np.cos(r)-0.3 ax1.annotate('', xy=(x1,y1), xytext=(x2,y2), arrowprops=dict(arrowstyle='->', color='#2ecc71', lw=1.5)) ax1.set_title('NORMAL LV', color='#2ecc71', fontsize=13, fontweight='bold', pad=8) ax1.text(0, -2.5, 'Uniform wall motion\nEF ~60%', color='lightgray', fontsize=9, ha='center', style='italic') # Takotsubo LV (right panel) ax2 = axes[1] ax2.set_xlim(-2, 2); ax2.set_ylim(-3, 2) # Apical ballooning: exaggerated apex bulge t = np.linspace(0, np.pi, 100) # Upper half: hyperkinetic base (narrowed) upper_x = np.concatenate([-0.7*np.sin(t[:50]), 0.7*np.sin(t[:50])[::-1]]) upper_y = np.concatenate([1.4*np.cos(t[:50])-0.1, 1.4*np.cos(t[:50])[::-1]-0.1]) # Lower half: ballooned apex phi = np.linspace(np.pi, 2*np.pi, 100) lower_x = 1.5 * np.sin(phi) lower_y = 1.6 * np.cos(phi) - 0.9 all_x = np.concatenate([0.7*np.sin(np.linspace(0,np.pi,100)), 1.5*np.sin(np.linspace(np.pi,2*np.pi,100))]) all_y = np.concatenate([1.1*np.cos(np.linspace(0,np.pi,100))-0.1, 1.6*np.cos(np.linspace(np.pi,2*np.pi,100))-0.9]) ax2.fill(all_x, all_y, color='#c0392b', alpha=0.85, zorder=2) ax2.plot(all_x, all_y, color='#e74c3c', lw=2.5, zorder=3) # Apex marker — ballooned ax2.plot(0, -2.5, 'o', color='#e74c3c', ms=12, zorder=4, alpha=0.7) ax2.annotate('BALLOONED\nAPEX', (0, -2.5), (0.5, -2.8), color='#e74c3c', fontsize=9, arrowprops=dict(arrowstyle='->', color='#e74c3c'), fontweight='bold') ax2.text(0, 0.3, 'LV', color='white', fontsize=18, ha='center', fontweight='bold', zorder=5) # Base hyperkinesis arrows (inward) for angle in [30, 150]: r = np.radians(angle) x1, y1 = 0.3*np.sin(r), 1.1*np.cos(r)-0.1 x2, y2 = 0.6*np.sin(r), 1.1*np.cos(r)-0.1 ax2.annotate('', xy=(x1,y1), xytext=(x2,y2), arrowprops=dict(arrowstyle='->', color='#3498db', lw=2)) ax2.text(-1.3, 0.5, 'Hyper-\nkinetic\nbase', color='#3498db', fontsize=8, ha='center') ax2.set_title('TAKOTSUBO LV', color='#e74c3c', fontsize=13, fontweight='bold', pad=8) ax2.text(0, -2.95, 'Apical akinesis\nEF ~25%', color='#e74c3c', fontsize=9, ha='center', style='italic', fontweight='bold') plt.tight_layout(rect=[0,0,1,0.95]) plt.savefig(f"{IMG_DIR}/takotsubo_schematic.png", dpi=150, bbox_inches='tight', facecolor='#0d1b2a', edgecolor='none') plt.close() print("Saved: takotsubo_schematic.png") # ─── IMAGE 2: Catecholamine Surge Pathway ─────────────────────── fig2, ax = plt.subplots(figsize=(10, 6.5), facecolor='#1a1a2e') ax.set_facecolor('#1a1a2e') ax.set_xlim(0, 10); ax.set_ylim(0, 10) ax.axis('off') ax.set_title("Pathophysiology: Catecholamine Surge in TCM", fontsize=14, color='white', fontweight='bold', pad=12) def draw_box(ax, x, y, w, h, text, color, tcolor='white', fontsize=10): box = FancyBboxPatch((x-w/2, y-h/2), w, h, boxstyle="round,pad=0.15", facecolor=color, edgecolor='white', lw=1.5, alpha=0.9) ax.add_patch(box) ax.text(x, y, text, color=tcolor, fontsize=fontsize, ha='center', va='center', fontweight='bold', wrap=True, multialignment='center') def arrow(ax, x1, y1, x2, y2, color='#f39c12'): ax.annotate('', xy=(x2,y2), xytext=(x1,y1), arrowprops=dict(arrowstyle='->', color=color, lw=2)) # Boxes draw_box(ax, 5, 9.0, 6, 0.9, 'ANESTHETIC TRIGGERS\n(Laryngoscopy | Insufflation | Awareness | Vasopressors)', '#8e44ad', fontsize=9) arrow(ax, 5, 8.55, 5, 8.0) draw_box(ax, 5, 7.5, 4, 0.8, 'CATECHOLAMINE SURGE\n(↑↑ Epinephrine & Norepinephrine)', '#c0392b') arrow(ax, 3.2, 7.5, 2.3, 6.8) arrow(ax, 6.8, 7.5, 7.7, 6.8) arrow(ax, 5, 7.1, 5, 6.4) draw_box(ax, 2, 6.2, 3.2, 0.8, 'Coronary\nMicrovascular Spasm', '#2980b9', fontsize=9) draw_box(ax, 8, 6.2, 3.2, 0.8, 'β2 Receptor\nOverstimulation\n(Apex-rich)', '#27ae60', fontsize=9) draw_box(ax, 5, 5.8, 3.8, 0.8, 'Direct Myocardial\nCatecholamine Toxicity', '#d35400', fontsize=9) arrow(ax, 2, 5.8, 3.0, 5.2) arrow(ax, 8, 5.8, 7.0, 5.2) arrow(ax, 5, 5.4, 5, 4.8) draw_box(ax, 5, 4.3, 5.5, 0.9, 'APICAL STUNNING & AKINESIS\n(LV Apical Ballooning, ↓ LVEF to ~25%)', '#c0392b') arrow(ax, 5, 3.85, 5, 3.2) draw_box(ax, 5, 2.7, 5.5, 0.9, 'CARDIOGENIC SHOCK\n(↓ BP, ↑ HR, ↓ SpO₂, ↓ EtCO₂)', '#922b21') # Warning box draw_box(ax, 5, 1.6, 7, 0.8, '⚠ PARADOX: Giving epinephrine for shock WORSENS Takotsubo ⚠', '#f39c12', tcolor='#1a1a2e', fontsize=10) draw_box(ax, 5, 0.65, 5.5, 0.7, '✔ Use NOREPINEPHRINE as preferred vasopressor', '#27ae60', fontsize=9) plt.tight_layout() plt.savefig(f"{IMG_DIR}/catecholamine_pathway.png", dpi=150, bbox_inches='tight', facecolor='#1a1a2e', edgecolor='none') plt.close() print("Saved: catecholamine_pathway.png") # ─── IMAGE 3: ECG Changes in Takotsubo ────────────────────────── fig3, axes = plt.subplots(2, 3, figsize=(12, 6), facecolor='#f8f9fa') fig3.suptitle('ECG Evolution in Intraoperative Takotsubo Cardiomyopathy', fontsize=13, fontweight='bold', y=1.01) leads = ['Lead I', 'Lead II', 'Lead III', 'aVF', 'V4', 'V5'] titles = ['Baseline\n(normal)', 'ST Elevation\n(acute)', 'Deep T-wave\nInversions (48h)'] for idx, ax in enumerate(axes.flat): ax.set_facecolor('#fdfdfd') ax.set_xlim(0, 10); ax.set_ylim(-1.5, 2.5) ax.axhline(0, color='#ccc', lw=0.8, linestyle='--') t = np.linspace(0, 10, 1000) # Generate ECG-like waveform def ecg_wave(t, st_elevation=0, t_inversion=False, deep_t=False): y = np.zeros_like(t) for beat_start in [1.0, 3.5, 6.0, 8.5]: # P wave p_center = beat_start y += 0.2 * np.exp(-((t - p_center)**2) / 0.02) # Q q = beat_start + 0.15 y -= 0.1 * np.exp(-((t - q)**2) / 0.003) # R r = beat_start + 0.22 y += 1.2 * np.exp(-((t - r)**2) / 0.003) # S s = beat_start + 0.30 y -= 0.25 * np.exp(-((t - s)**2) / 0.003) # ST segment + T wave st_start = beat_start + 0.35 t_center = beat_start + 0.55 # ST elevation mask = (t > st_start) & (t < t_center) y[mask] += st_elevation * 0.5 # T wave t_amp = -0.35 if t_inversion else (0.8 if deep_t else 0.4) y += t_amp * np.exp(-((t - t_center)**2) / 0.025) return y row, col = idx // 3, idx % 3 if col == 0: # Baseline y = ecg_wave(t) color = '#2c3e50' phase_title = 'BASELINE (Normal)' elif col == 1: # ST elevation y = ecg_wave(t, st_elevation=1.2, deep_t=True) color = '#c0392b' phase_title = 'ACUTE COLLAPSE (ST↑)' else: # T inversions y = ecg_wave(t, t_inversion=True) color = '#2980b9' phase_title = 'RECOVERY (T inversions)' ax.plot(t, y, color=color, lw=1.5) ax.set_title(f"{leads[idx]}\n{phase_title}", fontsize=8, fontweight='bold', color=color) ax.set_yticks([]) ax.set_xticks([]) for spine in ax.spines.values(): spine.set_visible(False) ax.set_facecolor('#fff8f8' if col == 1 else '#f8fff8' if col == 2 else '#f8f9fa') plt.tight_layout() plt.savefig(f"{IMG_DIR}/ecg_changes.png", dpi=150, bbox_inches='tight', facecolor='#f8f9fa', edgecolor='none') plt.close() print("Saved: ecg_changes.png") # ─── IMAGE 4: Anesthesia Management Algorithm ─────────────────── fig4, ax = plt.subplots(figsize=(9, 11), facecolor='#0f3460') ax.set_facecolor('#0f3460') ax.set_xlim(0, 10); ax.set_ylim(0, 14) ax.axis('off') ax.set_title("Intraoperative TCM: Anesthesia Management Algorithm", color='white', fontsize=13, fontweight='bold', pad=10) steps = [ (5, 13.0, "SUDDEN HEMODYNAMIC COLLAPSE INTRAOPERATIVELY", '#922b21', 'white', 8.5, 1.0), (5, 11.6, "STEP 1: HALT SURGERY | 100% O₂ | Reduce volatiles", '#1a5276', 'white', 8.0, 0.9), (5, 10.3, "STEP 2: Activate HELP — call Cardiology + Senior Anesthetist", '#1a5276', 'white', 8.0, 0.9), (5, 9.0, "STEP 3: INTRAOPERATIVE TEE\nAssess LVEF + wall motion abnormality", '#145a32', 'white', 7.5, 0.9), (5, 7.6, "STEP 4: DIFFERENTIAL DIAGNOSIS\nSTEMI vs TCM vs PE vs Anaphylaxis", '#6e2f1a', 'white', 7.5, 0.9), (5, 6.2, "STEP 5: IF APICAL BALLOONING → TCM LIKELY\nEmergency coronary angiography to exclude STEMI", '#145a32', 'white', 7.5, 0.9), (5, 4.9, "STEP 6: HEMODYNAMIC SUPPORT\nNorepinephrine 0.1–0.3 mcg/kg/min (NOT adrenaline)", '#6c3483', 'white', 8.0, 0.9), (5, 3.6, "STEP 7: Cautious fluid bolus (500 mL) | IV Heparin 5000 IU", '#1a5276', 'white', 8.0, 0.9), (5, 2.3, "STEP 8: ABORT SURGERY → TIVA Maintenance\nTransfer to Cardiac ICU intubated", '#922b21', 'white', 8.0, 0.9), (5, 1.0, "GOAL: Preserve coronary perfusion | Prevent apical thrombus | ICU monitoring", '#1d6a0d', 'white', 9.0, 0.85), ] for (x, y, text, fc, tc, w, h) in steps: box = FancyBboxPatch((x-w/2, y-h/2), w, h, boxstyle="round,pad=0.12", facecolor=fc, edgecolor='white', lw=1.3, alpha=0.93) ax.add_patch(box) ax.text(x, y, text, color=tc, fontsize=8.5, ha='center', va='center', fontweight='bold', multialignment='center') # Arrows between steps for i in range(len(steps)-1): y1 = steps[i][1] - steps[i][6]/2 y2 = steps[i+1][1] + steps[i+1][6]/2 ax.annotate('', xy=(5, y2), xytext=(5, y1), arrowprops=dict(arrowstyle='->', color='#f39c12', lw=2.0)) plt.tight_layout() plt.savefig(f"{IMG_DIR}/management_algorithm.png", dpi=150, bbox_inches='tight', facecolor='#0f3460', edgecolor='none') plt.close() print("Saved: management_algorithm.png") print("\nAll custom images created!") import os for f in sorted(os.listdir(IMG_DIR)): size = os.path.getsize(f"{IMG_DIR}/{f}") print(f" {f}: {size//1024}KB") PYEOF
python3 << 'PYEOF' import shutil, os from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from io import BytesIO from PIL import Image SRC = "/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case.pptx" OUT = "/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case_WithImages.pptx" IMG = "/tmp/workspace/anesthesia_ppt/images" shutil.copy(SRC, OUT) prs = Presentation(OUT) def add_image(slide, img_path, left, top, width, height=None): """Add image to slide with given position (all in inches).""" if height: prs_img = slide.shapes.add_picture(img_path, Inches(left), Inches(top), Inches(width), Inches(height)) else: prs_img = slide.shapes.add_picture(img_path, Inches(left), Inches(top), Inches(width)) return prs_img def resize_image_for_pptx(src_path, max_w=800, max_h=600): """Resize a large image to keep file size manageable.""" img = Image.open(src_path) img.thumbnail((max_w, max_h), Image.LANCZOS) buf = BytesIO() fmt = 'PNG' if src_path.endswith('.png') else 'JPEG' img.save(buf, format=fmt, quality=85) buf.seek(0) return buf def add_image_buf(slide, buf, left, top, width, height=None): if height: return slide.shapes.add_picture(buf, Inches(left), Inches(top), Inches(width), Inches(height)) else: return slide.shapes.add_picture(buf, Inches(left), Inches(top), Inches(width)) # ─── Slide 1 (Cover): Heart anatomy small image ──────────────── # Already has institution logo images; add a small heart overlay s1 = prs.slides[0] buf = resize_image_for_pptx(f"{IMG}/heart_anatomy.png", 400, 400) add_image_buf(s1, buf, left=0.1, top=2.5, width=3.0, height=3.2) print("Slide 1: heart anatomy added") # ─── Slide 3 (Introduction): Takotsubo apical photo ──────────── s3 = prs.slides[2] # Move content text slightly left to make room, add image on right buf3 = resize_image_for_pptx(f"{IMG}/takotsubo_apical.jpg", 600, 500) add_image_buf(s3, buf3, left=9.0, top=2.0, width=4.0, height=3.8) print("Slide 3: takotsubo apical image added") # ─── Slide 4 (Clinical Features): ECG changes ────────────────── s4 = prs.slides[3] buf4 = resize_image_for_pptx(f"{IMG}/ecg_changes.png", 900, 500) add_image_buf(s4, buf4, left=0.3, top=5.3, width=12.8, height=2.0) print("Slide 4: ECG changes image added") # ─── Slide 5 (Pathophysiology): Catecholamine pathway ────────── s5 = prs.slides[4] buf5 = resize_image_for_pptx(f"{IMG}/catecholamine_pathway.png", 900, 600) add_image_buf(s5, buf5, left=6.8, top=1.2, width=6.3, height=5.8) print("Slide 5: catecholamine pathway added") # ─── Slide 6 (Patient Info): Heart diagram ───────────────────── s6 = prs.slides[5] buf6 = resize_image_for_pptx(f"{IMG}/heart_diagram_en.png", 600, 500) add_image_buf(s6, buf6, left=9.2, top=1.5, width=3.8, height=4.5) print("Slide 6: heart diagram added") # ─── Slide 7 (Chief Complaint): ECG tracing ──────────────────── s7 = prs.slides[6] buf7 = resize_image_for_pptx(f"{IMG}/takotsubo_ecg.jpg", 900, 500) add_image_buf(s7, buf7, left=0.3, top=5.2, width=12.8, height=2.1) print("Slide 7: ECG tracing added") # ─── Slide 9 (Vitals / Collapse): Takotsubo schematic ────────── s9 = prs.slides[8] buf9 = resize_image_for_pptx(f"{IMG}/takotsubo_schematic.png", 800, 550) add_image_buf(s9, buf9, left=7.5, top=1.5, width=5.6, height=5.2) print("Slide 9: takotsubo schematic added") # ─── Slide 11 (Clinical Challenge): ECG changes ──────────────── s11 = prs.slides[10] buf11 = resize_image_for_pptx(f"{IMG}/ecg_changes.png", 800, 450) add_image_buf(s11, buf11, left=7.3, top=2.0, width=5.8, height=4.8) print("Slide 11: ECG changes (right panel) added") # ─── Slide 13 (Intraoperative Mgmt): Management algorithm ────── s13 = prs.slides[12] buf13 = resize_image_for_pptx(f"{IMG}/management_algorithm.png", 700, 900) add_image_buf(s13, buf13, left=7.4, top=0.6, width=5.7, height=6.7) print("Slide 13: management algorithm added") # ─── Slide 17 (TEE slide): TEE diagram ───────────────────────── s17 = prs.slides[16] buf17a = resize_image_for_pptx(f"{IMG}/tee_echo.jpg", 700, 500) add_image_buf(s17, buf17a, left=0.3, top=1.7, width=6.8, height=5.3) buf17b = resize_image_for_pptx(f"{IMG}/tee_diagram.png", 700, 500) add_image_buf(s17, buf17b, left=7.2, top=1.7, width=5.8, height=5.3) print("Slide 17: TEE images added") # ─── Slide 2 (Case Title): Takotsubo schematic ───────────────── s2 = prs.slides[1] buf2 = resize_image_for_pptx(f"{IMG}/takotsubo_schematic.png", 700, 550) add_image_buf(s2, buf2, left=0.2, top=0.5, width=6.5, height=6.5) print("Slide 2: takotsubo schematic (title slide) added") prs.save(OUT) print(f"\nSaved: {OUT}") size = os.path.getsize(OUT) print(f"File size: {size//1024}KB ({size//1048576}MB)") PYEOF
python3 << 'EOF' # Verify all slides have images from pptx import Presentation from pptx.enum.shapes import MSO_SHAPE_TYPE prs = Presentation("/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case_WithImages.pptx") print(f"Total slides: {len(prs.slides)}") print() for i, slide in enumerate(prs.slides, 1): shapes = slide.shapes texts = [s.text_frame.text.strip()[:50] for s in shapes if s.has_text_frame and s.text_frame.text.strip()] pics = [s.name for s in shapes if s.shape_type == 13] # PICTURE = 13 print(f"Slide {i:2d}: {len(pics)} image(s) {pics[:3]} | Text: {texts[0][:45] if texts else '(none)'}") EOF
Takotsubo Anesthesia Case WithImages
Presentation · PPTX
| Slide | Image Added |
|---|---|
| 1 (Cover) | Heart anatomy 3D illustration |
| 2 (Case Title) | Custom Takotsubo LV ballooning schematic (Normal vs TCM comparison) |
| 3 (Introduction) | Real Takotsubo apical ballooning clinical photo |
| 4 (Clinical Features) | Custom ECG evolution chart (Baseline → ST elevation → T inversions) |
| 5 (Pathophysiology) | Custom catecholamine surge pathway flowchart |
| 6 (Patient Info) | Labeled heart anatomy diagram (Wikimedia CC) |
| 7 (Chief Complaint) | Real Takotsubo ECG tracing (LITFL) |
| 9 (Vitals / Collapse) | Custom Normal LV vs Takotsubo LV schematic with LVEF values |
| 11 (Clinical Challenge) | ECG phases diagram (right panel) |
| 13 (Intraoperative Mgmt) | Custom 8-step anesthesia management algorithm flowchart |
| 17 (TEE Slide) | TEE echo image + TEE probe/heart diagram (both panels) |
Explain everything abt this case so i explain
"Good morning/evening. I'm Shrinidhi Bhandare, and today I'm presenting a very unique and rare case — a patient who developed Takotsubo Cardiomyopathy right on the operating table, during general anesthesia. This is a case where the anesthesiologist became the most important person in the room."
"The title 'When the Heart Breaks on the Table' captures the drama of this case perfectly. This is not a surgical complication — it is an anesthesia-triggered cardiac emergency."
"She had multiple hidden risk factors: female sex, anxiety disorder, SSRI use, obesity, and laparoscopy. None of these individually would raise a red flag on standard pre-op assessment. Yet together, they created a perfect storm."
| Vital | Value | Meaning |
|---|---|---|
| HR 128 bpm | Tachycardia | Heart compensating for low output |
| BP 68/40 mmHg | Cardiogenic shock | LV not pumping effectively |
| SpO₂ 91% | Hypoxemia | Low cardiac output = poor O₂ delivery |
| EtCO₂ 28 mmHg | LOW | This is the key! Low EtCO₂ = low cardiac output (less CO₂ reaching lungs) |
| ECG: ST elevation II,III,aVF | Inferior leads | Pattern consistent with inferior ischemia |
| TEE: LVEF ~25% | Severe LV dysfunction | Apical ballooning confirmed |
| Troponin 0.8 ng/mL | Mildly elevated | Disproportionately low for degree of wall motion abnormality |
| Coronary angio: Normal | No obstruction | STEMI excluded → TCM confirmed |
"Before the BP even crashes, EtCO₂ dropping is your first hint that cardiac output is falling. Every anesthesia resident must recognize this."
"The drug every doctor reaches for in shock — adrenaline — is the exact drug that could kill this patient by worsening Takotsubo. This is the paradox that makes this case unforgettable."
"Standard pre-op risk stratification tools (ASA, Revised Cardiac Risk Index) don't capture TCM risk. We need to think beyond checklists."
"Early recognition of EtCO₂ drop → immediate TEE → correct vasopressor choice → rapid ICU transfer. Every step was made by the anesthesiologist."
"This case teaches us three unforgettable lessons: First — Not every intraoperative ST elevation is a STEMI. Takotsubo must be in our differential. Second — The drug everyone reaches for in shock (epinephrine) can kill this patient. Knowing when NOT to use a drug is as important as knowing when to use it. Third — The anesthesiologist is the first-line cardiologist in the operating room. This patient survived because of the anesthesiologist's diagnosis, decision-making, and management — not despite it.In an era where anesthesia is sometimes seen as background support, this case reminds us that we are the last line of defense when everything goes wrong."
"TEE is not just a cardiac surgery tool. It is the anesthesiologist's stethoscope of the future — and this case proves it."
"To summarize: A 34-year-old anxious female, on an SSRI, with morbid obesity, developed intraoperative Takotsubo Cardiomyopathy during laparoscopic sleeve gastrectomy — triggered by catecholamine surge from abdominal insufflation. Rapid diagnosis by TEE, correct vasopressor choice, and ICU management led to complete recovery. The anesthesiologist was the hero of this case. Thank you."
How is this ? Can v make oral case presentation on it ?
| Step | What They Did |
|---|---|
| Airway Assessment | Pre-op CT scan, neck X-ray, 2D ECHO |
| Induction | Propofol 120 mg + Fentanyl 100 mcg |
| Intubation | Videolaryngoscopy → armored tube 6.5 mm |
| Nasogastric tube | 20 Ch, 160 cm |
| Position | Shoulder roll + head ring (Rose position) |
| Maintenance | Sevoflurane + O₂ + air + Vecuronium |
| Fluids | Input 3200 mL, urine 1500 mL, blood loss 800-900 mL, 2 PCV transfusions |
| Extubation | Cuff leak test done → positive leak confirmed → safe extubation |
| Sugammadex | 200 mg IV for reversal |
| Post-op | ICU on 2L O₂ via nasal prongs |
| Result | Successful total thyroidectomy, no airway complications |
So, that is from the College of PI, MSR. That is different college. And our college is PI, AHS. Okay? And that is for the another student. Their judges will not come to our, our judging panel. Okay? So, tell me, with the two d- which is very good? This is... Navigating Thyroid Mass Surgery is good one, or that is good one? The which one you have selected for the cardiac? Tell me.
| 🫀 Takotsubo Cardiomyopathy | 🦋 Large Thyroid Mass | |
|---|---|---|
| Uniqueness | ⭐⭐⭐⭐⭐ Extremely rare — intraoperative TCM is almost never seen | ⭐⭐⭐ Common competition topic, seen regularly |
| Anesthesia-centricity | ⭐⭐⭐⭐⭐ 100% anesthesia-driven — YOU are the hero | ⭐⭐⭐⭐ Mostly airway management |
| Drama / Wow factor | ⭐⭐⭐⭐⭐ Sudden collapse on table, ECG changes, LVEF 25% | ⭐⭐⭐ Anticipated difficult airway — less surprising |
| Judge impression | "We've never seen this before" | "We've seen this type before" |
| Learning points | Multiple, layered, paradoxical (epinephrine paradox) | Good but straightforward |
| Q&A difficulty | Moderate — you just need to learn what we discussed | Moderate — standard difficult airway protocol |
| Risk of overlap | Zero — nobody else will present this | High — very popular competition topic |
| PPT already built | ✅ Ready with images | ❌ Not built yet |
Every anesthesia resident knows about large thyroid + difficult airway. Nobody expects a cardiac case where the anesthesiologist — not the cardiologist — diagnoses, manages, and saves the patient using bedside TEE, and where giving the wrong vasopressor (adrenaline) would have killed the patient.
Review the 18-slide PPT and get familiar with each image
python3 << 'EOF' import zipfile, os, shutil from pptx import Presentation from pptx.enum.shapes import MSO_SHAPE_TYPE PPT = "/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case_WithImages.pptx" IMG_OUT = "/tmp/workspace/anesthesia_ppt/slide_images" os.makedirs(IMG_OUT, exist_ok=True) prs = Presentation(PPT) # Extract all embedded images with slide mapping with zipfile.ZipFile(PPT, 'r') as z: media_files = [f for f in z.namelist() if f.startswith("ppt/media/")] for mf in media_files: fname = os.path.basename(mf) data = z.read(mf) with open(f"{IMG_OUT}/{fname}", "wb") as out: out.write(data) print(f"Extracted {len(media_files)} media files") print() # Now map which images are on which slides print("=== SLIDE-BY-SLIDE IMAGE & TEXT INVENTORY ===\n") for i, slide in enumerate(prs.slides, 1): texts = [] images = [] for shape in slide.shapes: if shape.has_text_frame: t = shape.text_frame.text.strip() if t: texts.append(t[:100]) if shape.shape_type == 13: # PICTURE try: img_name = shape.image.blob[:4] # first 4 bytes signature # get actual filename via relationship rel = shape._element.blip_fill.blip.rId if hasattr(shape._element, 'blip_fill') else None images.append(f"Picture: {shape.name} | size: {shape.width//914400}\" x {shape.height//914400}\"") except: images.append(f"Picture: {shape.name}") print(f"SLIDE {i:02d}") print(f" Text (first line): {texts[0][:80] if texts else '(none)'}") print(f" Images on slide: {len(images)}") for img in images: print(f" - {img}") print() EOF
ls -lh /tmp/workspace/anesthesia_ppt/slide_images/
python3 << 'EOF' # Map which image file corresponds to which slide and what it is # by matching image filenames to the order they appear in the zip/pptx relationships import zipfile, re PPT = "/tmp/workspace/anesthesia_ppt/Takotsubo_Anesthesia_Case_WithImages.pptx" # Read slide relationships to understand which media goes where with zipfile.ZipFile(PPT, 'r') as z: for slide_num in range(1, 19): rel_file = f"ppt/slides/_rels/slide{slide_num}.xml.rels" if rel_file in z.namelist(): content = z.read(rel_file).decode('utf-8') # Find all image references imgs = re.findall(r'Target="\.\.\/media\/(image\d+\.\w+)"', content) if imgs: print(f"Slide {slide_num:02d}: {imgs}") EOF
python3 << 'EOF' # Print the image map clearly mapping = { "image2.png": "Slide 01 - Original template logo/header image", "image3.png": "Slides 01 & 18 - Template footer/logo image", "image4.png": "Slide 02 - LEFT large image on Case Title slide", "image5.png": "Slides 07,08,09,10,17 - Small corner logo", "image6.png": "Slides 03-06,11-16,18 - Small corner logo (institution)", "image7.jpeg": "Slide 10 - Surgical procedure image (laparoscopic)", "image8.png": "Slide 17 - TEE image LEFT panel", "image9.png": "Slide 18 - Thank You slide background/logo", "image10.png": "Slide 01 - Heart anatomy image (3D anatomical heart)", "image11.jpg": "Slide 03 - Takotsubo real clinical photo (apical ballooning)", "image12.png": "Slide 04 - Custom ECG evolution chart (3 phases)", "image13.png": "Slide 05 - Catecholamine surge pathway flowchart", "image14.png": "Slide 06 - Labeled heart anatomy diagram", "image15.jpg": "Slide 07 - Real Takotsubo ECG tracing (LITFL)", "image16.png": "Slide 09 - Custom Normal LV vs Takotsubo LV schematic", "image17.png": "Slide 11 - ECG phases (right side panel)", "image18.png": "Slide 13 - 8-step management algorithm flowchart", "image19.jpg": "Slide 17 - TEE echo image (probe + heart chambers)", "image20.png": "Slide 17 - TEE diagram showing probe position", "image21.png": "Slide 02 - Takotsubo LV schematic on title slide", } print("=== COMPLETE IMAGE REFERENCE MAP ===\n") for filename, description in mapping.items(): import os size = os.path.getsize(f"/tmp/workspace/anesthesia_ppt/slide_images/{filename}") print(f"{filename:15s} ({size//1024:4d}KB) → {description}") print("\n=== UNIQUE MEDICAL IMAGES (your actual content images) ===") medical = { "image10.png": "3D Heart Anatomy", "image11.jpg": "Takotsubo Clinical Photo", "image12.png": "ECG Evolution Chart (custom)", "image13.png": "Catecholamine Pathway (custom)", "image14.png": "Heart Diagram Labeled", "image15.jpg": "Real ECG Tracing", "image16.png": "LV Schematic Normal vs TCM (custom)", "image17.png": "ECG Phases Panel (custom)", "image18.png": "Management Algorithm (custom)", "image19.jpg": "TEE Echo Photo", "image20.png": "TEE Probe Diagram", "image21.png": "Takotsubo Schematic on Title", "image7.jpeg": "Laparoscopic Surgery Image", } for f, d in medical.items(): print(f" {f} → {d}") EOF
Make a one-page handout summary of the case for judges
Create a Word document with detailed speaker notes for each slide