Helloo
What can you do for me
Can you prepare a ppt for me... π₯Ίπ₯Ί
What is the topic of your presentation? Β· Who is the audience? Β· How many slides do you need (approximately)?
mkdir -p /tmp/workspace/herpesvirus-ppt && ls /tmp/workspace/herpesvirus-ppt/
~/herpesvirus-ppt/create_ppt.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
import copy
# βββ COLOR PALETTE βββββββββββββββββββββββββββββββββββββββββββ
DARK_BLUE = RGBColor(0x1A, 0x3A, 0x5C) # deep navy
MED_BLUE = RGBColor(0x21, 0x6B, 0xA6) # medium blue
LIGHT_BLUE = RGBColor(0xD6, 0xEA, 0xF8) # background tint
ACCENT_RED = RGBColor(0xC0, 0x39, 0x2B) # red accent
ACCENT_GRN = RGBColor(0x1E, 0x87, 0x6F) # teal/green
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
LIGHT_GREY = RGBColor(0xF5, 0xF6, 0xFA)
MID_GREY = RGBColor(0xBD, 0xC3, 0xC7)
DARK_GREY = RGBColor(0x2C, 0x3E, 0x50)
ORANGE = RGBColor(0xE6, 0x7E, 0x22)
PURPLE = RGBColor(0x6C, 0x3A, 0x83)
W = Inches(13.333)
H = Inches(7.5)
prs = Presentation()
prs.slide_width = W
prs.slide_height = H
blank = prs.slide_layouts[6]
# βββ HELPERS βββββββββββββββββββββββββββββββββββββββββββββββββ
def add_rect(slide, x, y, w, h, fill=None, line_color=None, line_width=None):
shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
shape.line.fill.background()
if fill:
shape.fill.solid()
shape.fill.fore_color.rgb = fill
else:
shape.fill.background()
if line_color:
shape.line.color.rgb = line_color
if line_width:
shape.line.width = Pt(line_width)
else:
shape.line.fill.background()
return shape
def add_text(slide, text, x, y, w, h, font_name="Calibri", size=18, bold=False,
italic=False, color=DARK_GREY, align=PP_ALIGN.LEFT, wrap=True,
valign=MSO_ANCHOR.TOP):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = wrap
tf.auto_size = None
tf.vertical_anchor = valign
tf.margin_left = Pt(4)
tf.margin_right = Pt(4)
tf.margin_top = Pt(2)
tf.margin_bottom= Pt(2)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.name = font_name
run.font.size = Pt(size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
return tb
def add_bullets(slide, items, x, y, w, h, title=None, title_color=MED_BLUE,
bullet_color=DARK_GREY, size=13, title_size=14,
indent_items=None):
"""
items: list of strings or (text, level) tuples
indent_items: set of indices to indent at level 2
"""
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = None
tf.margin_left = Pt(4)
tf.margin_right = Pt(4)
tf.margin_top = Pt(2)
tf.margin_bottom= Pt(2)
first = True
if title:
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.LEFT
r = p.add_run()
r.text = title
r.font.name = "Calibri"
r.font.size = Pt(title_size)
r.font.bold = True
r.font.color.rgb = title_color
first = False
for idx, item in enumerate(items):
if isinstance(item, tuple):
text, level = item
else:
text, level = item, 1
if first:
p = tf.paragraphs[0]
first = False
else:
p = tf.add_paragraph()
p.alignment = PP_ALIGN.LEFT
# indent
from pptx.util import Pt as _Pt
p.level = level - 1
if level == 1:
p.space_before = _Pt(2)
r = p.add_run()
r.text = (" β’ " if level == 1 else " - ") + text
r.font.name = "Calibri"
r.font.size = _Pt(size if level == 1 else size - 1)
r.font.color.rgb = bullet_color if level == 1 else DARK_GREY
return tb
def slide_bg(slide, color=LIGHT_GREY):
add_rect(slide, 0, 0, 13.333, 7.5, fill=color)
def header_bar(slide, title, subtitle=None, bar_color=DARK_BLUE, text_color=WHITE):
add_rect(slide, 0, 0, 13.333, 1.15, fill=bar_color)
add_text(slide, title, 0.3, 0.08, 12.5, 0.65,
font_name="Calibri", size=28, bold=True, color=text_color,
align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
if subtitle:
add_text(slide, subtitle, 0.35, 0.72, 12.5, 0.38,
font_name="Calibri", size=14, bold=False, color=MID_GREY,
align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.TOP)
def footer(slide, text="Chapter 56 | Viral Exanthems and Cutaneous Viral Infections"):
add_rect(slide, 0, 7.18, 13.333, 0.32, fill=DARK_BLUE)
add_text(slide, text, 0.2, 7.19, 12.9, 0.28,
font_name="Calibri", size=9, color=MID_GREY,
align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 1 β TITLE SLIDE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
# Dark gradient background (two rectangles)
add_rect(s, 0, 0, 13.333, 7.5, fill=DARK_BLUE)
add_rect(s, 0, 4.8, 13.333, 2.7, fill=MED_BLUE)
# decorative bar
add_rect(s, 0, 2.2, 0.12, 3.2, fill=ACCENT_RED)
# Title
add_text(s, "Herpesvirus Infections", 0.5, 1.2, 12.3, 1.3,
font_name="Calibri", size=48, bold=True, color=WHITE,
align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
add_text(s, "HSV-1 Β· HSV-2 Β· Varicella-Zoster Virus", 0.5, 2.55, 12.3, 0.7,
font_name="Calibri", size=24, bold=False, color=LIGHT_BLUE,
align=PP_ALIGN.LEFT)
add_text(s, "Section 7 β Skin, Soft Tissue & Musculoskeletal System Infections\nChapter 56 | Viral Exanthems and Other Cutaneous Viral Infections",
0.5, 3.4, 12.3, 0.9,
font_name="Calibri", size=14, italic=True, color=MID_GREY,
align=PP_ALIGN.LEFT)
# bottom tag
add_text(s, "Medical Microbiology", 0.5, 5.3, 6, 0.5,
font_name="Calibri", size=16, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
add_text(s, "For Academic & Clinical Reference", 0.5, 5.78, 7, 0.4,
font_name="Calibri", size=13, color=MID_GREY, align=PP_ALIGN.LEFT)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 2 β FAMILY HERPESVIRIDAE: CLASSIFICATION
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "Family Herpesviridae: Classification", subtitle="Table 56.2 β Subfamilies, genera, replication, latency")
footer(s)
# Table header row
headers = ["Subfamily", "Duration of Replication\n& Cytopathology", "Site of Latency", "Genus", "Official Name", "Common Name"]
col_x = [0.18, 1.85, 3.55, 5.0, 6.55, 9.05]
col_w = [1.62, 1.65, 1.40, 1.50, 2.45, 4.10]
row_h = 0.42
# Header bg
add_rect(s, 0.18, 1.25, 13.0, row_h, fill=DARK_BLUE)
for i, hdr in enumerate(headers):
add_text(s, hdr, col_x[i]+0.02, 1.26, col_w[i]-0.04, row_h-0.04,
size=10, bold=True, color=WHITE, align=PP_ALIGN.CENTER, valign=MSO_ANCHOR.MIDDLE)
# Data rows
rows = [
# (subfamily, duration, latency, genus, official, common)
("Alpha (HSV)", "Short (12β18 hrs)\nCytolytic", "Neurons", "Simplexvirus", "Human herpesvirus 1\nHuman herpesvirus 2",
"Herpes simplex virus type 1\nHerpes simplex virus type 2"),
("", "", "", "Varicellovirus", "Human herpesvirus 3", "Varicella-zoster virus"),
("Beta (CMV)", "Long (>24 hrs)\nCytomegalic\n\nLong (>24 hrs)\nLymphoproliferative", "Glands, kidneys\n\nLymphoid tissue (T cells)",
"Cytomegalovirus\n\nRoseolovirus", "Human herpesvirus 5\n\nHuman herpesvirus 6\nHuman herpesvirus 7",
"Cytomegalovirus\n\nHuman herpesvirus 6\nHuman herpesvirus 7"),
("Gamma (EBV)", "Variable\nLymphoproliferative", "Lymphoid tissue (B cells)",
"Lymphocryptovirus\nRhadinovirus", "Human herpesvirus 4\nHuman herpesvirus 8",
"Epstein-Barr virus\nKaposi's sarcoma-associated herpesvirus"),
]
row_colors = [LIGHT_BLUE, WHITE, LIGHT_BLUE, WHITE]
y_start = 1.25 + row_h
for ri, row in enumerate(rows):
rh = [0.65, 0.45, 1.35, 0.65][ri]
add_rect(s, 0.18, y_start, 13.0, rh, fill=row_colors[ri])
for ci, cell in enumerate(row):
add_text(s, cell, col_x[ci]+0.02, y_start+0.03, col_w[ci]-0.04, rh-0.06,
size=9, color=DARK_GREY, align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
y_start += rh
# Note below
add_text(s, "β
Replication occurs in host cell nucleus via rolling circle mechanism (like other dsDNA viruses) β linear dsDNA becomes circular inside host cell.",
0.18, 6.7, 13.0, 0.4, size=10, italic=True, color=MED_BLUE)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 3 β HSV: OVERVIEW & PATHOGENESIS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "Herpes Simplex Virus (HSV) β Overview & Pathogenesis", bar_color=DARK_BLUE)
footer(s)
# Left column: general + transmission
add_rect(s, 0.18, 1.2, 6.2, 5.75, fill=WHITE)
tb = s.shapes.add_textbox(Inches(0.28), Inches(1.25), Inches(6.0), Inches(5.65))
tf = tb.text_frame; tf.word_wrap = True
def add_para(tf, text, size=12, bold=False, color=DARK_GREY, space_before=2, level=0):
try:
p = tf.add_paragraph()
except:
p = tf.paragraphs[0]
p.level = level
p.space_before = Pt(space_before)
r = p.add_run(); r.text = text
r.font.name="Calibri"; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color
# ββββ manually populate left box ββββ
p0 = tf.paragraphs[0]
p0.space_before=Pt(0)
r=p0.add_run(); r.text="General Features"
r.font.name="Calibri"; r.font.size=Pt(14); r.font.bold=True; r.font.color.rgb=MED_BLUE
add_para(tf,"β’ Belong to Ξ±-subfamily (Herpesviridae)")
add_para(tf,"β’ Extremely widespread β broad host range, infect many cell types")
add_para(tf,"β’ Replicate fast: 12β18 hour cycle; spread fast and cytolytic")
add_para(tf,"β’ Undergo latency in nerve cells; reactivate causing recurrent lesions")
add_para(tf,"β’ Two distinct types: HSV-1 and HSV-2",bold=True,color=DARK_BLUE)
add_para(tf,"","size=6,space_before=4")
add_para(tf,"Pathogenesis β Primary Infection",14,True,MED_BLUE,space_before=5)
add_para(tf,"β’ Transmission via abraded skin or mucosa")
add_para(tf,"β’ HSV-1: Oropharyngeal contact / infected saliva / direct skin contact")
add_para(tf,"β’ HSV-2: Sexual contact or vertical mode (mother β fetus)")
add_para(tf,"β’ Site of infection: Replicates locally β produces lesions")
add_para(tf," HSV-1 lesions: above waist (around mouth most common)")
add_para(tf," HSV-2 lesions: below waist (genital area most common)")
add_para(tf,"β’ Spread via nerve: Retrograde axonal flow β dorsal root ganglia β latency",bold=True)
add_para(tf,"β’ Primary infections usually mild / asymptomatic")
add_para(tf,"β’ Immunocompromised host: viremia β widespread organ involvement")
# Right column: latency + recurrence
add_rect(s, 6.6, 1.2, 6.5, 5.75, fill=WHITE)
tb2 = s.shapes.add_textbox(Inches(6.7), Inches(1.25), Inches(6.3), Inches(5.65))
tf2 = tb2.text_frame; tf2.word_wrap = True
p0b = tf2.paragraphs[0]; p0b.space_before=Pt(0)
r=p0b.add_run(); r.text="Latent Infection"
r.font.name="Calibri"; r.font.size=Pt(14); r.font.bold=True; r.font.color.rgb=ACCENT_RED
def ap2(tf,text,size=12,bold=False,color=DARK_GREY,sb=2):
p=tf.add_paragraph(); p.space_before=Pt(sb)
r=p.add_run(); r.text=text
r.font.name="Calibri"; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color
ap2(tf2,"β’ HSV-1: latency in trigeminal ganglia")
ap2(tf2,"β’ HSV-2: latency in sacral ganglia")
ap2(tf2,"β’ Does NOT replicate during latency; cannot be isolated")
ap2(tf2,"Recurrent Infections",14,True,ACCENT_RED,sb=6)
ap2(tf2,"Triggers: fever, axonal injury, physical/emotional stress, UV light")
ap2(tf2,"β’ Via axonal spread β peripheral site β secondary lesions")
ap2(tf2,"β’ Less extensive and less severe (pre-existing host immunity)")
ap2(tf2,"β’ Usually asymptomatic; virus continues shedding in secretions")
ap2(tf2,"HSV-1 vs HSV-2 β Key Differences",14,True,MED_BLUE,sb=6)
ap2(tf2,"HSV-1: Trigeminal ganglia latency | Young children | Oral-facial lesions")
ap2(tf2,"HSV-2: Sacral ganglia latency | Young adults | Genital lesions / Neonatal herpes")
ap2(tf2,"Drug resistance: HSV-2 > HSV-1 | Neurovirulence: HSV-2 > HSV-1")
ap2(tf2,"DNA homology: >50% | Antigenic homology: >80%",bold=True,color=DARK_BLUE)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 4 β HSV: CLINICAL MANIFESTATIONS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "HSV β Clinical Manifestations", subtitle="Incubation: 1β26 days (median 6β8 days)")
footer(s)
# Three columns
boxes = [
("Oral-Facial Lesions (HSV-1)", MED_BLUE, [
"Most common manifestation of HSV",
"Most common site: buccal mucosa",
"Primary: gingivostomatitis & pharyngitis",
"Recurrent: herpes labialis (vesicles near lips)",
"Others: ulcerative stomatitis, tonsillitis,\nvesticular lesions on eyelids",
"Many cases are asymptomatic",
]),
("Cutaneous Lesions", ACCENT_GRN, [
"Herpes labialis β painful vesicles near lips",
"Herpetic whitlow β fingers of dentists/healthcare workers",
"Herpes gladiatorum β wrestlers (mucocutaneous)",
"Febrile blisters (herpes febrilis) β triggered by fever",
"Eczema herpeticum β HSV-1 in patients with eczema",
"Erythema multiforme β commonly associated with HSV",
"Kaposi's varicelliform eruption (Eczema/Vaccinia/Coxsackievirus A16)",
]),
("Serious & Other Syndromes", ACCENT_RED, [
"CNS: Encephalitis, meningitis, Bell's palsy",
"Ocular: Keratoconjunctivitis, corneal ulcer, blindness",
"Genital (HSV-2): Bilateral painful multiple vesicular ulcers",
"Visceral & disseminated herpes\n(Immunocompromised / AIDS / Transplant / Pregnancy)",
" β Pneumonitis, tracheobronchitis, hepatitis",
"Neonatal herpes: Transmission at birth; local lesions or\n disseminated infection / CNS infection",
]),
]
for bi, (title, color, items) in enumerate(boxes):
bx = 0.18 + bi * 4.37
add_rect(s, bx, 1.2, 4.2, 5.85, fill=WHITE)
add_rect(s, bx, 1.2, 4.2, 0.45, fill=color)
add_text(s, title, bx+0.1, 1.22, 4.0, 0.4,
size=13, bold=True, color=WHITE, align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
tb = s.shapes.add_textbox(Inches(bx+0.1), Inches(1.7), Inches(4.0), Inches(5.25))
tf = tb.text_frame; tf.word_wrap = True
for ii, item in enumerate(items):
if ii == 0:
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.space_before = Pt(3)
r = p.add_run()
r.text = ("β’ " if not item.startswith(" ") else "") + item
r.font.name = "Calibri"
r.font.size = Pt(11)
r.font.color.rgb = DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 5 β HSV: EPIDEMIOLOGY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "HSV β Epidemiology", bar_color=DARK_BLUE)
footer(s)
# Left: HSV-1
add_rect(s, 0.18, 1.2, 6.2, 5.75, fill=WHITE)
add_rect(s, 0.18, 1.2, 6.2, 0.45, fill=MED_BLUE)
add_text(s, "HSV-1 Epidemiology", 0.28, 1.22, 6.0, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb = s.shapes.add_textbox(Inches(0.28), Inches(1.70), Inches(6.0), Inches(5.15))
tf = tb.text_frame; tf.word_wrap = True
items1 = [
"Worldwide distribution β no animal reservoirs or vectors",
"Transmission: contact with infected secretions (saliva)",
"Primary infection: early in life β asymptomatic or oropharyngeal",
"Age: Children commonly affected",
"Adults: Antibodies in 70β90%; most become lifelong carriers",
"Occasionally get transient recurrent attacks",
]
for ii, item in enumerate(items1):
p = tf.paragraphs[0] if ii == 0 else tf.add_paragraph()
p.space_before = Pt(4)
r = p.add_run(); r.text = "β’ " + item
r.font.name = "Calibri"; r.font.size = Pt(12); r.font.color.rgb = DARK_GREY
# Right: HSV-2
add_rect(s, 6.6, 1.2, 6.5, 5.75, fill=WHITE)
add_rect(s, 6.6, 1.2, 6.5, 0.45, fill=ACCENT_RED)
add_text(s, "HSV-2 Epidemiology", 6.7, 1.22, 6.3, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb2 = s.shapes.add_textbox(Inches(6.7), Inches(1.70), Inches(6.3), Inches(5.15))
tf2 = tb2.text_frame; tf2.word_wrap = True
items2 = [
"Transmitted by sexual or vertical routes",
"Primary infection occurs in adult life",
"Antibodies develop in only 20% of people β particularly among\nBlack women more than men and whites",
"HSV-2 tends to recur more often than HSV-1, irrespective of site",
"Vertical transmission: Mother β fetus (at birth, not in utero)",
"Neonates almost always symptomatic: local lesions or disseminated infection",
]
for ii, item in enumerate(items2):
p = tf2.paragraphs[0] if ii == 0 else tf2.add_paragraph()
p.space_before = Pt(4)
r = p.add_run(); r.text = "β’ " + item
r.font.name = "Calibri"; r.font.size = Pt(12); r.font.color.rgb = DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 6 β HSV: LABORATORY DIAGNOSIS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "HSV β Laboratory Diagnosis", bar_color=MED_BLUE)
footer(s)
diag_boxes = [
("Cytopathology (Tzanck Prep)", MED_BLUE, [
"Wright's or Giemsa stain on skin scraping",
"Detects inclusion bodies (Lipschultz body)",
"Formation of multinucleated giant cells (Tzanck cells)",
"Ballooning of infected cells, margination of chromatin",
"Sensitivity <30% for mucosal swabs",
"Cannot differentiate HSV-1, HSV-2, and VZV",
]),
("Virus Isolation", ACCENT_GRN, [
"Most DEFINITIVE tool for HSV diagnosis",
"McCoy cell lines are preferred",
"Viral growth detected in 2β4 days",
"Cytopathic effect: diffuse rounding & ballooning",
"Shell vial technique: detection <24 hours",
"Viral antigen by neutralization/immunofluorescence",
]),
("Molecular & Serology", ORANGE, [
"HSV DNA by PCR (most sensitive, differentiates HSV-1 vs 2)",
"Targets: glycoprotein B and UL30 genes",
"BioFire FilmArray ME Panel: detects 14 pathogens (incl. HSV)",
"Antibodies appear at 4β7 days, peak at 2β4 weeks",
"IgM β replaced by IgG (persists for life)",
"ELISA (gG1/gG2 antigens): differentiates HSV-1 from HSV-2",
"Western blot: 98% sensitivity and specificity",
]),
]
for bi, (title, color, items) in enumerate(diag_boxes):
bx = 0.18 + bi * 4.37
add_rect(s, bx, 1.2, 4.2, 5.85, fill=WHITE)
add_rect(s, bx, 1.2, 4.2, 0.45, fill=color)
add_text(s, title, bx+0.1, 1.22, 4.0, 0.4,
size=12, bold=True, color=WHITE, align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
tb = s.shapes.add_textbox(Inches(bx+0.1), Inches(1.7), Inches(4.0), Inches(5.25))
tf = tb.text_frame; tf.word_wrap = True
for ii, item in enumerate(items):
p = tf.paragraphs[0] if ii == 0 else tf.add_paragraph()
p.space_before = Pt(4)
r = p.add_run(); r.text = "β’ " + item
r.font.name = "Calibri"; r.font.size = Pt(11); r.font.color.rgb = DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 7 β HSV: TREATMENT & PREVENTION
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "HSV β Treatment & Prevention", bar_color=ACCENT_GRN)
footer(s)
# Left: Treatment
add_rect(s, 0.18, 1.2, 6.6, 5.8, fill=WHITE)
add_rect(s, 0.18, 1.2, 6.6, 0.45, fill=ACCENT_GRN)
add_text(s, "Treatment", 0.28, 1.22, 6.4, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb = s.shapes.add_textbox(Inches(0.28), Inches(1.70), Inches(6.4), Inches(5.15))
tf = tb.text_frame; tf.word_wrap = True
treat = [
("Drug of choice: ACYCLOVIR β inhibits viral DNA polymerase", True),
("Mucocutaneous infections: Acyclovir, Famciclovir, Valacyclovir", False),
("Ocular infections: Topical idoxuridine, trifluorothymidine, topical vidarabine, cidofovir", False),
("HSV encephalitis & Neonatal herpes: IV Acyclovir (treatment of choice)", True),
("Acyclovir resistance: More common in HSV-2 and immunocompromised patients", False),
("Foscarnet: Drug of choice for acyclovir-resistant strains", True),
]
for ii, (item, bold) in enumerate(treat):
p = tf.paragraphs[0] if ii == 0 else tf.add_paragraph()
p.space_before = Pt(5)
r = p.add_run(); r.text = "β’ " + item
r.font.name = "Calibri"; r.font.size = Pt(12)
r.font.bold = bold
r.font.color.rgb = DARK_BLUE if bold else DARK_GREY
# Right: Prevention
add_rect(s, 7.0, 1.2, 6.15, 5.8, fill=WHITE)
add_rect(s, 7.0, 1.2, 6.15, 0.45, fill=ACCENT_RED)
add_text(s, "Prevention", 7.1, 1.22, 6.0, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb2 = s.shapes.add_textbox(Inches(7.1), Inches(1.70), Inches(6.0), Inches(5.15))
tf2 = tb2.text_frame; tf2.word_wrap = True
prev_items = [
("Use of condom to prevent genital herpes", False),
("Neonatal herpes prevention: Acyclovir to mothers in 3rd trimester OR elective cesarean section", True),
("No vaccine currently licensed for HSV", True),
("Trials ongoing: Recombinant HSV-2 glycoprotein vaccine", False),
("Infection Control: Patients with mucocutaneous herpes kept on contact precautions until lesions are dry and crusted", False),
("HSV Comparison Summary:", True),
("HSV-1: Less neurovirulent, less drug resistant, early childhood", False),
("HSV-2: More neurovirulent, more drug resistant, adult onset", False),
]
for ii, (item, bold) in enumerate(prev_items):
p = tf2.paragraphs[0] if ii == 0 else tf2.add_paragraph()
p.space_before = Pt(4)
r = p.add_run(); r.text = ("β’ " if not item.endswith(":") else "") + item
r.font.name = "Calibri"; r.font.size = Pt(12)
r.font.bold = bold
r.font.color.rgb = DARK_BLUE if bold else DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 8 β VARICELLA-ZOSTER VIRUS (VZV): OVERVIEW
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "Varicella-Zoster Virus (VZV) β Overview & Chickenpox", bar_color=PURPLE)
footer(s)
# Left: Overview & pathogenesis
add_rect(s, 0.18, 1.2, 6.2, 5.8, fill=WHITE)
add_rect(s, 0.18, 1.2, 6.2, 0.45, fill=PURPLE)
add_text(s, "VZV Overview & Pathogenesis", 0.28, 1.22, 6.0, 0.4,
size=13, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb = s.shapes.add_textbox(Inches(0.28), Inches(1.70), Inches(6.0), Inches(5.15))
tf = tb.text_frame; tf.word_wrap = True
vzv_left = [
("VZV produces TWO clinical entities:", True),
("1. Chickenpox (Varicella) β Primary infection; mainly in children", False),
("2. Zoster (Shingles/Zona) β Reactivation in adults (>60 yrs) / immunocompromised", False),
("Pathogenesis of Chickenpox:", True),
("Entry: Upper respiratory mucosa / conjunctiva via aerosol (most common) or contact", False),
("Spreads to: Blood β infected mononuclear cells β skin, respiratory tract, neurons", False),
("Neurons undergo latency (trigeminal ganglion)", False),
("Chickenpox β Clinical Features:", True),
("Incubation: 10β21 days (2β3 weeks)", False),
("Rashes: Main manifestation β vesicular, centripetal (faceβtrunk), bilateral & diffuse", False),
("Multiple crops: maculopapules β vesicles β pustules β scabs (all present simultaneously)", False),
("Fever with each crop | Disease of childhood | More severe in adults", False),
]
for ii, (item, bold) in enumerate(vzv_left):
p = tf.paragraphs[0] if ii == 0 else tf.add_paragraph()
p.space_before = Pt(3)
r = p.add_run(); r.text = ("β’ " if not item.endswith(":") else "") + item
r.font.name = "Calibri"; r.font.size = Pt(11)
r.font.bold = bold
r.font.color.rgb = PURPLE if bold else DARK_GREY
# Right: Complications
add_rect(s, 6.6, 1.2, 6.5, 5.8, fill=WHITE)
add_rect(s, 6.6, 1.2, 6.5, 0.45, fill=ACCENT_RED)
add_text(s, "Complications of Chickenpox", 6.7, 1.22, 6.3, 0.4,
size=13, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb2 = s.shapes.add_textbox(Inches(6.7), Inches(1.70), Inches(6.3), Inches(5.15))
tf2 = tb2.text_frame; tf2.word_wrap = True
comp = [
("More common in adults and immunocompromised", True),
("Most common INFECTIOUS complication: Secondary bacterial skin infections", True),
("Most common EXTRACUTANEOUS complication: CNS involvement β cerebellar ataxia, encephalitis, aseptic meningitis (usually in children)", False),
("Most SERIOUS complication: Varicella pneumonia\n(up to 20% of adult cases; especially severe in pregnancy)", True),
("Reye's syndrome: Fatty degeneration of liver following salicylate (aspirin) intake secondary to VZV", True),
("Other complications: Myocarditis, nephritis, corneal lesion, arthritis", False),
("Chickenpox in Pregnancy:", True),
("Mothers: High risk of varicella pneumonia", False),
("Fetus: Congenital varicella syndrome (early pregnancy) β cicatricial skin lesions, limb hypoplasia", False),
]
for ii, (item, bold) in enumerate(comp):
p = tf2.paragraphs[0] if ii == 0 else tf2.add_paragraph()
p.space_before = Pt(3)
r = p.add_run(); r.text = ("β’ " if not item.endswith(":") else "") + item
r.font.name = "Calibri"; r.font.size = Pt(11)
r.font.bold = bold
r.font.color.rgb = ACCENT_RED if bold else DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 9 β ZOSTER (SHINGLES) & VZV EPIDEMIOLOGY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "Zoster (Shingles) & VZV Epidemiology", bar_color=PURPLE)
footer(s)
# Left: Zoster
add_rect(s, 0.18, 1.2, 6.2, 5.8, fill=WHITE)
add_rect(s, 0.18, 1.2, 6.2, 0.45, fill=PURPLE)
add_text(s, "Zoster / Shingles / Zona", 0.28, 1.22, 6.0, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb = s.shapes.add_textbox(Inches(0.28), Inches(1.70), Inches(6.0), Inches(5.15))
tf = tb.text_frame; tf.word_wrap = True
zoster = [
("Reactivation of latent VZV β mostly in adults >60 yrs, immunocompromised, or occasionally healthy adults", False),
("Severe pain in skin/mucosa supplied by sensory nerves and ganglia", False),
("Rashes: Unilateral and segmental (confined to skin innervated by one sensory ganglion)", True),
("Most common nerve: Ophthalmic branch of trigeminal nerve", True),
("Head, neck, and trunk are most commonly affected sites", False),
("Complications of Zoster:", True),
("Post-herpetic neuralgia: Most common complication in elderly β pain persists for months", True),
("Zoster ophthalmicus: Unilateral painful crops of rashes around eye", False),
("Ramsay Hunt Syndrome: Geniculate ganglion of facial nerve β facial paralysis + ear pain + vesicles on face/tympanic membrane", True),
("Visceral disease (Pneumonia): Most common cause of death (<1%) in zoster", False),
("Recurrent/chronic zoster: Common with HIV", False),
]
for ii, (item, bold) in enumerate(zoster):
p = tf.paragraphs[0] if ii == 0 else tf.add_paragraph()
p.space_before = Pt(3)
r = p.add_run(); r.text = ("β’ " if not item.endswith(":") else "") + item
r.font.name = "Calibri"; r.font.size = Pt(11)
r.font.bold = bold
r.font.color.rgb = PURPLE if bold else DARK_GREY
# Right: Epidemiology
add_rect(s, 6.6, 1.2, 6.5, 5.8, fill=WHITE)
add_rect(s, 6.6, 1.2, 6.5, 0.45, fill=DARK_BLUE)
add_text(s, "VZV Epidemiology", 6.7, 1.22, 6.3, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb2 = s.shapes.add_textbox(Inches(6.7), Inches(1.70), Inches(6.3), Inches(5.15))
tf2 = tb2.text_frame; tf2.word_wrap = True
epi = [
("Highly contagious disease β temperate regions", False),
("Prevalence: 13β16 per 1,000 people per year", False),
("Age: Common in children between 1β14 years", False),
("Infectious period: 2 days before rash β 5 days after (until vesicles are crusted)", True),
("One attack gives lifelong immunity", True),
("Reservoir: Humans are the ONLY known reservoir host", True),
("Source: Patients are the only source β NO CARRIERS", True),
("Secondary attack rate: 70β90%", True),
]
for ii, (item, bold) in enumerate(epi):
p = tf2.paragraphs[0] if ii == 0 else tf2.add_paragraph()
p.space_before = Pt(5)
r = p.add_run(); r.text = "β’ " + item
r.font.name = "Calibri"; r.font.size = Pt(12)
r.font.bold = bold
r.font.color.rgb = DARK_BLUE if bold else DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 10 β VZV: LABORATORY DIAGNOSIS & TREATMENT
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "VZV β Laboratory Diagnosis & Treatment", bar_color=PURPLE)
footer(s)
# Left: Lab Dx
add_rect(s, 0.18, 1.2, 6.2, 5.8, fill=WHITE)
add_rect(s, 0.18, 1.2, 6.2, 0.45, fill=PURPLE)
add_text(s, "Laboratory Diagnosis of VZV", 0.28, 1.22, 6.0, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb = s.shapes.add_textbox(Inches(0.28), Inches(1.70), Inches(6.0), Inches(5.15))
tf = tb.text_frame; tf.word_wrap = True
lab = [
("Specimens: Vesicular lesions, scabs, maculopapular lesions", False),
("Cytopathology: Tzanck smear (Giemsa) β multinucleated giant cells (same as HSV)", False),
("Virus Isolation: Cell lines β HSV-like cytopathic effects (rounding & ballooning)", False),
("VZV-Specific Methods:", True),
("Specific antigen detection by direct immunofluorescence", False),
("Specific IgM and IgG antibody detection by ELISA", False),
("PCR detecting VZV-specific genes", False),
("BioFire ME Panel: Detects 14 microbial pathogens including VZV", False),
]
for ii, (item, bold) in enumerate(lab):
p = tf.paragraphs[0] if ii == 0 else tf.add_paragraph()
p.space_before = Pt(4)
r = p.add_run(); r.text = ("β’ " if not item.endswith(":") else "") + item
r.font.name = "Calibri"; r.font.size = Pt(12)
r.font.bold = bold
r.font.color.rgb = PURPLE if bold else DARK_GREY
# Right: Treatment & Vaccine & VZIG
add_rect(s, 6.6, 1.2, 6.5, 5.8, fill=WHITE)
add_rect(s, 6.6, 1.2, 6.5, 0.45, fill=ACCENT_GRN)
add_text(s, "Treatment, Vaccine & VZIG", 6.7, 1.22, 6.3, 0.4,
size=14, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
tb2 = s.shapes.add_textbox(Inches(6.7), Inches(1.70), Inches(6.3), Inches(5.15))
tf2 = tb2.text_frame; tf2.word_wrap = True
tx = [
("Treatment: Acyclovir, Famciclovir, or Valacyclovir (agents of choice)", True),
("Can prevent complications of chickenpox; halts progression of zoster in adults", False),
("Cannot prevent post-herpetic neuralgia", True),
("Vaccine (Live Attenuated β Oka Strain):", True),
("Children: 2 doses β first at 12β15 months, second at 4β6 years", False),
("Seronegative adults: 2 doses at 1-month gap", False),
(">80% effective in children; 70% in adults; 95% effective against severe disease", True),
("VZIG (Varicella-Zoster Immunoglobulin):", True),
("Post-exposure prophylaxis β given within 96 hours (preferably 72 hrs)", False),
("For: Immunocompromised adults, HIV, pregnancy (high-risk for complications)", False),
("Neonates born to mothers: Chickenpox onset <5 days before delivery till 48 hrs after delivery", False),
("NOT indicated if mother has zoster", True),
("Infection Control: Isolation until lesions dry & crusted; Airborne precautions (N95) + Contact precautions", False),
]
for ii, (item, bold) in enumerate(tx):
p = tf2.paragraphs[0] if ii == 0 else tf2.add_paragraph()
p.space_before = Pt(3)
r = p.add_run(); r.text = ("β’ " if not item.endswith(":") else "") + item
r.font.name = "Calibri"; r.font.size = Pt(11)
r.font.bold = bold
r.font.color.rgb = ACCENT_GRN if bold else DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 11 β HSV-1 vs HSV-2 COMPARISON TABLE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
slide_bg(s, LIGHT_GREY)
header_bar(s, "HSV-1 vs HSV-2 β Comparison Table (Table 56.3)", bar_color=DARK_BLUE)
footer(s)
props = [
("Common modes of transmission", "Direct contact with mucosa\nor abraded skin", "Sexual mode or vertical mode"),
("Latency in", "Trigeminal ganglia", "Sacral ganglia"),
("Age affected", "Young children", "Young adults"),
("Common manifestations", "Oral-facial mucosal lesions\nEncephalitis & meningitis\nOcular lesions\nSkin lesions β above waist", "Genital lesions\nSkin lesions β below waist\nNeonatal herpes"),
("Neurovirulence", "Less", "More"),
("Drug resistance", "Less", "More"),
("Antigenic homology", "HSV-1 and 2 show >80% antigenic homology", "β same"),
("DNA homology", "HSV-1 and 2 show >50% homology in genomic sequence", "β same"),
]
# Table header
cw = [4.2, 4.2, 4.2]
cx = [0.3, 4.7, 9.1]
ry = 1.28
add_rect(s, 0.3, ry, 12.8, 0.42, fill=DARK_BLUE)
for ci, hd in enumerate(["Property", "HSV-1", "HSV-2"]):
add_text(s, hd, cx[ci]+0.05, ry+0.03, cw[ci]-0.1, 0.36,
size=13, bold=True, color=WHITE, align=PP_ALIGN.CENTER, valign=MSO_ANCHOR.MIDDLE)
ry += 0.42
alt = [LIGHT_BLUE, WHITE]
for ri, row in enumerate(props):
rh = 0.55 if ri not in [3] else 0.82
add_rect(s, 0.3, ry, 12.8, rh, fill=alt[ri % 2])
for ci, cell in enumerate(row):
if ci == 1 and row[1] == row[2] and row[2].startswith("β"):
# merge-like: show once in col 1, span
if ci == 1:
add_text(s, row[1], cx[1]+0.05, ry+0.03, 8.3, rh-0.06,
size=11, color=DARK_GREY, align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
continue
add_text(s, cell, cx[ci]+0.05, ry+0.03, cw[ci]-0.1, rh-0.06,
size=11, color=DARK_GREY, align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
ry += rh
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 12 β QUICK SUMMARY / KEY TAKEAWAYS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
s = prs.slides.add_slide(blank)
add_rect(s, 0, 0, 13.333, 7.5, fill=DARK_BLUE)
add_rect(s, 0, 0, 13.333, 1.15, fill=MED_BLUE)
add_text(s, "Key Takeaways", 0.4, 0.15, 12.5, 0.85,
size=30, bold=True, color=WHITE, align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.MIDDLE)
takeaways = [
(MED_BLUE, "Herpesviridae", "3 subfamilies (Ξ±, Ξ², Ξ³) β 8 human herpesviruses; replication in host cell nucleus; rolling circle mechanism"),
(ACCENT_RED, "HSV β Latency", "HSV-1 β trigeminal ganglia; HSV-2 β sacral ganglia. Reactivated by stress, UV, fever"),
(ACCENT_GRN, "HSV-1 vs HSV-2", "HSV-1: Oral/facial above waist; HSV-2: Genital/below waist. HSV-2 more neurovirulent & drug-resistant"),
(ORANGE, "Acyclovir", "Drug of choice for HSV. Resistance β Foscarnet. For encephalitis/neonatal herpes: IV Acyclovir"),
(PURPLE, "VZV β Two Diseases", "Chickenpox (primary) = centripetal rash, multiple crops. Zoster (reactivation) = unilateral segmental rash"),
(MED_BLUE, "Zoster Complications", "Post-herpetic neuralgia (most common elderly), Zoster ophthalmicus, Ramsay Hunt Syndrome, Visceral disease"),
(ACCENT_RED, "VZV β No Carriers", "Only humans are reservoir; secondary attack rate 70β90%; One attack β lifelong immunity"),
(ACCENT_GRN, "VZV Treatment & Vaccine", "Acyclovir/Valacyclovir for VZV; Live attenuated Oka strain vaccine; VZIG for post-exposure prophylaxis"),
]
row_h = 0.67
for ri, (color, header, body) in enumerate(takeaways):
ry = 1.2 + ri * row_h
col = ri % 2
rx = 0.2 if col == 0 else 6.8
add_rect(s, rx, ry, 6.25, row_h - 0.06, fill=RGBColor(0x14, 0x2B, 0x4A))
add_rect(s, rx, ry, 0.22, row_h - 0.06, fill=color)
add_text(s, header, rx + 0.3, ry + 0.04, 2.2, 0.28,
size=11, bold=True, color=color, valign=MSO_ANCHOR.TOP)
add_text(s, body, rx + 0.3, ry + 0.3, 5.9, 0.34,
size=10, color=WHITE, valign=MSO_ANCHOR.TOP)
# βββ SAVE βββββββββββββββββββββββββββββββββββββββββββββββββββββ
out = "/tmp/workspace/herpesvirus-ppt/Herpesvirus_Infections.pptx"
from io import BytesIO
buf = BytesIO()
prs.save(buf)
with open(out, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out}")
print(f"Slides: {len(prs.slides)}")
cd /tmp/workspace/herpesvirus-ppt && python create_ppt.py 2>&1
~/herpesvirus-ppt/create_ppt.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/herpesvirus-ppt/create_ppt.py'
cd /tmp/workspace/herpesvirus-ppt && python create_ppt.py 2>&1
Herpesvirus Infections
Presentation Β· PPTX
| Slide | Content |
|---|---|
| 1 | Title Slide β Herpesvirus Infections (professional dark navy design) |
| 2 | Classification Table β Family Herpesviridae, all 8 human herpesviruses, subfamilies, latency sites, genera |
| 3 | HSV Overview & Pathogenesis β Primary infection, transmission, latency, recurrent infections |
| 4 | HSV Clinical Manifestations β Oral-facial, cutaneous, CNS, ocular, genital, neonatal, visceral |
| 5 | HSV Epidemiology β HSV-1 vs HSV-2 epidemiological patterns side-by-side |
| 6 | HSV Laboratory Diagnosis β Cytopathology, Virus isolation, PCR, serology (ELISA/Western blot) |
| 7 | HSV Treatment & Prevention β Acyclovir, Foscarnet, Infection control, vaccine trials |
| 8 | VZV: Chickenpox β Pathogenesis, clinical features, complications (incl. Reye's, pregnancy) |
| 9 | Zoster (Shingles) & Epidemiology β Ramsay Hunt, post-herpetic neuralgia, attack rates |
| 10 | VZV Lab Diagnosis & Treatment β Tzanck, PCR, ELISA, Acyclovir, Oka vaccine, VZIG |
| 11 | HSV-1 vs HSV-2 Comparison Table β Side-by-side (Table 56.3 from your textbook) |
| 12 | Key Takeaways β 8 high-yield summary points |
One more with tese... Please..... π₯Ίπ₯Ί
~/herpesvirus-ppt/create_ppt2.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
# βββ COLOR PALETTE βββββββββββββββββββββββββββββββββββββββββββ
DARK_BLUE = RGBColor(0x1A, 0x3A, 0x5C)
MED_BLUE = RGBColor(0x21, 0x6B, 0xA6)
LIGHT_BLUE = RGBColor(0xD6, 0xEA, 0xF8)
ACCENT_RED = RGBColor(0xC0, 0x39, 0x2B)
ACCENT_GRN = RGBColor(0x1E, 0x87, 0x6F)
ORANGE = RGBColor(0xE6, 0x7E, 0x22)
PURPLE = RGBColor(0x6C, 0x3A, 0x83)
TEAL = RGBColor(0x0E, 0x6B, 0x72)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
LIGHT_GREY = RGBColor(0xF5, 0xF6, 0xFA)
MID_GREY = RGBColor(0xBD, 0xC3, 0xC7)
DARK_GREY = RGBColor(0x2C, 0x3E, 0x50)
YELLOW_BG = RGBColor(0xFF, 0xF3, 0xCD)
GREEN_BG = RGBColor(0xD4, 0xED, 0xDA)
BLUE_BG = RGBColor(0xCC, 0xE5, 0xFF)
RED_BG = RGBColor(0xF8, 0xD7, 0xDA)
W = Inches(13.333)
H = Inches(7.5)
prs = Presentation()
prs.slide_width = W
prs.slide_height = H
blank = prs.slide_layouts[6]
# βββ HELPERS βββββββββββββββββββββββββββββββββββββββββββββββββ
def add_rect(slide, x, y, w, h, fill=None, line_color=None, line_width=None):
shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
shape.line.fill.background()
if fill:
shape.fill.solid()
shape.fill.fore_color.rgb = fill
else:
shape.fill.background()
if line_color:
shape.line.color.rgb = line_color
if line_width:
shape.line.width = Pt(line_width)
else:
shape.line.fill.background()
return shape
def add_text(slide, text, x, y, w, h, font_name="Calibri", size=18, bold=False,
italic=False, color=DARK_GREY, align=PP_ALIGN.LEFT, wrap=True,
valign=MSO_ANCHOR.TOP):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = wrap
tf.auto_size = None
tf.vertical_anchor = valign
tf.margin_left = Pt(4)
tf.margin_right = Pt(4)
tf.margin_top = Pt(2)
tf.margin_bottom= Pt(2)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.name = font_name
run.font.size = Pt(size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
return tb
def add_tf(slide, x, y, w, h):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
tf.auto_size = None
tf.margin_left = Pt(4)
tf.margin_right = Pt(4)
tf.margin_top = Pt(2)
tf.margin_bottom= Pt(2)
return tf
def add_para(tf, text, size=14, bold=False, color=DARK_GREY, space_before=0,
align=PP_ALIGN.LEFT, italic=False, space_after=0):
p = tf.add_paragraph()
p.alignment = align
if space_before:
p.space_before = Pt(space_before)
if space_after:
p.space_after = Pt(space_after)
run = p.add_run()
run.text = text
run.font.name = "Calibri"
run.font.size = Pt(size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
return p
def slide_header(slide, title, subtitle="", accent_color=MED_BLUE):
add_rect(slide, 0, 0, 13.333, 7.5, fill=LIGHT_GREY)
add_rect(slide, 0, 0, 13.333, 1.1, fill=accent_color)
add_rect(slide, 0, 1.1, 0.08, 6.4, fill=accent_color)
add_text(slide, title, 0.18, 0.1, 11.5, 0.7,
size=28, bold=True, color=WHITE, valign=MSO_ANCHOR.MIDDLE)
if subtitle:
add_text(slide, subtitle, 0.18, 0.72, 11.5, 0.38,
size=14, color=LIGHT_BLUE, italic=True)
add_text(slide, "Chapter 56 | Viral Exanthems & Cutaneous Infections",
0.2, 7.2, 12.8, 0.3, size=9, color=MID_GREY, align=PP_ALIGN.RIGHT)
def bullet_box(slide, items, x, y, w, h, box_color=WHITE, title="", title_color=MED_BLUE,
bullet_size=13, title_size=14, line_color=None):
add_rect(slide, x, y, w, h, fill=box_color,
line_color=line_color if line_color else MID_GREY, line_width=0.5)
tf = add_tf(slide, x+0.12, y+0.08, w-0.24, h-0.16)
first = True
if title:
p = tf.paragraphs[0] if first else tf.add_paragraph()
first = False
p.alignment = PP_ALIGN.LEFT
p.space_after = Pt(3)
run = p.add_run()
run.text = title
run.font.name = "Calibri"
run.font.size = Pt(title_size)
run.font.bold = True
run.font.color.rgb = title_color
for item in items:
if first:
p = tf.paragraphs[0]
first = False
else:
p = tf.add_paragraph()
p.alignment = PP_ALIGN.LEFT
p.space_before = Pt(1)
run = p.add_run()
run.text = item
run.font.name = "Calibri"
run.font.size = Pt(bullet_size)
run.font.color.rgb = DARK_GREY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 1: TITLE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
add_rect(sl, 0, 0, 13.333, 7.5, fill=DARK_BLUE)
add_rect(sl, 0, 0, 13.333, 0.08, fill=ACCENT_RED)
add_rect(sl, 0, 7.42, 13.333, 0.08, fill=ACCENT_RED)
add_rect(sl, 0.6, 1.8, 12.1, 3.5, fill=RGBColor(0x0D, 0x2B, 0x4A))
add_rect(sl, 0.6, 1.8, 0.12, 3.5, fill=MED_BLUE)
add_text(sl, "OTHER CUTANEOUS VIRAL INFECTIONS", 0.9, 2.0, 11.5, 1.0,
size=36, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
add_text(sl, "Parvovirus B19 β’ HPV β’ Poxviruses (Smallpox, Monkeypox,", 0.9, 3.1, 11.5, 0.55,
size=20, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)
add_text(sl, "Molluscum Contagiosum) β’ Measles β’ Rubella β’ Hand-Foot-Mouth Disease", 0.9, 3.6, 11.5, 0.55,
size=20, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)
add_text(sl, "Chapter 56 β Section 7: Skin, Soft Tissue & Musculoskeletal Infections", 0.9, 4.35, 11.5, 0.45,
size=14, color=MID_GREY, italic=True)
add_rect(sl, 0.6, 5.3, 12.1, 0.7, fill=MED_BLUE)
add_text(sl, "DNA Viruses | RNA Viruses | Pathogenesis | Lab Diagnosis | Treatment",
0.8, 5.35, 11.8, 0.55, size=16, color=WHITE, align=PP_ALIGN.CENTER)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 2: PARVOVIRUS B19 β MORPHOLOGY & PATHOGENESIS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Parvovirus B19 β Morphology & Pathogenesis", "Erythema Infectiosum (Fifth Disease)", accent_color=ACCENT_GRN)
# Left column
add_rect(sl, 0.15, 1.2, 6.2, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 6.0, 5.8)
add_para(tf, "MORPHOLOGY", 13, True, ACCENT_GRN, 2)
items_morph = [
"β’ Smallest animal viruses (18β26 nm)",
"β’ Non-enveloped, icosahedral symmetry",
"β’ Only DNA viruses with single-stranded DNA",
"β’ Parvovirus B19 β most common; pathogenic to man",
"β’ Depend on host cell enzymes for replication",
]
for it in items_morph:
add_para(tf, it, 13, False, DARK_GREY, 2)
add_para(tf, " ", 5, False, DARK_GREY, 2)
add_para(tf, "PATHOGENESIS", 13, True, ACCENT_GRN, 4)
items_path = [
"β’ Transmission: Respiratory route (most common);",
" also blood transfusion & transplacental",
"β’ Infects precursors of RBCs: Special tropism for erythroid",
" progenitor cells in adult bone marrow & fetal liver",
"β’ Binds to blood group P antigen (receptor on RBC surface)",
"β’ Results in destruction of RBCs β inhibition of erythropoiesis",
]
for it in items_path:
add_para(tf, it, 13, False, DARK_GREY, 2)
# Right column
add_rect(sl, 6.55, 1.2, 6.6, 2.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 6.67, 1.25, 6.4, 2.8)
add_para(tf2, "CLINICAL MANIFESTATIONS", 13, True, ACCENT_GRN, 2)
items_clin = [
"Erythema Infectiosum (Fifth Disease):",
"β’ Rashes on face β characteristic slapped cheek appearance",
"β’ Adults: Symmetrical polyarthropathy (hands & knees)",
"",
"Transient Aplastic Crisis:",
"β’ In patients with hemolytic anemia β severe acute anemia",
"",
"Pure Red Cell Aplasia:",
"β’ In immunosuppressed + persistent B19 β chronic anemia",
"",
"Non-immune Hydrops Fetalis:",
"β’ In fetus: fatal anemia & fetal death",
"β’ Transplacental in 30% cases; max risk in 2nd trimester",
"",
"Papular-purpuric Gloves & Socks Syndrome:",
"β’ Rapidly progressive, painful, pruritic, symmetric",
"β’ Swelling & erythema of distal hands & feet (spring/summer)",
]
for it in items_clin:
clr = ACCENT_GRN if it.endswith(":") and it != "" else DARK_GREY
b = True if it.endswith(":") and it != "" else False
add_para(tf2, it, 12, b, clr, 1)
# Lab Dx + Treatment box right-bottom
add_rect(sl, 6.55, 4.25, 6.6, 1.45, fill=GREEN_BG, line_color=ACCENT_GRN, line_width=1)
tf3 = add_tf(sl, 6.67, 4.3, 6.4, 1.35)
add_para(tf3, "LABORATORY DIAGNOSIS", 13, True, ACCENT_GRN, 2)
lab_items = [
"β’ PCR: Most sensitive β detects viral DNA (VP1, VP2 genes)",
"β’ ELISA: Detects anti-VP1/VP2 IgM (appears early, elevated 2-3 mo)",
"β’ Immunohistochemistry: Antigen in fetal tissue & bone marrow",
]
for it in lab_items:
add_para(tf3, it, 12, False, DARK_GREY, 1)
add_rect(sl, 6.55, 5.8, 6.6, 1.25, fill=YELLOW_BG, line_color=ORANGE, line_width=1)
tf4 = add_tf(sl, 6.67, 5.85, 6.4, 1.15)
add_para(tf4, "TREATMENT", 13, True, ORANGE, 2)
add_para(tf4, "β’ No specific antiviral drug available", 12, False, DARK_GREY, 1)
add_para(tf4, "β’ Symptomatic/supportive treatment", 12, False, DARK_GREY, 1)
add_para(tf4, "β’ Immunoglobulins (containing neutralizing antibodies) β available commercially", 12, False, DARK_GREY, 1)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 3: HPV INFECTIONS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Human Papillomavirus (HPV) Infections", "DNA Virus β Papillomaviridae Family", accent_color=PURPLE)
add_rect(sl, 0.15, 1.2, 6.2, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 6.0, 5.8)
add_para(tf, "OVERVIEW", 13, True, PURPLE, 2)
overview = [
"β’ DNA virus, Papillomaviridae family",
"β’ Selective tropism for epithelium of skin & mucous membranes",
"β’ >100 serotypes β benign warts to malignant neoplasia of cervix",
]
for it in overview:
add_para(tf, it, 13, False, DARK_GREY, 2)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "TYPES OF WARTS", 13, True, PURPLE, 3)
wart_items = [
"Common skin warts (Verruca vulgaris) & flat warts (Verruca plana):",
" β Common in children; serotypes 2, 4, 27, 57",
"",
"Plantar warts (Verruca plantaris):",
" β Benign, widely prevalent in adolescents (serotype 1)",
"",
"Anogenital warts (Condyloma acuminatum):",
" β Sexually transmitted; adults; HPV serotypes 6 & 11",
"",
"Malignant neoplasia of cervix:",
" β High-risk serotypes (e.g. 16, 18) β Chapter 80",
]
for it in wart_items:
b = True if it.endswith(":") else False
clr = PURPLE if b else DARK_GREY
add_para(tf, it, 12, b, clr, 1)
# Right side β Other DNA viruses + HHV-6/7/8
add_rect(sl, 6.55, 1.2, 6.6, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 6.67, 1.25, 6.4, 5.8)
add_para(tf2, "OTHER HERPESVIRUSES (from Chapter overview)", 13, True, PURPLE, 2)
hhv_items = [
"Cytomegalovirus (CMV/HHV-5):",
" β Congenital infection (Ch. 79); transplant infections",
"",
"Human Herpesvirus 6 (HHV-6):",
" β Infects T cells via CD46 receptor; two variants: 6A & 6B",
" β Transmission: Infected oral secretions",
" β Sixth Disease (Exanthem subitum / Roseola infantum):",
" β’ Children: High grade fever + maculopapular rashes",
" β Older age groups: Mononucleosis-like syndrome",
"",
"Human Herpesvirus 7 (HHV-7):",
" β Tropism for T cells; transmitted by oral secretions",
" β 30β50% DNA homology with HHV-6",
" β Associated with fever, seizures, respiratory symptoms,",
" pityriasis rosea",
"",
"Human Herpesvirus 8 (HHV-8):",
" β Causes Kaposi sarcoma (malignancy in HIV-infected individuals)",
" β See Chapter 80",
]
for it in hhv_items:
b = True if it.endswith(":") else False
clr = PURPLE if b else DARK_GREY
add_para(tf2, it, 12, b, clr, 1)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 4: POXVIRUS β MORPHOLOGY, VARIOLA & SMALLPOX
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Poxvirus Infections β Morphology & Smallpox", "Largest viruses visible under light microscope", accent_color=ACCENT_RED)
add_rect(sl, 0.15, 1.2, 4.1, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 3.9, 5.8)
add_para(tf, "MORPHOLOGY", 13, True, ACCENT_RED, 2)
morph = [
"β’ 400 nm Γ 230 nm β largest of all viruses",
"β’ Visible under light microscope",
"β’ Most complex viruses (not icosahedral/helical)",
"β’ Brick-shaped or ellipsoid",
"β’ Envelope: Two lipoprotein membranes (outer & inner)",
" with ridges from outer membrane",
"β’ Core with two lateral bodies (unknown function)",
"β’ Core/nucleocapsid: Biconcave dumbbell shape",
"β’ Single linear dsDNA β ONLY DNA virus replicating",
" in the cytoplasm",
]
for it in morph:
add_para(tf, it, 12, False, DARK_GREY, 2)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "HUMAN POXVIRUSES", 13, True, ACCENT_RED, 2)
pox = [
"β’ Variola (Smallpox β eradicated)",
"β’ Vaccinia (vaccine for smallpox)",
"β’ Molluscum contagiosum virus",
"β’ Monkeypox (emerging)",
"β’ Orf virus, Pseudocowpox, Cowpox/Buffalopox",
]
for it in pox:
add_para(tf, it, 12, False, DARK_GREY, 2)
# Middle column - Smallpox
add_rect(sl, 4.45, 1.2, 4.4, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 4.58, 1.25, 4.2, 5.8)
add_para(tf2, "SMALLPOX (VARIOLA)", 13, True, ACCENT_RED, 2)
sp = [
"First infectious disease eradicated from the world",
"",
"Smallpox Timeline:",
"β’ Last natural variola major: Bangladesh, May 1975",
"β’ Last natural variola minor: Somalia, 26 Oct 1977",
"β’ Eradication declared by WHO: 8th May 1980",
"β’ Lab spread: Birmingham 1978 (accidental); stocks destroyed",
"β’ Currently only 2 labs hold stocks:",
" β CDC Atlanta, USA",
" β Center for Research on Virology, Koltsova, Russia",
"β’ Bioterrorism risk: Post-1980 births not immunized",
"",
"Clinical Manifestations:",
"β’ Portal of entry: Mucous membranes of upper respiratory tract",
"β’ Incubation: 7β17 days; fever first symptom",
"β’ Rashes: Deep-seated, all in one stage, evolution slow",
"β’ Centrifugal distribution (extremities > trunk)",
"β’ Evolved through macular β papular β vesicular β pustular",
"β’ Fever subsided with appearance of rash",
"",
"Lab Diagnosis:",
"β’ Direct detection: Paschen bodies (intracytoplasmic inclusion)",
"β’ Electron microscopy: Brick-shaped, biconcave DNA core",
"β’ Egg inoculation: Pock formation on chorioallantoic membrane",
"",
"Treatment (historical):",
"β’ Vaccinia immunoglobulins",
"β’ Methisazone, Cidofovir, Tecovirimat",
]
for it in sp:
b = True if it.endswith(":") else False
clr = ACCENT_RED if b else (DARK_GREY if it != "" else WHITE)
add_para(tf2, it, 11, b, clr, 1)
# Right column - Eradication reasons + Vaccination
add_rect(sl, 9.05, 1.2, 4.1, 5.9, fill=RED_BG, line_color=ACCENT_RED, line_width=1)
tf3 = add_tf(sl, 9.18, 1.25, 3.9, 5.8)
add_para(tf3, "WHY ERADICATION SUCCEEDED", 13, True, ACCENT_RED, 2)
er = [
"β Exclusively human pathogen (no animal reservoir)",
"β Patients were the only source; no carriers",
"β Easy case detection: characteristic rashes (Table 56.4)",
"β Subclinical cases were NOT transmitting",
"β Global program launched 1967 by WHO",
"β Effective live vaccinia vaccine",
" β’ Freeze-dried (β stability)",
" β’ Bifurcated needle β simple, effective, economical",
"β Wiped out in ~10 years",
]
for it in er:
add_para(tf3, it, 12, False, DARK_GREY, 2)
add_para(tf3, " ", 4, False, DARK_GREY, 1)
add_para(tf3, "SMALLPOX vs CHICKENPOX (Table 56.4)", 12, True, ACCENT_RED, 3)
table_data = [
("Feature", "Smallpox", "Chickenpox"),
("Incubation", "12 d (7-17)", "15 d (10-21)"),
("Site of rash", "Extremities, palms, soles, face", "Axilla & flexor surface"),
("Rash type", "Deep seated, single stage, slow", "Superficial, crops, pleomorphic"),
("Distribution", "Centrifugal", "Centripetal"),
("Fever", "Subsides with rash", "Rises with each crop"),
]
for row in table_data:
hdr = row[0] == "Feature"
line = f" {row[0]:15} | {row[1]:25} | {row[2]}"
add_para(tf3, line, 10, hdr, ACCENT_RED if hdr else DARK_GREY, 1)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 5: MONKEYPOX
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Monkeypox β Most Important Emerging Poxvirus", "Enveloped dsDNA Virus | Genus Orthopoxvirus | Family Poxviridae", accent_color=ORANGE)
# Left column
add_rect(sl, 0.15, 1.2, 6.3, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 6.1, 5.8)
add_para(tf, "EPIDEMIOLOGY", 13, True, ORANGE, 2)
epi = [
"β’ Zoonotic disease β primarily endemic to West & Central Africa",
" (tropical rain forests)",
"β’ 2022 outbreak: Spread globally; multiple countries",
"β’ About 1.06 Lakh cases with 234 deaths (Jan 2022 β Aug 2024)",
"",
"TWO GENETIC CLADES:",
"β’ Central African clade: More severe, more transmissible",
" (Congo Basin)",
"β’ West African clade: Less severe",
]
for it in epi:
b = it.endswith(":") and ":" in it and len(it) < 30
clr = ORANGE if b else DARK_GREY
add_para(tf, it, 13, b, clr, 2)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "TRANSMISSION", 13, True, ORANGE, 3)
trans = [
"Human-to-human transmission via:",
"β’ (i) Close contact with respiratory secretions / skin lesions",
"β’ (ii) Contaminated objects",
"β’ (iii) Mother β fetus via placenta or birth canal",
"β’ (iv) Sexual transmission (doubtful)",
]
for it in trans:
b = it.endswith(":")
add_para(tf, it, 13, b, ORANGE if b else DARK_GREY, 2)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "CLINICAL FEATURES", 13, True, ORANGE, 3)
clin = [
"β’ Similar to smallpox: fever + rashes",
"β’ Range: Asymptomatic β cases to death",
]
for it in clin:
add_para(tf, it, 13, False, DARK_GREY, 2)
# Right column
add_rect(sl, 6.65, 1.2, 6.5, 2.5, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 6.78, 1.25, 6.3, 2.4)
add_para(tf2, "DIAGNOSIS", 13, True, ORANGE, 2)
dx = [
"β’ Detection of viral DNA by PCR (method of choice)",
"β’ Ideal specimens: Skin lesions β roof or fluid from vesicles/",
" pustules, dry crusts, or biopsy",
]
for it in dx:
add_para(tf2, it, 13, False, DARK_GREY, 2)
add_rect(sl, 6.65, 3.85, 6.5, 1.5, fill=YELLOW_BG, line_color=ORANGE, line_width=1)
tf3 = add_tf(sl, 6.78, 3.9, 6.3, 1.4)
add_para(tf3, "TREATMENT", 13, True, ORANGE, 2)
add_para(tf3, "β’ Symptomatic + treat secondary bacterial infections", 13, False, DARK_GREY, 2)
add_para(tf3, "β’ Newer drugs like Tecovirimat under evaluation", 13, False, DARK_GREY, 2)
add_rect(sl, 6.65, 5.5, 6.5, 1.6, fill=GREEN_BG, line_color=ACCENT_GRN, line_width=1)
tf4 = add_tf(sl, 6.78, 5.55, 6.3, 1.5)
add_para(tf4, "PREVENTION / VACCINATION", 13, True, ACCENT_GRN, 2)
add_para(tf4, "β’ Vaccination against smallpox ~85% effective in preventing monkeypox", 12, False, DARK_GREY, 2)
add_para(tf4, "β’ Newer vaccine: Modified attenuated vaccinia virus (Ankara strain)", 12, False, DARK_GREY, 2)
add_para(tf4, " β Approved for prevention of monkeypox in 2019", 12, False, DARK_GREY, 1)
# Other poxviruses box
add_rect(sl, 6.65, 3.7, 6.5, 0.12, fill=ORANGE)
add_rect(sl, 6.65, 3.82, 6.5, 2.0, fill=WHITE, line_color=MID_GREY, line_width=0.5)
# redraw properly
add_rect(sl, 6.65, 3.7, 6.5, 1.1, fill=WHITE, line_color=MID_GREY, line_width=0.5)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 6: MOLLUSCUM CONTAGIOSUM + OTHER POXVIRUSES
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Molluscum Contagiosum & Other Poxviruses", "Obligate human poxvirus | Zoonotic poxviruses", accent_color=TEAL)
# Left column - Molluscum
add_rect(sl, 0.15, 1.2, 6.3, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 6.1, 5.8)
add_para(tf, "MOLLUSCUM CONTAGIOSUM", 13, True, TEAL, 2)
mc = [
"Obligate human poxvirus producing characteristic skin lesions",
"",
"Clinical Manifestations:",
"β’ Dome-shaped, pink pearly wart-like lesions (2β5 mm)",
"β’ Umbilicated, with a dimple at center",
"β’ Found singly or in clusters; anywhere EXCEPT palms & soles",
"β’ Genital lesions seen in adults",
"",
"Transmission:",
"β’ Children: Direct & indirect contact (barbers, towels, pools)",
"β’ Rarely sexual transmission in young adults",
"",
"Features:",
"β’ Self-limiting: Lesions disappear in 3β4 months",
"β’ No systemic complications",
"β’ HIV-infected: More generalized, severe & persistent",
"",
"Lab Diagnosis:",
"β’ Molluscum bodies (Henderson-Paterson bodies):",
" Intracytoplasmic eosinophilic inclusions in skin scrapings",
"β’ Electron microscopy & PCR for confirmation",
"β’ NOT cultivable (cannot be propagated in tissue culture,",
" embryonated egg or animals)",
"",
"Treatment:",
"β’ Surgical removal by ablation (cryotherapy or laser)",
"β’ Cidofovir β some efficacy",
"β’ Smallpox vaccine NOT protective (no cross-reactivity)",
]
for it in mc:
b = it.endswith(":") and len(it) < 30
clr = TEAL if b else DARK_GREY
add_para(tf, it, 12, b, clr, 1)
# Right column
add_rect(sl, 6.65, 1.2, 6.5, 3.5, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 6.78, 1.25, 6.3, 3.4)
add_para(tf2, "VACCINIA VIRUS", 13, True, TEAL, 2)
vacc = [
"β’ Cross-reacts with variola β antibodies protective for variola",
"β’ Antigenic cross-reactivity enabled global smallpox eradication",
"β’ Non-pathogenic to humans (milder skin lesions)",
"β’ Produces Guarnieri body (variola produces Paschen body)",
"β’ On CAM: Larger & hemorrhagic/necrotic pock lesions (vs variola)",
"",
"Variolation (historical):",
" β First attempt at artificial immunity (17thβ18th century)",
" β Inoculation with skin scraping of smallpox patient",
"",
"Cowpox vaccine: Discovered by Edward Jenner",
"Vaccination (live vaccinia vaccine):",
" β’ Single dose; 1β2 years of age",
" β’ Freeze-dried form; bifurcated needle",
" β’ Adverse: Mild vaccinia-induced rashes",
]
for it in vacc:
b = it.endswith(":")
clr = TEAL if b else DARK_GREY
add_para(tf2, it, 12, b, clr, 1)
add_rect(sl, 6.65, 4.85, 6.5, 2.25, fill=BLUE_BG, line_color=MED_BLUE, line_width=1)
tf3 = add_tf(sl, 6.78, 4.9, 6.3, 2.15)
add_para(tf3, "OTHER POXVIRUSES OF HUMAN IMPORTANCE", 13, True, MED_BLUE, 2)
oth = [
"Orf virus: Localized skin lesions β contagious pustular dermatitis",
" or mouth sore",
"Pseudocowpox (Paravaccinia): Infects milk handlers β",
" nodular skin lesions (milker's nodule)",
"Cowpox & Buffalopox: Pox-like lesions + mild systemic illness",
"",
"All are ZOONOTIC β mainly infect animals; human infection rare",
]
for it in oth:
add_para(tf3, it, 12, False, DARK_GREY, 2)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 7: MEASLES β PATHOGENESIS & CLINICAL
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Measles (Rubeola) β Pathogenesis & Clinical Features", "Acute, highly contagious childhood disease | RNA Virus | Paramyxoviridae", accent_color=ACCENT_RED)
add_rect(sl, 0.15, 1.2, 4.15, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 4.0, 5.8)
add_para(tf, "PATHOGENESIS", 13, True, ACCENT_RED, 2)
path = [
"Transmission:",
"β’ Droplets inhalation (common) over short distances",
"β’ Small-particle aerosols in enclosed public places",
"",
"Spread pathway:",
"β’ Multiplies locally in respiratory tract",
"β Regional lymph nodes β bloodstream (primary viremia)",
"β Reticuloendothelial system β secondary viremia",
"β Disseminates to various sites",
"",
"Target sites: Epithelial surfaces β skin, respiratory tract,",
" conjunctiva",
]
for it in path:
b = it.endswith(":")
clr = ACCENT_RED if b else DARK_GREY
add_para(tf, it, 12, b, clr, 2)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "3 CLINICAL STAGES", 13, True, ACCENT_RED, 3)
add_para(tf, "Incubation: ~10 days (shorter in infants; up to 3 wk in adults)", 12, False, DARK_GREY, 2)
add_para(tf, "", 4, False, DARK_GREY, 1)
add_para(tf, "1. PRODROMAL STAGE (Day 10β14):", 12, True, ACCENT_RED, 2)
prod = [
"β’ Fever (Day 10 = Day 1 of infection)",
"β’ Koplik's spots (Day 12) β PATHOGNOMONIC",
" White-bluish spots on erythema, near 2nd lower molars",
" Appear on buccal mucosa β fade with rash onset",
"β’ Non-specific: Cough, coryza, redness of eye, diarrhea",
"",
"2. ERUPTIVE STAGE (Day 14):",
"β’ Maculopapular dusky red rashes after 4 days of fever",
"β’ First behind ears β face β arm β trunk β legs",
" (fade in same order after 4 days)",
"β’ Absent in HIV-infected people",
"",
"3. POST-MEASLES STAGE:",
"β’ Weight loss, weakness",
"β’ Failure to recover β chronic illness",
]
for it in prod:
b = it.endswith(":")
clr = ACCENT_RED if b else DARK_GREY
add_para(tf, it, 11, b, clr, 1)
add_para(tf, "Timeline: Fever (D10) β Koplik's (D12) β Rash (D14)", 11, True, MED_BLUE, 4)
# Middle column - Complications
add_rect(sl, 4.5, 1.2, 4.3, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 4.63, 1.25, 4.1, 5.8)
add_para(tf2, "COMPLICATIONS", 13, True, ACCENT_RED, 2)
add_para(tf2, "High risk: <5 yr, >20 yr, pregnant women, immunocompromised", 11, False, DARK_GREY, 2)
add_para(tf2, " ", 3, False, DARK_GREY, 1)
add_para(tf2, "Secondary Bacterial Infections:", 12, True, ACCENT_RED, 2)
comp1 = [
"β’ Otitis media & bronchopneumonia (most common)",
"β’ Recurrence of fever or failure to subside",
"β’ Worsening of tuberculosis (false -ve Mantoux)",
"β’ Diarrhea β malnutrition + Vitamin A deficiency",
]
for it in comp1:
add_para(tf2, it, 12, False, DARK_GREY, 1)
add_para(tf2, " ", 3, False, DARK_GREY, 1)
add_para(tf2, "Due to Measles Virus Itself:", 12, True, ACCENT_RED, 2)
comp2 = [
"β’ Giant-cell pneumonitis (Hecht's pneumonia) in immunocompromised",
"β’ Acute laryngotracheobronchitis (croup)",
]
for it in comp2:
add_para(tf2, it, 12, False, DARK_GREY, 1)
add_para(tf2, " ", 3, False, DARK_GREY, 1)
add_para(tf2, "CNS Complications (rare but most severe):", 12, True, ACCENT_RED, 2)
comp3 = [
"β’ SSPE (Subacute Sclerosing Panencephalitis) β most important",
"β’ Post-measles encephalomyelitis",
"β’ Measles inclusion body encephalitis",
]
for it in comp3:
add_para(tf2, it, 12, False, DARK_GREY, 1)
# Right column - Lab Dx, Treatment, Epidemiology
add_rect(sl, 9.0, 1.2, 4.15, 3.15, fill=RED_BG, line_color=ACCENT_RED, line_width=1)
tf3 = add_tf(sl, 9.13, 1.25, 3.95, 3.05)
add_para(tf3, "LABORATORY DIAGNOSIS", 13, True, ACCENT_RED, 2)
lab = [
"Specimen: Nasopharyngeal swab",
"β’ Antigen detection: Anti-nucleoprotein antibodies (immunofluorescence)",
"β’ Virus isolation: Monkey/human kidney cells;",
" CPE = Warthin-Finkeldey cells (multinucleated giant cells,",
" intranuclear + intracytoplasmic inclusions)",
"β’ Shell vial culture: Early detection in 2β3 days",
"β’ Antibody: IgM in serum/oral fluid; or 4-fold IgG rise",
" ELISA (recombinant NP antigen) β most recommended",
" CSF anti-measles antibody β diagnostic of SSPE",
"β’ RT-PCR: Extremely sensitive; detects viral RNA (N gene)",
" Also: characterize genotypes for molecular epidemiology",
]
for it in lab:
add_para(tf3, it, 11, False, DARK_GREY, 1)
add_rect(sl, 9.0, 4.5, 4.15, 1.2, fill=YELLOW_BG, line_color=ORANGE, line_width=1)
tf4 = add_tf(sl, 9.13, 4.55, 3.95, 1.1)
add_para(tf4, "TREATMENT", 13, True, ORANGE, 2)
add_para(tf4, "β’ No specific antiviral therapy", 12, False, DARK_GREY, 1)
add_para(tf4, "β’ Symptomatic + general supportive measures", 12, False, DARK_GREY, 1)
add_para(tf4, "β’ Vitamin A: Effective in reducing morbidity & mortality", 12, False, DARK_GREY, 1)
add_rect(sl, 9.0, 5.85, 4.15, 1.25, fill=GREEN_BG, line_color=ACCENT_GRN, line_width=1)
tf5 = add_tf(sl, 9.13, 5.9, 3.95, 1.15)
add_para(tf5, "EPIDEMIOLOGY (KEY POINTS)", 13, True, ACCENT_GRN, 2)
add_para(tf5, "β’ Endemic worldwide; epidemics every 2β3 yrs (late winter/spring)", 12, False, DARK_GREY, 1)
add_para(tf5, "β’ Secondary attack rate: Very high (>90%)", 12, False, DARK_GREY, 1)
add_para(tf5, "β’ Most susceptible: 6 monthsβ3 years (developing countries)", 12, False, DARK_GREY, 1)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 8: MEASLES β VACCINE & GLOBAL EPIDEMIOLOGY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Measles β Vaccine & Global Epidemiology", "Live Attenuated Vaccine | WHO Strategic Plan", accent_color=MED_BLUE)
add_rect(sl, 0.15, 1.2, 6.3, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 6.1, 5.8)
add_para(tf, "MEASLES VACCINE", 13, True, MED_BLUE, 2)
vacc_m = [
"Live attenuated vaccine β strains currently used:",
"β’ Schwartz strain (standard in much of the world)",
"β’ Edmonston-Zagreb strain",
"β’ Moraten strain",
"β’ Prepared in chick embryo cell line",
"",
"Reconstitution:",
"β’ Lyophilized form; reconstitute with distilled water",
"β’ Use within 4 hours",
"β’ Thermolabile β store at β20Β°C",
"β’ One dose (0.5 mL) >1000 infective viral units; subcutaneous",
"",
"Combined vaccines:",
"β’ MR (measles + rubella)",
"β’ MMR (measles + mumps + rubella)",
"β’ MMR-V (measles + mumps + rubella + varicella)",
"",
"National Immunization Schedule (India):",
"β’ MR vaccine at 9β12 months with Vitamin A",
"β’ Second dose at 16β24 months",
"",
"Contraindications for MMR:",
"β’ Severe allergic reaction to MMR vaccine",
"β’ Advanced immune deficiency (transplant, chemo, advanced HIV)",
"β’ Pregnancy, active TB, or another live vaccine within 30 days",
"",
"Side effects:",
"β’ Mild measles-like illness in 15β20% vaccines",
"β’ No spread of vaccine virus in community",
"β’ Toxic shock syndrome (S. aureus contamination β rare)",
"",
"Schedule:",
"β’ Single dose (0.5 mL) subcutaneously",
"β’ Seroconversion in 90%; immunity for 14β16 years or lifelong",
]
for it in vacc_m:
b = it.endswith(":") and len(it) < 35
clr = MED_BLUE if b else DARK_GREY
add_para(tf, it, 11, b, clr, 1)
# Right column - Prevention + Epidemiology
add_rect(sl, 6.65, 1.2, 6.5, 2.5, fill=BLUE_BG, line_color=MED_BLUE, line_width=1)
tf2 = add_tf(sl, 6.78, 1.25, 6.3, 2.4)
add_para(tf2, "PREVENTION β GENERAL MEASURES", 13, True, MED_BLUE, 2)
prev = [
"β’ Airborne precautions: Isolation in negative pressure room",
"β’ Use N95 respirator and PPEs",
"β’ Contacts over 9β12 months: Protected by measles vaccine",
" within 3 days of exposure (incubation of vaccine strain ~7 days",
" vs 10 days for natural measles)",
"β’ Measles Immunoglobulin (Ig): Within 3 days, 0.25 mg/kg body wt",
"β’ Vaccine + Ig should NOT be given together",
" (min 8β12 weeks gap required)",
]
for it in prev:
add_para(tf2, it, 12, False, DARK_GREY, 2)
add_rect(sl, 6.65, 3.85, 6.5, 1.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf3 = add_tf(sl, 6.78, 3.9, 6.3, 1.8)
add_para(tf3, "GLOBAL EPIDEMIOLOGY (2023)", 13, True, MED_BLUE, 2)
epi2 = [
"β’ ~10.3 million measles cases globally (with 1.07 Lakh deaths)",
"β’ 20% increase in cases from 2022",
"β’ Democratic Republic of Congo: Maximum cases in 2023",
"β’ India: ~65,150 measles cases in 2023 (sharp increase)",
"β’ India 2023: ~2,952 rubella cases; outbreak from Rajasthan (2014)",
"",
"WHO Strategic Plan: Measles & Rubella Elimination",
"(South-East Asia Region 2020β2024):",
"β’ β₯95% coverage with 2 doses of MR vaccine",
"β’ Case-based surveillance system",
"β’ Accredited measles/rubella laboratory network",
"β’ Elimination: <1 confirmed case per million population",
"β’ Achieved by: American region, Western Pacific (Australia,",
" Hong Kong, Japan, Korea, New Zealand, Sri Lanka etc.)",
]
for it in epi2:
b = it.endswith(":") or it.startswith("WHO")
clr = MED_BLUE if b else DARK_GREY
add_para(tf3, it, 11, b, clr, 1)
add_rect(sl, 6.65, 5.9, 6.5, 1.2, fill=YELLOW_BG, line_color=ORANGE, line_width=1)
tf4 = add_tf(sl, 6.78, 5.95, 6.3, 1.1)
add_para(tf4, "MEASLES GENOTYPES", 13, True, ORANGE, 2)
add_para(tf4, "β’ 8 clades β further grouped into 23 recognized genotypes (WHO)", 12, False, DARK_GREY, 2)
add_para(tf4, "β’ Genotype D8 followed by B3 and D4 are commonly reported globally & India", 12, False, DARK_GREY, 1)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 9: RUBELLA
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Rubella (German Measles)", "RNA Virus | Togaviridae | Genus Rubivirus | Highly Teratogenic", accent_color=PURPLE)
add_rect(sl, 0.15, 1.2, 4.3, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 4.1, 5.8)
add_para(tf, "OVERVIEW & PATHOGENESIS", 13, True, PURPLE, 2)
ov = [
"β’ Childhood exanthema similar to measles β also called German measles",
"β’ Unlike measles β highly teratogenic β Congenital Rubella Syndrome",
"β’ Only member under genus Rubivirus (Togaviridae family)",
"β’ Contains ssRNA; capsid (C) protein + envelope",
"β’ Envelope: lipid layer + two spike-like glycoproteins (E1 & E2)",
"β’ Only ONE serotype; humans are only known reservoir",
"β’ Two clinical forms: Postnatal & Congenital infection",
"",
"Transmission: Respiratory droplets via upper respiratory mucosa",
"Spread: Replicates in nasopharynx β lymph nodes β viremia",
" (Day 7β9); lasts until Day 14 (rash + antibody appear together)",
"",
"POSTNATAL RUBELLA:",
"β’ Incubation: ~14 days (range 12β23 days)",
"β’ Subclinical in 20β50% cases",
"β’ Rash: Often first manifestation in children",
"β’ Adults: 1β5 day prodrome (low-grade fever, malaise, URI)",
"",
"Clinical features:",
"β’ Rash: Generalized maculopapular; starts on face β trunk",
" β extremities; disappears in 3 days",
"β’ Lymphadenopathy: Occipital & postauricular (most striking feature)",
"β’ Forchheimer spots: Pin-head petechiae on soft palate & uvula",
"",
"Complications:",
"β’ Arthralgia & arthritis (adults, especially women)",
"β’ Thrombocytopenia & encephalitis (rare)",
]
for it in ov:
b = it.endswith(":") and len(it) < 35
clr = PURPLE if b else DARK_GREY
add_para(tf, it, 11, b, clr, 1)
# Middle column - Lab Dx
add_rect(sl, 4.65, 1.2, 4.3, 3.5, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 4.78, 1.25, 4.1, 3.4)
add_para(tf2, "LABORATORY DIAGNOSIS", 13, True, PURPLE, 2)
lab = [
"Isolation of virus:",
"β’ Nasopharyngeal/throat swabs: 6 days before & after rash",
"β’ Monkey or rabbit origin cell lines (shell vial technique)",
"",
"Serology (Antibody Detection) β PREFERRED:",
"β’ ELISA: Detects both IgM & IgG separately",
" β Antigens: Whole virus lysate or recombinant E1/E2",
"β’ IgG avidity test: Differentiate active vs past infection",
" or post-vaccination",
"",
"Molecular:",
"β’ RT-PCR: Detects rubella-specific RNA (nucleoprotein N gene)",
" in clinical specimens",
]
for it in lab:
b = it.endswith(":")
clr = PURPLE if b else DARK_GREY
add_para(tf2, it, 12, b, clr, 1)
add_rect(sl, 4.65, 4.85, 4.3, 2.25, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf3 = add_tf(sl, 4.78, 4.9, 4.1, 2.15)
add_para(tf3, "CONGENITAL RUBELLA SYNDROME (CRS)", 13, True, PURPLE, 2)
crs = [
"Most serious consequence of rubella virus infection",
"β’ Highly teratogenic; maximum severity in FIRST TRIMESTER",
"β’ Classic triad:",
" β Ears: Deafness (most common)",
" β Eyes: Cataract (Fig 56.11B)",
" β Heart: Patent ductus arteriosus",
"β’ Detail in Chapter 79",
]
for it in crs:
add_para(tf3, it, 12, False, DARK_GREY, 1)
# Right column - Epidemiology + Vaccine
add_rect(sl, 9.15, 1.2, 4.0, 3.5, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf4 = add_tf(sl, 9.28, 1.25, 3.8, 3.4)
add_para(tf4, "EPIDEMIOLOGY", 13, True, PURPLE, 2)
epi = [
"β’ Source: Cases are only source; no carrier state",
"β’ Transmission: Airborne droplet, transplacental, rarely contact/sexual",
"β’ Worldwide occurrence; peak in spring",
"β’ Epidemics every 6β8 years; pandemics every 20β25 years",
"β’ Largest rubella epidemic: 1962β1965 (globally, postnatal)",
"β’ Period of communicability: 1 week before β 1 week after rash",
"β’ In India: 40% females of reproductive age susceptible",
"β’ World 2023: ~35,468 confirmed cases; Chad, Nigeria, India",
"β’ India 2023: ~2,952 cases",
"",
"Genotype: Based on E1 protein coding region",
" β 13 genotypes; 4 common: 1E, 1G, 1J, 2B",
" β Genotype 2B: Predominant globally & India",
]
for it in epi:
add_para(tf4, it, 11, False, DARK_GREY, 1)
add_rect(sl, 9.15, 4.85, 4.0, 2.25, fill=GREEN_BG, line_color=ACCENT_GRN, line_width=1)
tf5 = add_tf(sl, 9.28, 4.9, 3.8, 2.15)
add_para(tf5, "RUBELLA VACCINE (RA 27/3)", 13, True, ACCENT_GRN, 2)
rv = [
"β’ Live attenuated; prepared from human diploid fibroblast cell line",
"β’ Available singly or combined (MR, MMR vaccine)",
"β’ 0.5 mL subcutaneously; seroconversion 90%; immunity 14β16 yr",
"",
"Indications (India): Women of reproductive age (priority),",
" then all children 1β14 years; given with measles (MR) at",
" 9β12 months + 2nd dose at 16β24 months",
"",
"Contraindications:",
"β’ Contraindicated in pregnancy (teratogenic!)",
"β’ Avoid pregnancy for β₯4 weeks (28 days) after vaccination",
"β’ Infants <1 year: Not vaccinated (maternal antibody interference)",
"",
"Treatment: Mild, self-limited; no specific treatment",
"Prevention: Airborne precautions while handling cases",
]
for it in rv:
b = it.endswith(":")
clr = ACCENT_GRN if b else DARK_GREY
add_para(tf5, it, 11, b, clr, 1)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 10: HAND-FOOT-MOUTH DISEASE (HFMD)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Hand-Foot-and-Mouth (HFM) Disease", "Enteroviruses | Coxsackievirus A16 (most common cause)", accent_color=TEAL)
add_rect(sl, 0.15, 1.2, 6.3, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf = add_tf(sl, 0.28, 1.25, 6.1, 5.8)
add_para(tf, "OVERVIEW", 13, True, TEAL, 2)
ov = [
"β’ Mainly affects CHILDREN",
"β’ Characterized by ulcerations on oral & pharyngeal mucosa",
"β’ Vesicular rashes on palms & soles (heal WITHOUT crusting)",
"β’ Fever + sore throat with flu-like symptoms",
]
for it in ov:
add_para(tf, it, 13, False, DARK_GREY, 3)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "CAUSATIVE AGENTS", 13, True, TEAL, 3)
agents = [
"β’ Mainly caused by COXSACKIEVIRUSES (enteroviruses)",
"β’ Coxsackievirus A16 β most common cause",
"β’ Coxsackievirus A6 β more severe manifestation",
"β’ Enterovirus 71 β associated with cases in East & Southeast Asia",
"β’ Rarely by other enteroviruses",
]
for it in agents:
add_para(tf, it, 13, False, DARK_GREY, 3)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "TRANSMISSION", 13, True, TEAL, 3)
trans = [
"Virus can spread through infected person's:",
"β’ Nose & throat secretions (saliva, sputum, nasal mucus)",
"β’ Fluid from blisters or scabs",
"β’ Feces",
"Transmission occurs through:",
"β’ Contact (direct or indirect) and Droplets",
]
for it in trans:
b = it.endswith(":")
clr = TEAL if b else DARK_GREY
add_para(tf, it, 13, b, clr, 2)
add_para(tf, " ", 4, False, DARK_GREY, 1)
add_para(tf, "CLINICAL FEATURES (FIGS 56.12A TO C)", 13, True, TEAL, 3)
clin = [
"β’ Vesicular eruptions on Hands (A), Feet (B), Mouth (C)",
"β’ Oral: Ulcerations on oral & pharyngeal mucosa",
"β’ Skin: Vesicular rashes on palms & soles",
"β’ Heal WITHOUT crusting",
"β’ Fever and sore throat with flu-like symptoms",
]
for it in clin:
add_para(tf, it, 13, False, DARK_GREY, 2)
# Right column - summary comparison + key facts
add_rect(sl, 6.65, 1.2, 6.5, 5.9, fill=WHITE, line_color=MID_GREY, line_width=0.5)
tf2 = add_tf(sl, 6.78, 1.25, 6.3, 5.8)
add_para(tf2, "CHAPTER 56 β QUICK REVIEW SUMMARY", 14, True, TEAL, 2)
add_para(tf2, " ", 4, False, DARK_GREY, 1)
rows = [
("Virus", "Key Disease", "Key Feature", "Treatment"),
("Parvovirus B19", "Fifth Disease", "Slapped cheek; hydrops fetalis", "Supportive; IVIG"),
("HPV", "Warts / Cervical Ca", ">100 serotypes; types 6,11βwarts", "Surgical/ablation"),
("Variola", "Smallpox (ERADICATED)", "Centrifugal rash; Paschen body", "Vaccinia Ig; Cidofovir"),
("Monkeypox", "Pox-like disease", "Zoonotic; 2 clades; 2022 outbreak", "Tecovirimat (eval.)"),
("Molluscum", "Molluscum contagiosum", "Henderson-Paterson bodies; umbilicated", "Cryotherapy/laser"),
("Vaccinia", "Smallpox vaccine", "Guarnieri body; cross-reacts variola", "N/A (vaccine)"),
("Measles", "Rubeola", "Koplik's spots; Warthin-Finkeldey", "Vitamin A; supportive"),
("Rubella", "German measles", "CRS; occipital lymphadenopathy", "Supportive only"),
("CVA16/EV71", "Hand-Foot-Mouth", "Vesicles palms/soles/mouth", "Supportive"),
]
for i, row in enumerate(rows):
hdr = i == 0
line = f" {row[0]:20} | {row[1]:28} | {row[3]}"
add_para(tf2, line, 11 if not hdr else 12, hdr, MED_BLUE if hdr else DARK_GREY, 2)
if not hdr:
sub = f" β³ {row[2]}"
add_para(tf2, sub, 10, False, DARK_GREY, 0)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SLIDE 11: KEY TAKEAWAYS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sl = prs.slides.add_slide(blank)
slide_header(sl, "Key Takeaways β High-Yield Exam Points", "Chapter 56 | Section 7", accent_color=DARK_BLUE)
boxes = [
(0.15, 1.2, 4.15, 1.9, ACCENT_GRN, "Parvovirus B19",
["Smallest ss-DNA virus; depends on host enzymes",
"Slapped cheek (children) vs arthropathy (adults)",
"Hydrops fetalis (2nd trimester max risk)",
"PCR = most sensitive Dx; No antiviral available"]),
(0.15, 3.25, 4.15, 1.5, PURPLE, "HPV",
["DNA virus; >100 serotypes; tropism for epithelium",
"Types 6 & 11 β anogenital warts",
"Types 16 & 18 β cervical carcinoma"]),
(0.15, 4.9, 4.15, 2.2, ACCENT_RED, "Smallpox & Poxviruses",
["Largest virus; brick-shaped; only dsDNA replicates in cytoplasm",
"Smallpox ERADICATED 1980; centrifugal rash; Paschen bodies",
"Monkeypox: 2 clades; 2022 global outbreak",
"Molluscum: Henderson-Paterson bodies; NOT cultivable"]),
(4.55, 1.2, 4.5, 2.0, ORANGE, "Measles",
["RNA virus; Paramyxoviridae; Koplik's spots = pathognomonic",
"Rash: Behind ears β centrifugal spread",
"Warthin-Finkeldey cells on isolation",
"SSPE = most important CNS complication",
"Vitamin A reduces mortality; MMR vaccine"]),
(4.55, 3.35, 4.5, 2.0, PURPLE, "Rubella",
["RNA virus; Togaviridae; only Rubivirus",
"German measles; 1 serotype; only human reservoir",
"Occipital lymphadenopathy = most striking feature",
"CRS: Deaf + cataract + PDA (1st trimester worst)",
"RA 27/3 live attenuated vaccine; avoid in pregnancy"]),
(4.55, 5.5, 4.5, 1.6, TEAL, "HFM Disease",
["Mainly Coxsackievirus A16; also A6 & EV71",
"Vesicles on hands, feet, mouth; heal without crusting",
"Transmitted via secretions, feces, droplets; supportive Rx"]),
(9.25, 1.2, 3.9, 5.9, MED_BLUE, "RAPID RECALL β LAB Dx",
["Fifth disease: PCR (VP1/VP2 DNA genes)",
"HPV: Clinical + HPV typing",
"Smallpox: Paschen bodies; EM (brick shape); CAM pock",
"Monkeypox: PCR of skin lesion",
"Molluscum: Henderson-Paterson bodies; NOT cultivable; PCR",
"Measles: Warthin-Finkeldey cells; RT-PCR (N gene); IgM ELISA",
"Rubella: IgG avidity test; RT-PCR; ELISA (IgM/IgG)",
"HFM: Clinical diagnosis; virus isolation/PCR if needed",
"",
"VACCINES AT A GLANCE:",
"Measles: Schwartz/Edmonston-Zagreb/Moraten strain",
"Rubella: RA 27/3 (human diploid fibroblast cell line)",
"MMR = Measles + Mumps + Rubella",
"MMR-V = MMR + Varicella",
"India NIS: MR at 9-12 months + 2nd dose 16-24 months",
"",
"Smallpox (historical): Live vaccinia; Bifurcated needle",
"Monkeypox: Modified Ankara strain vaccinia (2019)",
]),
]
for bx in boxes:
x, y, w, h, clr, title, items = bx
add_rect(sl, x, y, w, 0.32, fill=clr)
add_text(sl, title, x+0.1, y+0.04, w-0.2, 0.27,
size=12, bold=True, color=WHITE)
add_rect(sl, x, y+0.32, w, h-0.32, fill=WHITE,
line_color=clr, line_width=1)
tf = add_tf(sl, x+0.1, y+0.38, w-0.2, h-0.44)
first = True
for it in items:
if first:
p = tf.paragraphs[0]
first = False
else:
p = tf.add_paragraph()
p.space_before = Pt(1)
run = p.add_run()
run.text = it
run.font.name = "Calibri"
run.font.size = Pt(11)
run.font.bold = it.endswith(":") or it.startswith("VACCINES") or it.startswith("RAPID")
run.font.color.rgb = clr if (it.endswith(":") or it.startswith("VACCINES") or it.startswith("RAPID")) else DARK_GREY
OUT = "/tmp/workspace/herpesvirus-ppt/Cutaneous_Viral_Infections.pptx"
prs.save(OUT)
print(f"Saved: {OUT}")
print(f"Slides: {len(prs.slides)}")
cd /tmp/workspace/herpesvirus-ppt && python create_ppt2.py 2>&1
Cutaneous Viral Infections
Presentation Β· PPTX
| Slide | Topic | Accent Color |
|---|---|---|
| 1 | Title Slide | Dark Navy |
| 2 | Parvovirus B19 β Morphology, Pathogenesis, Clinical (5th disease, hydrops fetalis, aplastic crisis, gloves-socks syndrome), Lab Dx, Treatment | Green |
| 3 | HPV Infections β All wart types + Other Herpesviruses (HHV-6, HHV-7, HHV-8/Kaposi) | Purple |
| 4 | Poxvirus Morphology & Smallpox β Eradication timeline, clinical features, Table 56.4 Smallpox vs Chickenpox | Red |
| 5 | Monkeypox β Epidemiology, 2 clades, 2022 outbreak, transmission, Dx, treatment, Ankara vaccine | Orange |
| 6 | Molluscum Contagiosum & Other Poxviruses β Henderson-Paterson bodies, Vaccinia, Orf/Pseudocowpox/Cowpox | Teal |
| 7 | Measles β Pathogenesis & Clinical β 3 stages, Koplik's spots, complications (SSPE, Hecht's pneumonia), Lab Dx, Warthin-Finkeldey cells | Red |
| 8 | Measles β Vaccine & Global Epidemiology β Strains, NIS India, contraindications, WHO elimination plan, 2023 global data | Blue |
| 9 | Rubella β Postnatal + CRS (deaf/cataract/PDA), RA 27/3 vaccine, Forchheimer spots, IgG avidity test | Purple |
| 10 | HFM Disease β CVA16, CVA6, EV71 + Full Chapter 56 quick-review comparison table | Teal |
| 11 | Key Takeaways & High-Yield Exam Points β Rapid recall boxes for every pathogen + Vaccines at a glance | Dark Blue |