Make a presentation on Analysis of csf which I will present in medicine class for 20 minutes make it visually oriented

Reading File
Reading File
Searching the Web

cerebrospinal fluid analysis normal values meningitis bacterial viral tuberculous guideline

Reading File
Reading File
Finding Sources
Finding Sources
Searching PubMed

cerebrospinal fluid AND meningitis

Searching Images

diagram lumbar puncture CSF collection manometer opening pressure cerebrospinal fluid analysis

Browsing Directory

~/

Reading File
Reading File
Reading File
Searching Images

cerebrospinal fluid circulation schematic ventricles arachnoid granulations diagram

Searching Images

lumbar puncture anatomy spinal needle diagram

This composite educational graphic illustrates ultrasound-guided lumbar puncture techniques using various spinal scanning views. Panels (a), (b), and (c) present sagittal ultrasound images of the lumbar spine: (a) Parasagittal oblique view identifying the L4/L5 laminae, sacrum, and dural boundaries; (b) Spinous process view showing the characteristic acoustic shadow of the posterior bony elements; and (c) Near-spinous process view providing an optimized window for visualizing the spinal canal between the anterior and posterior dura. Panel (d) contains a transverse schematic diagram and a 3D anatomical model of the vertebrae, correlating the transducer angles (a, b, c) with the internal anatomy and marking the target puncture point in the interspinous space. Panel (e) is a clinical photograph demonstrating the procedural application: a sterile-covered convex probe with an attached needle guide frame is used for real-time guidance while a puncture needle is inserted. The content is designed for medical training in neuraxial anesthesia and spinal access procedures.

This composite educational graphic illustrates ultrasound-guided lumbar puncture techniques using various spinal scanning views. Panels (a), (b), and (c) present sagittal ultrasound images of the lumbar spine: (a) Parasagittal oblique view identifying the L4/L5 laminae, sacrum, and dural boundaries; (b) Spinous process view showing the characteristic acoustic shadow of the posterior bony elements; and (c) Near-spinous process view providing an optimized window for visualizing the spinal canal between the anterior and posterior dura. Panel (d) contains a transverse schematic diagram and a 3D anatomical model of the vertebrae, correlating the transducer angles (a, b, c) with the internal anatomy and marking the target puncture point in the interspinous space. Panel (e) is a clinical photograph demonstrating the procedural application: a sterile-covered convex probe with an attached needle guide frame is used for real-time guidance while a puncture needle is inserted. The content is designed for medical training in neuraxial anesthesia and spinal access procedures.

This diagnostic image is an axial CT scan of the lumbar spine used for preoperative planning of a percutaneous vertebral procedure, such as vertebroplasty or kyphoplasty. The scan shows a cross-section of a vertebra, including the vertebral body, pedicles, and spinous process, with surrounding soft tissue landmarks like the kidneys visible. Overlaid blue lines and red points (A-E) illustrate the geometry for a transpedicular approach. Line AB represents the anatomical midline of the vertebra. Point C is positioned at the anterior one-third of the vertebral body on the midline, while Point D marks the target entry site at the superolateral junction of the pedicle. Line CE extends from the target point C through the pedicle entry point D to the skin surface at Point E. The angle formed between midline AB and the trajectory line CE defines the required puncture angle for needle insertion. The distance between the skin entry point (E) and the spinous process midline (A) is mapped to guide the surgical incision location. This diagram serves as a clinical algorithm for determining precise instrumentation pathways relative to spinal anatomy.

This diagnostic image is an axial CT scan of the lumbar spine used for preoperative planning of a percutaneous vertebral procedure, such as vertebroplasty or kyphoplasty. The scan shows a cross-section of a vertebra, including the vertebral body, pedicles, and spinous process, with surrounding soft tissue landmarks like the kidneys visible. Overlaid blue lines and red points (A-E) illustrate the geometry for a transpedicular approach. Line AB represents the anatomical midline of the vertebra. Point C is positioned at the anterior one-third of the vertebral body on the midline, while Point D marks the target entry site at the superolateral junction of the pedicle. Line CE extends from the target point C through the pedicle entry point D to the skin surface at Point E. The angle formed between midline AB and the trajectory line CE defines the required puncture angle for needle insertion. The distance between the skin entry point (E) and the spinous process midline (A) is mapped to guide the surgical incision location. This diagram serves as a clinical algorithm for determining precise instrumentation pathways relative to spinal anatomy.

Reading File
Loading Image
Reading Web Page

https://www.aafp.org/afp/2021/0401/p422

Running Command

mkdir -p "/tmp/workspace/csf-analysis-presentation/src" "/tmp/workspace/csf-analysis-presentation/output" && python -c "import pptx; print('python-pptx ready')"

Writing File

~/csf-analysis-presentation/src/create_csf_deck.py

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.dml import MSO_THEME_COLOR

OUT='/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx'
prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5)
blank=prs.slide_layouts[6]
# palette
NAVY=RGBColor(10,31,51); BLUE=RGBColor(21,107,160); TEAL=RGBColor(13,152,148); CYAN=RGBColor(100,210,220)
INK=RGBColor(28,45,58); MUTED=RGBColor(92,110,122); BG=RGBColor(246,249,251); WHITE=RGBColor(255,255,255)
RED=RGBColor(205,68,73); ORANGE=RGBColor(235,143,55); GREEN=RGBColor(46,151,105); PURPLE=RGBColor(120,88,175); YELLOW=RGBColor(248,198,72)

# helpers
def rect(s,x,y,w,h,fill, radius=False, line=None):
    sh=s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h))
    sh.fill.solid(); sh.fill.fore_color.rgb=fill
    sh.line.color.rgb=line if line else fill
    return sh
def text(s,x,y,w,h,txt,size=20,color=INK,bold=False,align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.TOP, font='Aptos', margin=.05):
    sh=s.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=sh.text_frame; tf.clear(); tf.word_wrap=True
    tf.margin_left=tf.margin_right=Inches(margin); tf.margin_top=tf.margin_bottom=Inches(margin); tf.vertical_anchor=valign
    p=tf.paragraphs[0]; p.alignment=align; r=p.add_run(); r.text=txt; r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color
    return sh
def line(s,x1,y1,x2,y2,color=BLUE,width=2):
    ln=s.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, Inches(x1), Inches(y1), Inches(x2), Inches(y2)); ln.line.color.rgb=color; ln.line.width=Pt(width); return ln
def circle(s,x,y,d,fill,label='',fs=16,tc=WHITE):
    sh=s.shapes.add_shape(MSO_SHAPE.OVAL, Inches(x), Inches(y), Inches(d), Inches(d)); sh.fill.solid();sh.fill.fore_color.rgb=fill;sh.line.color.rgb=fill
    if label: text(s,x,y+.03,d,d-.05,label,fs,tc,True,PP_ALIGN.CENTER,MSO_ANCHOR.MIDDLE)
    return sh
def base(title,kicker='',num=None):
    s=prs.slides.add_slide(blank); rect(s,0,0,13.333,7.5,BG); rect(s,0,0,13.333,.18,TEAL)
    if kicker: text(s,.55,.36,11.6,.3,kicker.upper(),10,TEAL,True)
    if title: text(s,.55,.68,12.1,.58,title,28,NAVY,True)
    if num is not None: text(s,12.35,7.08,.45,.2,str(num).zfill(2),9,MUTED,True,PP_ALIGN.RIGHT)
    return s
def pill(s,x,y,w,txt,fill=BLUE):
    rect(s,x,y,w,.38,fill,True); text(s,x+.06,y+.03,w-.12,.29,txt,11,WHITE,True,PP_ALIGN.CENTER)
def card(s,x,y,w,h,head,body,accent=TEAL,body_size=16):
    rect(s,x,y,w,h,WHITE,True,RGBColor(222,230,235)); rect(s,x,y,.09,h,accent)
    text(s,x+.25,y+.20,w-.45,.30,head,15,INK,True)
    text(s,x+.25,y+.62,w-.42,h-.75,body,body_size,MUTED)
def add_notes(slide, note):
    try: slide.notes_slide.notes_text_frame.text=note
    except: pass

# 1
s=prs.slides.add_slide(blank); rect(s,0,0,13.333,7.5,NAVY); rect(s,0,0,13.333,.18,TEAL)
text(s,.72,.92,8.5,.3,'MEDICINE CLASS | 20-MINUTE PRESENTATION',12,CYAN,True)
text(s,.72,1.45,7.9,1.2,'Analysis of\nCerebrospinal Fluid',36,WHITE,True)
text(s,.75,3.05,6.5,.55,'A pattern-based approach to CSF interpretation',19,RGBColor(205,226,237))
# stylized CSF flow
for x,y,d,c,lbl in [(9.1,1.25,1.25,TEAL,'CHOROID\nPLEXUS'),(10.6,3.0,1.25,BLUE,'CSF'),(9.1,4.75,1.25,PURPLE,'LP')]: circle(s,x,y,d,c,lbl,12)
line(s,10.1,2.25,10.95,2.95,CYAN,3); line(s,10.95,4.25,10.1,4.85,CYAN,3); line(s,9.72,4.75,9.72,2.5,CYAN,3)
text(s,.75,6.45,7,.25,'Prepared for: Medicine class     |     Presenter: __________________',12,RGBColor(184,209,220))
add_notes(s,'Open with the clinical promise: CSF is often the fastest route from a bedside syndrome to an etiologic diagnosis. State that this deck focuses on safe sampling and pattern recognition.')
# 2
s=base('Learning objectives','road map',2)
items=[('1','Know what a routine CSF profile contains',BLUE),('2','Recognize normal values and pre-analytical pitfalls',TEAL),('3','Differentiate infectious CSF patterns',ORANGE),('4','Apply a bedside interpretation algorithm',PURPLE)]
for i,(n,t,c) in enumerate(items):
 y=1.65+i*1.18; circle(s,.78,y,.58,c,n,17); text(s,1.55,y+.02,8.9,.32,t,19,INK,True); line(s,1.55,y+.58,11.9,y+.58,RGBColor(219,229,234),1)
text(s,9.25,1.65,2.65,3.6,'Think in a fixed sequence:\n\n1. Pressure\n2. Appearance\n3. Cells\n4. Glucose\n5. Protein\n6. Microbiology\n7. Context',18,NAVY,True)
# 3
s=base('CSF: where it comes from and why it changes','physiology',3)
# flow graphic
nodes=[(1.0,3.0,'Choroid\nplexus',TEAL),(3.4,3.0,'Ventricles',BLUE),(5.8,3.0,'Subarachnoid\nspace',PURPLE),(8.4,3.0,'Arachnoid\nvilli',GREEN),(10.8,3.0,'Venous\nblood',NAVY)]
for x,y,l,c in nodes: circle(s,x,y,1.3,c,l,13)
for i in range(4): line(s,nodes[i][0]+1.28,3.65,nodes[i+1][0],3.65,CYAN,3)
text(s,.95,1.55,11.6,.72,'Produced mainly by choroid plexus, circulates through ventricles and subarachnoid space, then returns to venous blood.',20,INK,True,PP_ALIGN.CENTER)
pill(s,2.25,5.5,2.2,'~500 mL formed/day',TEAL); pill(s,5.55,5.5,2.45,'~150 mL present',BLUE); pill(s,9.0,5.5,2.6,'~3-4 turnovers/day',PURPLE)
text(s,.9,6.35,11.6,.35,'CSF protein is much lower than plasma because the blood-CSF barrier limits entry of large proteins.',13,MUTED,False,PP_ALIGN.CENTER)
# 4
s=base('Lumbar puncture: obtain the right sample safely','collection',4)
# spine schematic
rect(s,.75,1.55,4.35,4.9,WHITE,True,RGBColor(222,230,235)); text(s,1.05,1.84,3.7,.28,'Landmark and needle path',15,INK,True)
for i in range(5):
 y=2.45+i*.68; rect(s,2.0,y,1.6,.23,RGBColor(184,199,207),True); text(s,1.12,y-.05,.65,.25,f'L{i+1}',11,MUTED,True)
line(s,.95,4.67,4.75,4.67,ORANGE,3); text(s,1.1,4.75,3.7,.33,'Iliac crest line ≈ L4 level',13,ORANGE,True)
line(s,4.72,3.85,3.68,4.15,RED,3); text(s,3.93,3.35,.9,.26,'Needle',12,RED,True)
card(s,5.55,1.55,3.2,2.0,'Before puncture','Assess for raised ICP / mass effect risk, local infection, bleeding risk and clinical stability.',TEAL,15)
card(s,5.55,3.78,3.2,2.2,'At the bedside','Lateral decubitus for reliable opening pressure. Record pressure before removing fluid.',BLUE,15)
card(s,9.0,1.55,3.35,4.45,'Tube sequence','Tube 1\nChemistry / immunology\n\nTube 2\nMicrobiology\n\nTube 3\nCell count + differential\n\nFollow local laboratory policy.',PURPLE,15)
# 5
s=base('The routine CSF panel','what to request',5)
centers=[(1.0,1.75,'Opening\npressure','mm H₂O',BLUE),(4.15,1.75,'Appearance','clear?\nxanthochromia?',TEAL),(7.3,1.75,'Cells','WBC, RBC\ndifferential',ORANGE),(10.45,1.75,'Chemistry','glucose, protein\nlactate',PURPLE),(2.58,4.6,'Microbiology','Gram stain, culture\nPCR / antigen',GREEN),(7.35,4.6,'Special tests','OCBs, cytology\nflow cytometry',NAVY)]
for x,y,head,sub,c in centers:
 rect(s,x,y,2.35,1.7,WHITE,True,RGBColor(220,230,235)); circle(s,x+.82,y+.2,.7,c); text(s,x+.15,y+.98,2.05,.24,head,15,INK,True,PP_ALIGN.CENTER); text(s,x+.15,y+1.26,2.05,.32,sub,11,MUTED,False,PP_ALIGN.CENTER)
# 6
s=base('Normal adult CSF: anchor values','reference range',6)
headers=['Opening pressure','WBC','Protein','Glucose','Lactate','Appearance']
vals=['60-250\nmm H₂O','<5\n/µL','<50\nmg/dL','CSF:serum\n0.44-0.90','1.3-2.4\nmmol/L','Clear,\ncolorless']
colors=[BLUE,TEAL,ORANGE,PURPLE,GREEN,NAVY]
for i,(h,v,c) in enumerate(zip(headers,vals,colors)):
 x=.55+i*2.12; rect(s,x,1.75,1.84,3.55,WHITE,True,RGBColor(220,230,235)); rect(s,x,1.75,1.84,.2,c); text(s,x+.18,2.12,1.45,.4,h,15,INK,True,PP_ALIGN.CENTER); text(s,x+.16,3.02,1.48,.85,v,18,c,True,PP_ALIGN.CENTER,MSO_ANCHOR.MIDDLE)
text(s,.75,5.85,11.8,.4,'Always interpret glucose alongside a simultaneous blood glucose value. Neonatal reference intervals differ.',16,NAVY,True,PP_ALIGN.CENTER)
# 7
s=base('Start with the gross appearance','first clues',7)
app=[('Clear','Normal or viral\n(not always benign)',BLUE),('Turbid / purulent','High WBC, protein\nor organisms',ORANGE),('Bloody','Traumatic tap or\nsubarachnoid hemorrhage',RED),('Xanthochromic','Hemoglobin breakdown\n(or high protein)',YELLOW)]
for i,(h,b,c) in enumerate(app):
 x=.72+i*3.1; rect(s,x,1.75,2.55,3.7,WHITE,True,RGBColor(220,230,235)); circle(s,x+.88,2.15,.8,c); text(s,x+.2,3.25,2.15,.32,h,18,INK,True,PP_ALIGN.CENTER); text(s,x+.25,3.84,2.05,.65,b,15,MUTED,False,PP_ALIGN.CENTER)
text(s,.85,6.18,11.6,.38,'Do not diagnose subarachnoid hemorrhage from a single red tube. Compare sequential tubes and use the full clinical-imaging context.',15,NAVY,True,PP_ALIGN.CENTER)
# 8
s=base('Cells: count, differential, trajectory','cellular pattern',8)
# chart-like
text(s,.75,1.55,4.2,.32,'Interpret the differential',20,INK,True)
card(s,.75,2.1,3.7,1.22,'Neutrophil predominance','Usually pyogenic infection, but may be early viral disease.',ORANGE,14)
card(s,.75,3.55,3.7,1.22,'Lymphocyte predominance','Viral, TB, fungal, malignancy and inflammatory disorders.',PURPLE,14)
card(s,.75,5.0,3.7,1.22,'Eosinophils','Think parasites, fungi, shunts, drugs or malignancy.',GREEN,14)
# tubes graph
text(s,5.2,1.55,6.8,.32,'RBC trend across collection tubes',20,INK,True)
for i in range(3):
 x=5.7+i*1.9; rect(s,x,2.35,1.25,3.3,WHITE,True,RGBColor(220,230,235)); text(s,x,5.85,1.25,.25,f'Tube {i+1}',12,MUTED,True,PP_ALIGN.CENTER)
# declining bars
for i,h in enumerate([2.55,1.65,.8]): rect(s,5.97+i*1.9,5.25-h,.68,h,RED,True)
text(s,5.2,6.42,6.65,.34,'Falling RBCs supports a traumatic tap; persistence raises concern for SAH.',14,NAVY,True,PP_ALIGN.CENTER)
# 9
s=base('Glucose, protein and lactate: chemistry tells the story','chemistry',9)
# triangle
pts=[(2.1,4.9,'↓ Glucose',PURPLE),(5.65,1.9,'↑ Protein',ORANGE),(9.2,4.9,'↑ Lactate',RED)]
for x,y,l,c in pts: circle(s,x,y,1.35,c,l,15)
line(s,3.45,5.15,5.9,3.25,RGBColor(160,180,190),2); line(s,6.95,3.25,9.45,5.15,RGBColor(160,180,190),2); line(s,3.45,5.55,9.45,5.55,RGBColor(160,180,190),2)
text(s,4.1,4.55,4.9,.5,'Bacterial / TB / fungal\nprofiles often converge here',17,NAVY,True,PP_ALIGN.CENTER)
card(s,.85,1.35,2.55,1.35,'Glucose ratio','Use CSF:serum ratio. Low ratio suggests impaired transport or consumption.',PURPLE,13)
card(s,9.75,1.35,2.55,1.35,'Lactate','May help distinguish bacterial from aseptic meningitis, especially pre-antibiotics.',RED,13)
text(s,.95,6.55,11.5,.3,'High protein is nonspecific: infection, blood-CSF barrier disruption, tumor, spinal block and inflammatory disease can all elevate it.',14,MUTED,False,PP_ALIGN.CENTER)
# 10 infectious table
s=base('Infectious CSF patterns: compare the whole profile','pattern recognition',10)
cols=['Pattern','Pressure','Cells','Glucose','Protein','Microbiology']
rows=[('Bacterial','↑','PMN ↑↑','↓','↑↑','Gram stain / culture'),('Viral','Normal / ↑','Lymphocytes','Usually normal','Normal / ↑','PCR'),('TB','↑','Lymphocytes','↓','↑↑','AFB / NAAT / culture'),('Fungal','↑','Lymphocytes','↓','↑','Antigen / stain / culture')]
xs=[.55,2.55,4.2,6.25,8.05,9.75]; ws=[1.95,1.6,2.0,1.75,1.65,3.0]
for x,w,h in zip(xs,ws,cols): rect(s,x,1.6,w,.55,NAVY,True); text(s,x+.04,1.73,w-.08,.18,h,12,WHITE,True,PP_ALIGN.CENTER)
cs=[RED,BLUE,PURPLE,GREEN]
for r,row in enumerate(rows):
 y=2.27+r*.87
 for x,w,val in zip(xs,ws,row): rect(s,x,y,w,.73,WHITE,True,RGBColor(224,231,235)); text(s,x+.06,y+.15,w-.12,.4,val,14,INK, val==row[0],PP_ALIGN.CENTER,MSO_ANCHOR.MIDDLE)
 rect(s,.55,y,.08,.73,cs[r])
text(s,.7,6.25,11.7,.48,'Exceptions matter: early viral meningitis can be neutrophilic; partially treated bacterial meningitis can be less typical.',15,NAVY,True,PP_ALIGN.CENTER)
# 11 microbiology
s=base('Microbiology: match the test to the question','organism detection',11)
steps=[('1','Gram stain','Rapid. Specific when positive; sensitivity varies.',BLUE),('2','Culture','Send before antibiotics whenever possible.',TEAL),('3','NAAT / PCR','High-yield for many viral pathogens and TB panels.',PURPLE),('4','Antigen tests','Examples: cryptococcal antigen; selected bacterial tests.',GREEN)]
for i,(n,h,b,c) in enumerate(steps):
 x=.7+i*3.12; circle(s,x+.85,1.75,.72,c,n,16); text(s,x,2.65,2.4,.3,h,17,INK,True,PP_ALIGN.CENTER); text(s,x+.1,3.1,2.2,.82,b,14,MUTED,False,PP_ALIGN.CENTER)
 if i<3: line(s,x+2.38,2.12,x+3.05,2.12,RGBColor(180,195,202),2)
rect(s,.85,5.25,11.55,.72,RGBColor(229,246,244),True); text(s,1.05,5.42,11.1,.28,'Clinical rule: if bacterial meningitis is suspected, obtain blood cultures and start empiric antimicrobials promptly. Do not let testing delay treatment.',15,NAVY,True,PP_ALIGN.CENTER)
# 12 noninfectious
s=base('Beyond infection: high-yield noninfectious applications','expanded differential',12)
items=[('Subarachnoid hemorrhage','Persistent RBCs ± xanthochromia. Interpret with timing and neuroimaging.',RED),('Multiple sclerosis','Oligoclonal bands / intrathecal IgG synthesis support diagnosis in the right clinical setting.',PURPLE),('Malignancy','Cytology and flow cytometry. A larger CSF volume and prompt processing improve yield.',ORANGE),('Guillain-Barré syndrome','Albuminocytologic dissociation: high protein with relatively few cells, often after the first week.',TEAL)]
for i,(h,b,c) in enumerate(items):
 x=.72+(i%2)*6.15; y=1.6+(i//2)*2.35; card(s,x,y,5.75,1.85,h,b,c,15)
# 13 pitfalls
s=base('Pre-analytical pitfalls: where interpretation goes wrong','quality checks',13)
# error pathway
labels=[('Wrong position','Opening pressure unreliable',ORANGE),('Delayed processing','Cell degeneration / false low count',RED),('No paired glucose','Glucose value hard to interpret',PURPLE),('Traumatic tap','False RBC and WBC elevation',BLUE),('Antibiotics first','Lower culture yield',GREEN)]
for i,(a,b,c) in enumerate(labels):
 x=.6+i*2.55; rect(s,x,1.85,2.2,1.1,c,True); text(s,x+.12,2.05,1.96,.25,a,14,WHITE,True,PP_ALIGN.CENTER); line(s,x+1.1,2.95,x+1.1,3.55,c,2); rect(s,x,3.55,2.2,1.35,WHITE,True,RGBColor(220,230,235)); text(s,x+.12,3.85,1.96,.6,b,13,INK,True,PP_ALIGN.CENTER,MSO_ANCHOR.MIDDLE)
rect(s,.9,5.8,11.5,.55,RGBColor(255,245,231),True); text(s,1.05,5.95,11.2,.24,'Document collection time, tube order, patient position, opening pressure, antimicrobial exposure and paired serum glucose.',15,INK,True,PP_ALIGN.CENTER)
#14 algorithm
s=base('A bedside interpretation algorithm','putting it together',14)
boxes=[('Syndrome?','Meningitis / encephalitis / SAH / inflammatory neuropathy',BLUE),('Pressure + appearance','Normal? Turbid? Bloody? Xanthochromic?',TEAL),('Cells','Count + differential + RBC trend',ORANGE),('Chemistry','Glucose ratio + protein ± lactate',PURPLE),('Microbiology / special tests','Gram stain, culture, PCR, antigen, OCB, cytology',GREEN),('Action','Treat emergencies while awaiting confirmation',RED)]
for i,(h,b,c) in enumerate(boxes):
 y=1.35+i*.82; rect(s,1.05,y,10.5,.62,WHITE,True,RGBColor(220,230,235)); rect(s,1.05,y,.15,.62,c); text(s,1.4,y+.12,2.65,.22,h,14,c,True); text(s,4.05,y+.12,7.2,.24,b,14,INK)
 if i<5: line(s,6.3,y+.62,6.3,y+.82,RGBColor(180,195,202),2)
# 15 cases
s=base('Rapid-fire cases: name the pattern','audience check',15)
cases=[('Case A','OP ↑ | WBC 2,300/µL, 90% PMNs | glucose 22 mg/dL | protein 280 mg/dL','Bacterial meningitis',RED),('Case B','OP normal | WBC 120/µL, lymphocytes | glucose normal | protein 75 mg/dL','Viral meningitis',BLUE),('Case C','OP ↑ | WBC 180/µL, lymphocytes | glucose low | protein 260 mg/dL','TB / fungal pattern',PURPLE)]
for i,(h,data,ans,c) in enumerate(cases):
 y=1.5+i*1.62; rect(s,.75,y,11.8,1.25,WHITE,True,RGBColor(220,230,235)); rect(s,.75,y,.18,1.25,c); text(s,1.15,y+.18,1.3,.26,h,15,c,True); text(s,2.35,y+.17,6.6,.54,data,14,INK); pill(s,9.45,y+.42,2.5,ans,c)
text(s,.8,6.65,11.7,.3,'Ask: Which single result most shifted your probability? Then ask: What test or action comes next?',15,NAVY,True,PP_ALIGN.CENTER)
#16 summary + refs
s=base('Take-home messages','close',16)
for i,t in enumerate(['CSF interpretation is pattern recognition, not a single-test diagnosis.','Measure opening pressure correctly and obtain paired serum glucose.','Cells + glucose + protein + microbiology should be read together.','In suspected bacterial meningitis, do not delay treatment for a perfect CSF sample.']):
 circle(s,.8,1.55+i*1.0,.42,[BLUE,TEAL,PURPLE,RED][i],str(i+1),12); text(s,1.45,1.56+i*1.0,10.8,.3,t,17,INK,True)
text(s,.8,5.95,11.3,.25,'Selected sources',12,TEAL,True)
refs='Tietz Textbook of Laboratory Medicine, 7th ed., “Cerebrospinal Fluid,” pp. 2806-2819.  |  Henry’s Clinical Diagnosis and Management by Laboratory Methods, “Cerebrospinal Fluid,” pp. 2316-2324.  |  AAFP, Cerebrospinal Fluid Analysis (2021).'
text(s,.8,6.25,11.7,.55,refs,10,MUTED)
text(s,.8,7.0,11.6,.22,'Use local laboratory reference intervals and institutional lumbar-puncture protocols.',10,MUTED,False,PP_ALIGN.CENTER)

prs.save(OUT)
print(OUT)
Running Command

python "/tmp/workspace/csf-analysis-presentation/src/create_csf_deck.py" && ls -lh "/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx" && python - <<'PY' from pptx import Presentation p='/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx' prs=Presentation(p) print('slides=',len(prs.slides)) for i,s in enumerate(prs.slides,1): texts=[sh.text for sh in s.shapes if hasattr(sh,'text') and sh.text.strip()] print(i, ' | '.join(texts[:2]).replace('\n',' / ')[:125], 'shapes',len(s.shapes)) PY

Created a 16-slide, visually oriented presentation designed for a 20-minute medicine-class talk. It covers CSF physiology, lumbar puncture, normal values, appearance, cells, chemistry, infectious and noninfectious patterns, pitfalls, algorithm, and audience cases.

Add speaker notes for a 20-minute presentation

Reading File
Reading File
Searching the Web

CSF analysis normal values lumbar puncture bacterial viral tuberculous meningitis guidance

Browsing Directory

~/

Reading File
Finding Sources
Searching PubMed

cerebrospinal fluid AND meningitis

Browsing Directory

~/csf-analysis-presentation/

Reading File
Reading File
Running Command

python - <<'PY' from pptx import Presentation p='/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx' prs=Presentation(p) for i,sl in enumerate(prs.slides[:2],1): print(i, hasattr(sl,'notes_slide')) ns=sl.notes_slide print(type(ns), dir(ns)[:20]) for sh in ns.shapes: if getattr(sh,'has_text_frame',False): print('txt',repr(sh.text)) PY

Running Command

python - <<'PY' from pptx import Presentation p='/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx' prs=Presentation(p) for i,sl in enumerate(prs.slides,1): if i>1: break ns=sl.notes_slide print('slide',i,'notes',len(ns.shapes)) for sh in ns.shapes: if getattr(sh,'has_text_frame',False): print(repr(sh.text),sh.name) PY

Writing File

~/csf-analysis-presentation/src/add_speaker_notes.py

from pptx import Presentation

SRC = '/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx'
OUT = '/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class_with_Speaker_Notes.pptx'

notes = [
"""Timing: 0:00-0:45
Open with a clinical hook: a patient with fever, headache and neck stiffness may have a life-threatening CNS infection, and CSF can rapidly narrow the diagnosis. This talk is about reading the CSF as a pattern, not interpreting any result alone. By the end, the audience should be able to identify the core variables and recognise common infectious profiles.""",
"""Timing: 0:45-1:20
Briefly preview the route. First, a one-minute physiology and collection review. Then we will build the routine panel: pressure, appearance, cells, glucose, protein and microbiology. The main focus is the comparison of bacterial, viral, tuberculous and fungal patterns. Finish with a practical algorithm and two rapid cases.""",
"""Timing: 1:20-2:25
CSF is produced mainly by the choroid plexus, circulates through the ventricular system and subarachnoid space, and is reabsorbed through arachnoid villi. This matters because the blood-CSF barrier restricts protein entry. Therefore, raised CSF protein is sensitive for pathology but nonspecific. Lumbar CSF normally has slightly more protein than ventricular CSF. The sample we test reflects both CNS disease and the site of sampling.""",
"""Timing: 2:25-3:50
The usual site is L3-L4 or L4-L5, below the conus. In lateral decubitus position, measure opening pressure before removing fluid. Send sequential sterile tubes promptly. A practical allocation is chemistry and serology, then microbiology, then cell count, although local laboratory policy should be followed. Before LP, assess for features suggesting mass effect or raised intracranial pressure. If bacterial meningitis is strongly suspected, do not delay empirical treatment for imaging or LP.""",
"""Timing: 3:50-4:35
The minimum panel is opening pressure, gross appearance, cell count with differential, glucose with a paired serum glucose, protein, Gram stain and culture. Add PCR or targeted antigen tests according to clinical context. The key habit is to record the simultaneous blood glucose. A CSF glucose value without serum context is less informative than the CSF-to-serum ratio.""",
"""Timing: 4:35-5:45
Use these as adult anchor values, but remember that laboratory and age-specific ranges differ. Normal CSF is clear, has fewer than 5 white cells per microlitre, protein below about 45 to 50 mg/dL, and a glucose ratio roughly 0.5 to 0.7 of serum. Opening pressure is commonly quoted as about 60 to 250 mm water in adults. Neonates have higher allowable protein and white-cell values, so do not apply adult thresholds to them.""",
"""Timing: 5:45-6:35
Before looking at numbers, look at the sample. Cloudy or purulent CSF suggests a high cellular or protein burden and should raise concern for bacterial infection. A red sample may reflect subarachnoid haemorrhage or a traumatic tap. Compare sequential tubes: clearing red cells supports a traumatic tap, whereas persistent blood raises concern for haemorrhage. Yellow supernatant, or xanthochromia, develops with haemoglobin breakdown but can also occur with high protein or marked jaundice.""",
"""Timing: 6:35-7:55
Then assess the cell count and differential. Neutrophils point toward pyogenic bacterial infection, but early viral disease can also be neutrophilic. Lymphocytic pleocytosis occurs in viral, tuberculous and fungal meningitis, and in several inflammatory conditions. Do not use the differential as a stand-alone rule. In a traumatic tap, peripheral blood contaminates the sample, so compare serial tubes and interpret white cells cautiously. When the pattern and illness severity conflict, treat the patient, not just the count.""",
"""Timing: 7:55-9:25
Glucose falls when organisms and inflammatory cells consume glucose or when transport is impaired. A low CSF-to-serum glucose ratio supports bacterial, tuberculous or fungal meningitis. Protein rises when the blood-CSF barrier is disrupted, with inflammation, haemorrhage, tumour or block. Lactate can support bacterial meningitis, especially before antibiotics, but it is an adjunct rather than a replacement for culture and clinical assessment. State the central rule: interpret glucose, protein and lactate together with cells and pressure.""",
"""Timing: 9:25-11:50
This is the core comparison slide. In acute bacterial meningitis, expect raised opening pressure, marked pleocytosis often with neutrophils, low glucose or a low ratio, and high protein. Viral meningitis generally has normal or mildly raised pressure, lymphocytic cells, normal glucose and modest protein elevation. Tuberculous and fungal meningitis are usually subacute: lymphocytic pleocytosis, high protein and low glucose, often with high opening pressure. The patterns overlap, particularly after antibiotics, early in illness and in immunocompromised patients. Therefore, a near-normal CSF cannot safely exclude bacterial meningitis in a patient with a convincing syndrome.""",
"""Timing: 11:50-13:05
Laboratory selection should be hypothesis-driven. Gram stain is rapid and specific when positive, but sensitivity varies. Culture remains important because it identifies the organism and allows susceptibility testing. PCR panels are fast and useful after partial treatment, but results require clinical correlation. For suspected tuberculosis, send adequate volume for mycobacterial studies and request NAAT where available. For cryptococcal disease, especially in immunocompromise, antigen testing is high yield. Always communicate the suspected diagnosis to the laboratory.""",
"""Timing: 13:05-14:20
CSF analysis extends beyond infection. A persistent red-cell count or xanthochromia can support subarachnoid haemorrhage when imaging is non-diagnostic. Oligoclonal bands and an elevated IgG index support intrathecal immunoglobulin production in multiple sclerosis, but are not diagnostic alone. Albuminocytologic dissociation, meaning high protein with few cells, is classically seen in Guillain-Barre syndrome, often later in the course. Cytology and flow cytometry may identify malignant cells when leptomeningeal disease is suspected.""",
"""Timing: 14:20-15:35
Many errors occur before the analyser runs. Collect opening pressure correctly in lateral decubitus and avoid measuring it after significant CSF removal. Get the paired serum glucose close to the LP. A delay can alter cell integrity and microbiological yield, so transport specimens promptly. Antibiotics may sterilise culture and soften the classic bacterial profile. Finally, a traumatic tap can falsely elevate red cells, white cells and protein. Document the sequence of tubes and the timing of antibiotics.""",
"""Timing: 15:35-17:00
Use this sequence at the bedside. First: is the patient clinically unstable or strongly suspected to have bacterial meningitis? If yes, obtain blood cultures and start treatment without avoidable delay. Second: review opening pressure and gross appearance. Third: classify the cells, then glucose ratio and protein. Fourth: choose microbiology tests based on the syndrome, immune status and epidemiology. Last: reconcile discordant results with the timeline, antibiotic exposure and imaging. A pattern is a probability, not a verdict.""",
"""Timing: 17:00-19:05
Pause and let the audience answer each case before revealing the label. Case one has high pressure, neutrophils, low glucose and high protein: acute bacterial meningitis until proven otherwise. Case two has lymphocytes, normal glucose and mild protein rise: a viral pattern, but ask about timing and prior antibiotics before excluding bacteria. Case three has subacute symptoms with lymphocytes, low glucose and very high protein: think tuberculosis or fungal meningitis, then tailor tests to immune status and exposure history. Emphasise that immediate management depends on illness severity, not waiting for every test.""",
"""Timing: 19:05-20:00
Close with three messages. One: collect CSF safely and obtain paired serum glucose. Two: read pressure, appearance, cells, glucose and protein as one integrated pattern. Three: bacterial meningitis is a clinical emergency, so treat promptly when suspected even if early CSF findings are incomplete or atypical. Invite questions, or ask the class which single CSF feature they find most helpful in distinguishing bacterial from viral meningitis."""
]

prs = Presentation(SRC)
assert len(prs.slides) == len(notes), (len(prs.slides), len(notes))
for slide, note in zip(prs.slides, notes):
    tf = slide.notes_slide.notes_text_frame
    tf.text = note
prs.save(OUT)
print(OUT)
Running Command

python "/tmp/workspace/csf-analysis-presentation/src/add_speaker_notes.py" && ls -lh "/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class_with_Speaker_Notes.pptx" && python - <<'PY' from pptx import Presentation p='/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class_with_Speaker_Notes.pptx' prs=Presentation(p) print('slides:', len(prs.slides)) for i,slide in enumerate(prs.slides,1): n=slide.notes_slide.notes_text_frame.text.strip() print(i, len(n), n.splitlines()[0]) assert len(prs.slides)==16 assert all(sl.notes_slide.notes_text_frame.text.strip() for sl in prs.slides) print('All speaker notes verified.') PY

Added detailed speaker notes to all 16 slides, paced for a 20-minute presentation. Each note includes timing, spoken explanations, transition points, and prompts for the audience cases.

CSF Analysis Medicine Class with Speaker Notes

Presentation · PPTX

Make a presentation on Analysis of csf which I will present in medicine class for 20 minutes make it also add AI generated images

Reading File
Reading File
Searching the Web

cerebrospinal fluid analysis normal values bacterial viral tuberculous fungal meningitis CSF patterns

Finding Sources
Finding Sources
Searching PubMed

cerebrospinal fluid AND meningitis

Generating Image

Medical textbook style educational illustration of cerebrospinal fluid circulation: choroid plexus in ventricles producing clear blue CSF, flow through lateral third and fourth ventricles into subarachnoid space around brain and spinal cord, reabsorption through arachnoid granulations to venous sinus. Accurate clean anatomy, no labels or text.

Generating Image

Medical educational illustration of a lumbar puncture in lateral decubitus position, showing lumbar vertebrae in cross-section, spinal needle safely entering the L3-L4 subarachnoid space below the conus medullaris, CSF flowing into collection tubes. Accurate anatomy, no labels or text.

Generating Image

High-quality medical laboratory still life of four sterile cerebrospinal fluid specimen tubes on a cool clinical laboratory bench, representing clear normal CSF, slightly cloudy bacterial meningitis CSF, blood-stained CSF, and pale yellow xanthochromic CSF. No labels, no text, realistic but educational.

Generating Image

Medical infographic-style illustration of cerebrospinal fluid analysis under a microscope and laboratory analyzer, showing white blood cells, glucose molecule motif, protein strands, Gram stain slide and PCR molecular testing elements arranged cleanly. No labels, no text.

Running Command

python "/tmp/skills/shared/scripts/fetch_images.py" "https://cdn.orris.care/image-gen/bd63d29d6dd0476595561b6b57c2edb9.png" "https://cdn.orris.care/image-gen/9eb2c8ec9fcf40b487b80f6bb1e98e39.png" "https://cdn.orris.care/image-gen/f7f4f11b633b45b5bb6dc11370695ee9.png" "https://cdn.orris.care/image-gen/13f088f444fd44d6970ba3de26e62758.png" > "/tmp/workspace/csf-analysis-presentation/assets_ai_images.json" && python - <<'PY' import json,base64,os from pathlib import Path p=Path('/tmp/workspace/csf-analysis-presentation/assets_ai_images.json') data=json.load(open(p)) out=Path('/tmp/workspace/csf-analysis-presentation/assets');out.mkdir(exist_ok=True) for i,x in enumerate(data,1): assert x.get('base64'), x b64=x['base64'].split(',',1)[-1] (out/f'ai_csf_{i}.png').write_bytes(base64.b64decode(b64)) print(i, out/f'ai_csf_{i}.png', (out/f'ai_csf_{i}.png').stat().st_size) PY

Running Command

python - <<'PY' from pptx import Presentation from pptx.util import Emu p='/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class_with_Speaker_Notes.pptx' prs=Presentation(p) for num in [1,3,4,5,7,10,11,15,16]: s=list(prs.slides)[num-1] print('\nSLIDE',num) for sh in s.shapes: if sh.has_text_frame and sh.text.strip(): print(f'{Emu(sh.left).inches:.2f},{Emu(sh.top).inches:.2f} {Emu(sh.width).inches:.2f}x{Emu(sh.height).inches:.2f}: {sh.text[:55].replace(chr(10),"/")}') PY

Browsing Directory

~/csf-analysis-presentation/output

Running Command

python - <<'PY' from pptx import Presentation from pptx.util import Emu p='/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx' prs=Presentation(p) for num in [1,3,4,5,7,10,11,15,16]: s=list(prs.slides)[num-1] print('\nSLIDE',num) for sh in s.shapes: if sh.has_text_frame and sh.text.strip(): print(f'{Emu(sh.left).inches:.2f},{Emu(sh.top).inches:.2f} {Emu(sh.width).inches:.2f}x{Emu(sh.height).inches:.2f}: {sh.text[:60].replace(chr(10),"/")}') PY

Browsing Directory

~/csf-analysis-presentation/src

Writing File

~/csf-analysis-presentation/src/add_ai_images_and_notes.py

from pptx import Presentation
from pptx.util import Inches
from pathlib import Path

BASE = Path('/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_Medicine_Class.pptx')
OUT = Path('/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_20min_AI_Images_Speaker_Notes.pptx')
ASSETS = Path('/tmp/workspace/csf-analysis-presentation/assets')

prs = Presentation(str(BASE))

# crop image to fill while preserving aspect ratio
def add_cropped(slide, path, x, y, w, h):
    pic = slide.shapes.add_picture(str(path), Inches(x), Inches(y), width=Inches(w), height=Inches(h))
    # python-pptx crops automatically by stretching unless crop values set; these assets are illustrative,
    # retain full image for clear educational context.
    return pic

def add_notes(slide, note):
    tf = slide.notes_slide.notes_text_frame
    tf.text = note

# AI-generated educational images. They are intentionally not diagnostic clinical images.
add_cropped(prs.slides[0], ASSETS/'ai_csf_4.png', 8.18, 0.62, 4.55, 5.75)
add_cropped(prs.slides[3], ASSETS/'ai_csf_2.png', 0.72, 1.45, 4.45, 4.88)
add_cropped(prs.slides[6], ASSETS/'ai_csf_3.png', 0.70, 1.42, 11.95, 1.42)
add_cropped(prs.slides[10], ASSETS/'ai_csf_4.png', 0.70, 5.75, 3.30, 0.88)

notes = [
"Timing: 0:00-0:45\nOpen with the clinical promise: CSF often links a bedside syndrome to an etiologic diagnosis quickly. The AI-generated illustration is a visual introduction to the laboratory pathway, not a diagnostic image. Tell the class that the session will focus on safe sampling and pattern recognition.\nTransition: Start by stating what they should be able to do by the end.",
"Timing: 0:45-1:20\nBriefly preview the sequence: physiology, correct collection, core measurements, then pattern recognition. For a 20-minute talk, emphasize that the goal is not memorizing isolated values but combining measurements.\nTransition: First, why does CSF exist and where does it go?",
"Timing: 1:20-2:25\nCSF is produced mainly by the choroid plexus, circulates through the ventricles and subarachnoid space, and is absorbed through arachnoid villi. About 500 mL is produced daily while the total volume is about 150 mL, so it turns over several times per day. The blood-CSF barrier explains why protein is normally low.\nTransition: We sample this system at the lumbar cistern.",
"Timing: 2:25-3:50\nUse the AI-generated lumbar puncture illustration to orient the audience. In adults, LP is usually performed at L3-L4 or L4-L5, below the conus. Lateral decubitus is needed for a reliable opening pressure. Before LP, assess for raised intracranial pressure or mass-effect risk, local infection, bleeding risk, and clinical stability. Send tubes promptly and follow local tube allocation protocols.\nTransition: Once fluid is collected, what is the minimum dataset?",
"Timing: 3:50-4:35\nRead the routine panel as a package: opening pressure, gross appearance, cell count with differential, protein, glucose with a paired serum glucose, and microbiology. Add tests selectively: PCR or NAAT, cryptococcal antigen, AFB studies, cytology, flow cytometry, oligoclonal bands, or VDRL depending on the clinical question.\nTransition: Before interpreting abnormality, anchor normal values.",
"Timing: 4:35-5:45\nQuote adult reference values as approximate, because local laboratory intervals prevail. Normal CSF is clear; WBC is fewer than 5 per microliter; protein is commonly below 45 to 50 mg/dL; CSF glucose is roughly 60% of serum, so paired serum glucose matters. Opening pressure should be measured correctly in lateral decubitus.\nTransition: The first clue is visible before any analyzer result returns.",
"Timing: 5:45-6:35\nThe AI-generated tubes are a visual aid only. Clear fluid can be normal or viral. Turbidity suggests increased cells, protein, or organisms. Blood may be a traumatic tap or subarachnoid hemorrhage. Xanthochromia represents pigment from hemoglobin breakdown but can also occur with marked protein elevation. Interpret serial tubes and clinical context.\nTransition: Next, quantify the inflammatory response.",
"Timing: 6:35-7:55\nPleocytosis means elevated CSF white cells. Neutrophil predominance supports acute bacterial disease, while lymphocytic predominance supports viral, TB, fungal, and many noninfectious processes. Avoid rigid rules: early viral meningitis may be neutrophilic; Listeria can be mixed or lymphocytic. In a traumatic tap, red cells and white cells should fall across sequential tubes.\nTransition: Chemistry adds a second, highly useful layer.",
"Timing: 7:55-9:25\nUse paired serum glucose. Low CSF glucose or a low CSF-to-serum glucose ratio supports bacterial, TB, fungal, malignant, and some inflammatory processes. Protein is sensitive but nonspecific, increasing when barrier permeability rises or CSF flow is obstructed. CSF lactate can support bacterial meningitis when obtained before antibiotics, but local practice and clinical context matter.\nTransition: Put cells and chemistry together in a whole pattern.",
"Timing: 9:25-11:50\nRead across each row, not down one column. Acute bacterial meningitis often has elevated opening pressure, neutrophilic pleocytosis, low glucose, and high protein. Viral meningitis usually has lymphocytes, near-normal glucose, and mild protein elevation. TB and fungal meningitis are often lymphocytic with low glucose and high protein. These are patterns, not absolutes. If bacterial meningitis is clinically suspected, treatment should not wait for perfect CSF confirmation.\nTransition: Now identify the organism efficiently.",
"Timing: 11:50-13:05\nThis slide includes an AI-generated laboratory image to reinforce the testing sequence. Gram stain gives rapid actionable information when positive. Culture remains important, ideally before antimicrobials. PCR or NAAT is particularly helpful for viral causes and selected bacterial or TB testing. Cryptococcal antigen is a high-yield targeted test. Obtain blood cultures and start empiric therapy promptly when bacterial meningitis is suspected.\nTransition: CSF analysis is not only for infection.",
"Timing: 13:05-14:20\nMention high-yield noninfectious applications: xanthochromia in possible subarachnoid hemorrhage, oligoclonal bands and IgG index in inflammatory demyelination, albuminocytologic dissociation in Guillain-Barre syndrome, and cytology or flow cytometry for malignancy. A test should answer a clinical question rather than be ordered automatically.\nTransition: Interpretation can fail before the sample reaches the analyzer.",
"Timing: 14:20-15:35\nHighlight three frequent traps. First, a traumatic tap complicates cell interpretation. Second, antibiotics before LP can reduce culture yield and blur a bacterial pattern. Third, delayed transport causes cellular degeneration and can compromise microbiology. Also do not overinterpret a single variable, especially glucose without a paired serum sample.\nTransition: Use a practical repeatable workflow.",
"Timing: 15:35-17:00\nThe workflow is: confirm clinical urgency, perform safety assessment, measure opening pressure correctly if appropriate, request the core panel, then classify the profile as bacterial-predominant, viral-predominant, chronic lymphocytic, hemorrhagic, or noninfectious. Finally, order targeted tests. Mention explicitly that suspected bacterial meningitis is a treatment emergency.\nTransition: Apply this to three short cases.",
"Timing: 17:00-19:05\nPause after each row and ask for the pattern, not a final organism. Case A is classic bacterial meningitis: neutrophils, low glucose, high protein. Case B is typical viral meningitis: lymphocytes, normal glucose, modest protein elevation. Case C is chronic lymphocytic meningitis, with TB and fungal infection high on the differential. Ask which result most changed their probability and what targeted test they would add.\nTransition: Finish with four durable rules.",
"Timing: 19:05-20:00\nClose by repeating the four messages: interpret a pattern, obtain paired serum glucose and reliable opening pressure, read cells with chemistry and microbiology together, and never delay appropriate therapy for a critically suspected bacterial meningitis. Invite questions. The reference slide should guide further reading; local laboratory reference intervals and hospital policies take priority."
]
assert len(notes) == len(prs.slides)
for slide, note in zip(prs.slides, notes):
    add_notes(slide, note)

prs.save(str(OUT))
print(OUT)
Running Command

python "/tmp/workspace/csf-analysis-presentation/src/add_ai_images_and_notes.py" && ls -lh "/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_20min_AI_Images_Speaker_Notes.pptx" && python - <<'PY' from pptx import Presentation from pathlib import Path p=Path('/tmp/workspace/csf-analysis-presentation/output/CSF_Analysis_20min_AI_Images_Speaker_Notes.pptx') prs=Presentation(str(p)) print('slides',len(prs.slides)) assert len(prs.slides)==16 for i,s in enumerate(prs.slides,1): note=s.notes_slide.notes_text_frame.text.strip() pics=sum(1 for sh in s.shapes if sh.shape_type==13) print(f'{i:02d}: notes={len(note)} chars, pictures={pics}') assert all(s.notes_slide.notes_text_frame.text.strip() for s in prs.slides) # Confirm four AI images embedded on intended slides for idx in [0,3,6,10]: assert any(sh.shape_type==13 for sh in prs.slides[idx].shapes), f'missing image {idx+1}' print('Speaker notes and AI-generated images verified.') PY

Editing File

~/csf-analysis-presentation/src/add_ai_images_and_notes.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/csf-analysis-presentation/src/add_ai_images_and_notes.py'
Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.