Ans all the questions serially in English according to medical parasitology with popular reference book All ans serially also describe in bangla
Create a study guide PDF comparing Plasmodium species features for AMCB exam
ls -la /tmp/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /tmp/workspace/amcb-malaria-guide
~/amcb-malaria-guide/build_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.platypus.flowables import HRFlowable
from reportlab.lib.colors import HexColor
import os
OUTPUT = "/tmp/workspace/amcb-malaria-guide/AMCB_Plasmodium_Study_Guide.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = HexColor("#1A3558")
MID_BLUE = HexColor("#2563A8")
LIGHT_BLUE = HexColor("#D6E8FA")
ACCENT_RED = HexColor("#C0392B")
ACCENT_GRN = HexColor("#1A7A4A")
PALE_GRN = HexColor("#D4EDDA")
PALE_RED = HexColor("#FAD7D3")
PALE_YEL = HexColor("#FFF9C4")
PALE_ORG = HexColor("#FFE0B2")
WHITE = colors.white
BLACK = colors.black
GREY_LIGHT = HexColor("#F5F5F5")
GREY_MED = HexColor("#BDBDBD")
TABLE_HEADER= HexColor("#1A3558")
ALT_ROW = HexColor("#EAF2FB")
# ── Document setup ───────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm, leftMargin=1.8*cm,
topMargin=2*cm, bottomMargin=2*cm,
title="Plasmodium spp. Study Guide - AMCB Exam",
author="Army Medical College Bogura - Department of Microbiology"
)
W, H = A4
PAGE_W = W - 3.6*cm # usable width
# ── Styles ────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def S(name, **kw):
"""Quick ParagraphStyle factory."""
return ParagraphStyle(name, **kw)
TITLE = S("TITLE", fontName="Helvetica-Bold", fontSize=22, textColor=WHITE,
alignment=TA_CENTER, spaceAfter=4, spaceBefore=4)
SUBTITLE = S("SUBTITLE", fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
alignment=TA_CENTER, spaceAfter=2)
INST = S("INST", fontName="Helvetica", fontSize=9, textColor=HexColor("#CCDDEE"),
alignment=TA_CENTER, spaceAfter=2)
SECTION = S("SECTION", fontName="Helvetica-Bold", fontSize=13, textColor=WHITE,
spaceAfter=4, spaceBefore=6, leftIndent=0)
SUBHD = S("SUBHD", fontName="Helvetica-Bold", fontSize=10, textColor=DARK_BLUE,
spaceAfter=3, spaceBefore=5)
BODY = S("BODY", fontName="Helvetica", fontSize=8.5, leading=12,
textColor=BLACK, spaceAfter=3, alignment=TA_JUSTIFY)
BODY_BOLD = S("BODY_BOLD", fontName="Helvetica-Bold", fontSize=8.5, leading=12,
textColor=DARK_BLUE, spaceAfter=2)
BULLET = S("BULLET", fontName="Helvetica", fontSize=8.5, leading=12,
textColor=BLACK, leftIndent=14, bulletIndent=4, spaceAfter=1)
SMALL = S("SMALL", fontName="Helvetica", fontSize=7.5, textColor=HexColor("#555555"),
alignment=TA_CENTER, spaceAfter=2)
TH = S("TH", fontName="Helvetica-Bold", fontSize=8, textColor=WHITE,
alignment=TA_CENTER, leading=10)
TD = S("TD", fontName="Helvetica", fontSize=7.5, textColor=BLACK,
alignment=TA_CENTER, leading=10)
TD_LEFT = S("TD_LEFT", fontName="Helvetica", fontSize=7.5, textColor=BLACK,
alignment=TA_LEFT, leading=10)
TD_BOLD = S("TD_BOLD", fontName="Helvetica-Bold", fontSize=7.5, textColor=DARK_BLUE,
alignment=TA_LEFT, leading=10)
WARN = S("WARN", fontName="Helvetica-Bold", fontSize=8, textColor=ACCENT_RED,
alignment=TA_CENTER, spaceAfter=2)
NOTE = S("NOTE", fontName="Helvetica-Oblique",fontSize=8, textColor=HexColor("#444444"),
alignment=TA_LEFT, leftIndent=8, spaceAfter=3)
# ── Helpers ───────────────────────────────────────────────────────────────────
def section_banner(text, color=DARK_BLUE):
tbl = Table([[Paragraph(text, SECTION)]], colWidths=[PAGE_W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
("ROUNDEDCORNERS", [4,4,4,4]),
]))
return tbl
def info_box(text, bg=PALE_YEL, border=HexColor("#F5A623")):
tbl = Table([[Paragraph(text, BODY)]], colWidths=[PAGE_W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("BOX", (0,0),(-1,-1), 1, border),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
]))
return tbl
def make_table(headers, rows, col_widths, alt_color=ALT_ROW):
"""Build a styled comparison table."""
data = [[Paragraph(h, TH) for h in headers]]
for i, row in enumerate(rows):
styled_row = []
for j, cell in enumerate(row):
if j == 0:
styled_row.append(Paragraph(str(cell), TD_BOLD))
else:
styled_row.append(Paragraph(str(cell), TD))
data.append(styled_row)
style = [
("BACKGROUND", (0,0),(-1,0), TABLE_HEADER),
("GRID", (0,0),(-1,-1), 0.4, GREY_MED),
("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, alt_color]),
("TOPPADDING", (0,0),(-1,-1), 4),
("BOTTOMPADDING", (0,0),(-1,-1), 4),
("LEFTPADDING", (0,0),(-1,-1), 5),
("RIGHTPADDING", (0,0),(-1,-1), 5),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]
t = Table(data, colWidths=col_widths, repeatRows=1)
t.setStyle(TableStyle(style))
return t
def two_col(left_items, right_items, left_title, right_title,
lbg=PALE_GRN, rbg=PALE_RED):
"""Two-column comparison box."""
ldata = [[Paragraph(left_title, BODY_BOLD)]] + [[Paragraph(item, BULLET)] for item in left_items]
rdata = [[Paragraph(right_title, BODY_BOLD)]] + [[Paragraph(item, BULLET)] for item in right_items]
lt = Table(ldata, colWidths=[(PAGE_W/2)-4])
lt.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,0),lbg),
("GRID",(0,0),(-1,-1),0.3,GREY_MED),
("TOPPADDING",(0,0),(-1,-1),3),
("BOTTOMPADDING",(0,0),(-1,-1),3),
("LEFTPADDING",(0,0),(-1,-1),5),]))
rt = Table(rdata, colWidths=[(PAGE_W/2)-4])
rt.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,0),rbg),
("GRID",(0,0),(-1,-1),0.3,GREY_MED),
("TOPPADDING",(0,0),(-1,-1),3),
("BOTTOMPADDING",(0,0),(-1,-1),3),
("LEFTPADDING",(0,0),(-1,-1),5),]))
outer = Table([[lt, rt]], colWidths=[PAGE_W/2, PAGE_W/2])
outer.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),
("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),0),
("BOTTOMPADDING",(0,0),(-1,-1),0)]))
return outer
def hr():
return HRFlowable(width=PAGE_W, color=GREY_MED, thickness=0.6, spaceAfter=4, spaceBefore=4)
def sp(h=6):
return Spacer(1, h)
# ═══════════════════════════════════════════════════════════════════════════════
# CONTENT
# ═══════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER BANNER ──────────────────────────────────────────────────────────────
cover_data = [[
Paragraph("ARMY MEDICAL COLLEGE BOGURA", INST),
Paragraph("Department of Microbiology | Card 05 (Second Term)", INST),
Paragraph("PARASITOLOGY STUDY GUIDE", TITLE),
Paragraph("Sporozoa: Plasmodium spp. (AMCB-08)", SUBTITLE),
Paragraph("Comprehensive Species Comparison | Life Cycle | Pathogenesis | Diagnosis | Treatment", INST),
]]
cover_tbl = Table(cover_data, colWidths=[PAGE_W])
cover_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), DARK_BLUE),
("TOPPADDING", (0,0),(-1,-1), 14),
("BOTTOMPADDING", (0,0),(-1,-1), 14),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
]))
story += [cover_tbl, sp(10)]
# ── SECTION 1: SPECIES OVERVIEW ───────────────────────────────────────────────
story += [section_banner("1. PLASMODIUM SPECIES AT A GLANCE"), sp(4)]
overview_headers = ["Feature", "P. falciparum", "P. vivax", "P. malariae", "P. ovale"]
overview_rows = [
["Disease name", "Malignant Tertian Malaria", "Benign Tertian Malaria", "Quartan Malaria", "Benign Tertian Malaria"],
["Fever periodicity", "36-48 h (irregular, then 48h)", "Every 48 h", "Every 72 h", "Every 48 h"],
["Geographic range", "Mainly tropical", "Tropical + temperate", "Worldwide (low prevalence)", "W. Africa, SE Asia"],
["RBC preference", "ALL ages of RBC", "Reticulocytes (young)", "Old RBCs", "Reticulocytes"],
["RBC enlargement", "NONE", "YES - enlarged, pale", "None (may shrink)", "YES - oval, fimbriated"],
["Max parasitemia", "Up to 30%", "<1-2%", "<1%", "<1%"],
["Multiple rings/RBC", "COMMON", "Rare", "Rare", "Rare"],
["Gametocyte shape", "Crescent / banana-shaped", "Round / oval", "Round", "Round"],
["Schizont merozoites", "Up to 32 (avg 20-24)", "12-24 (rosette pattern)", "6-12 (rosette / daisy)", "4-16 (avg 8)"],
["Hypnozoites", "ABSENT - no relapse", "PRESENT - relapse", "Absent", "PRESENT - relapse"],
["Recurrence type", "Recrudescence", "Relapse", "Recrudescence", "Relapse"],
["Stippling", "Maurer's clefts", "Schuffner's dots", "Ziemann's stippling", "James's dots"],
["Severity", "MOST severe (malignant)", "Moderate", "Mild (nephrotic syndrome)", "Mild to moderate"],
["Drug sensitivity", "Often RESISTANT to CQ", "Mostly CQ-sensitive", "CQ-sensitive", "CQ-sensitive"],
["Unique features", "Sequestration, Rosetting, PfEMP-1", "Amoeboid trophozoite", "Band-form trophozoite, Nephrotic syndrome", "Oval/fimbriated RBC"],
]
cw1 = [3.6*cm, 3.8*cm, 3.4*cm, 3.0*cm, 2.8*cm]
story += [make_table(overview_headers, overview_rows, cw1), sp(8)]
story += [
info_box("<b>Bangladesh Context:</b> P. falciparum accounts for ~70-80% of cases; P. vivax ~20-30%. Cases are concentrated in the Chittagong Hill Tracts (Rangamati, Khagrachari, Bandarban) - approximately 95% of national burden. Vectors: Anopheles dirus, An. philippinensis, An. minimus.",
bg=LIGHT_BLUE, border=MID_BLUE),
sp(10),
]
# ── SECTION 2: LIFE CYCLE ──────────────────────────────────────────────────────
story += [section_banner("2. LIFE CYCLE OF PLASMODIUM"), sp(4)]
lc_headers = ["Stage", "Location", "Forms Involved", "Key Events"]
lc_rows = [
["1. Pre-erythrocytic\n(Hepatic)",
"Human liver\n(hepatocytes)",
"Sporozoites → Hepatic schizonts → Merozoites",
"Sporozoites from mosquito bite enter liver within 30 min. Undergo hepatic schizogony. Hepatic schizonts rupture releasing merozoites."],
["1b. Hypnozoite\n(P. vivax/ovale only)",
"Human liver",
"Dormant hypnozoites",
"Some sporozoites remain dormant for weeks to years. Reactivate → cause RELAPSE. Killed ONLY by primaquine."],
["2. Erythrocytic\n(Blood stage)",
"Human RBCs",
"Ring → Trophozoite → Schizont → Merozoites",
"Merozoites invade RBCs. Ring stage → mature trophozoite → schizont (erythrocytic schizogony). RBC rupture releases merozoites → new cycle. CAUSES CLINICAL SYMPTOMS (paroxysm)."],
["3. Gametocyte\nformation",
"Human RBCs",
"Microgametocyte (M) + Macrogametocyte (F)",
"Some merozoites differentiate into sexual forms. P. falciparum gametocytes appear 7-14 days after erythrocytic phase. Gametocytes ingested by mosquito to continue cycle."],
["4. Exflagellation\n(Mosquito midgut)",
"Female Anopheles\nmosquito - midgut",
"Gametes → Zygote",
"Microgametocyte undergoes exflagellation (8 microgametes). Fertilization with macrogamete → ZYGOTE → OOKINETE (motile)."],
["5. Oocyst stage\n(Sporogony)",
"Mosquito stomach\nwall",
"Ookinete → Oocyst → Sporozoites",
"Ookinete penetrates midgut wall. Forms OOCYST. Matures over 9-14 days. Ruptures releasing thousands of SPOROZOITES."],
["6. Salivary glands",
"Mosquito salivary\nglands",
"Sporozoites (infective stage)",
"Sporozoites migrate to salivary glands. Injected into next human host during bite. Cycle completes."],
]
cw2 = [2.8*cm, 2.8*cm, 4.0*cm, 7.0*cm]
story += [make_table(lc_headers, lc_rows, cw2), sp(6)]
story += [
info_box("<b>Key Transmission Facts:</b> Human → Mosquito: GAMETOCYTES (sexual stage) | Mosquito → Human: SPOROZOITES (infective stage) | Vector: Female Anopheles ONLY (males do not bite)"),
sp(10),
]
# ── SECTION 3: MICROSCOPY / DIAGNOSIS ─────────────────────────────────────────
story += [section_banner("3. MICROSCOPY FEATURES & LABORATORY DIAGNOSIS"), sp(4)]
micro_headers = ["Morphological Feature", "P. falciparum", "P. vivax", "P. malariae", "P. ovale"]
micro_rows = [
["Infected RBC size", "Normal (not enlarged)", "ENLARGED (1.5-2x)", "Normal or slightly small", "Slightly enlarged, OVAL"],
["RBC shape", "Normal/round", "Round, irregular", "Round", "Oval, fimbriated edges"],
["Stippling/dots", "Maurer's clefts\n(coarse, few)", "Schuffner's dots\n(fine, numerous, pink)", "Ziemann's stippling\n(rare, faint)", "James's dots\n(similar to Schuffner)"],
["Ring form", "Very delicate, thin rings; double chromatin dots (headphone); ACCOLÉ (appliqué) forms at margin", "Larger, thicker rings; amoeboid trophozoite", "Compact, rectangular 'band-form' trophozoite", "Compact trophozoite; ameboid in some"],
["Trophozoite", "Only rings in periphery\n(schizonts sequestered)", "Amoeboid (irregular shape) - DIAGNOSTIC", "Band/bar form across RBC - DIAGNOSTIC", "Compact"],
["Schizont", "RARELY in peripheral blood\n(6-32 merozoites; rosette/segmenter)", "12-24 merozoites\n(visible in peripheral blood)", "6-12 merozoites\n(daisy-head rosette)", "4-16 merozoites\n(avg 8; loose cluster)"],
["Gametocyte", "CRESCENT/BANANA SHAPED\n- PATHOGNOMONIC for P.falciparum", "Round/oval; fills entire RBC", "Round; smaller than vivax", "Round; resembles vivax"],
["Multiple infections/RBC", "VERY COMMON\n(2-3+ rings/cell)", "Uncommon", "Uncommon", "Uncommon"],
["Peripheral blood stage","Ring forms ONLY\n(mature forms sequestered)", "ALL stages present", "ALL stages present", "ALL stages present"],
["Parasite % of RBCs", "Up to 30% (very high)", "<1-2%", "<1%", "<1%"],
]
cw3 = [3.2*cm, 4.0*cm, 3.4*cm, 3.0*cm, 3.0*cm]
story += [make_table(micro_headers, micro_rows, cw3), sp(6)]
# Blood sample note
story += [
info_box("<b>Why Capillary Blood for P. falciparum?</b> Mature trophozoites and schizonts of P. falciparum SEQUESTER in deep capillaries (via PfEMP-1 binding to CD36, ICAM-1). Fingertip capillary blood contains more sequestered parasitized RBCs → HIGHER SENSITIVITY. Venous blood from P. vivax/malariae/ovale is equally acceptable as all stages circulate freely.",
bg=PALE_ORG, border=HexColor("#E67E22")),
sp(6),
]
# Staining table
story += [Paragraph("Laboratory Methods Summary", SUBHD)]
lab_headers = ["Method", "Principle", "Sensitivity", "Best For", "Limitation"]
lab_rows = [
["Thick Blood Film\n(Giemsa stain)", "RBCs lysed; parasites concentrated", "5-10 parasites/µL", "DETECTION (screening)", "Cannot reliably speciate alone"],
["Thin Blood Film\n(Giemsa/Wright)", "RBCs preserved; parasite morphology visible", "100-200 parasites/µL", "SPECIES IDENTIFICATION & morphology", "Less sensitive"],
["RDT (Rapid Test)", "Immunochromatographic antigen detection", "Good for high parasitemia", "Field/remote settings; rapid result in 15-20 min", "HRP-2 persists post-treatment; low sensitivity for non-falciparum"],
["PCR / NAAT", "Parasite-specific DNA amplification", "HIGHEST (1-5 parasites/µL)", "Species ID, drug resistance, low-density infection", "Not STAT; expensive; not routine"],
["QBC (Buffy Coat)", "Fluorescent acridine orange staining", "Moderate-high", "Rapid screening; field labs", "Cannot speciate; needs centrifuge"],
["Serology (IFAT/ELISA)", "Antibody detection", "Variable", "Epidemiology/surveys only", "NOT for acute diagnosis"],
]
cw_lab = [3.2*cm, 3.5*cm, 2.5*cm, 3.5*cm, 3.9*cm]
story += [make_table(lab_headers, lab_rows, cw_lab), sp(4)]
story += [
Paragraph("RDT Antigens Detected:", SUBHD),
]
rdt_rows = [
["HRP-2 (Histidine-Rich Protein-2)", "P. falciparum ONLY", "Highest sensitivity for Pf; persists 3-4 weeks post-treatment; false negative with HRP-2 deletion mutants"],
["pLDH (Parasite Lactate Dehydrogenase)", "ALL Plasmodium species", "Pf-specific pLDH vs pan-pLDH; clears faster after treatment"],
["Aldolase", "ALL Plasmodium species (pan)", "Pan-malaria marker; lower sensitivity than pLDH"],
]
rdt_headers = ["Antigen", "Detects", "Notes"]
cw_rdt = [4.5*cm, 4.0*cm, 8.1*cm]
story += [make_table(rdt_headers, rdt_rows, cw_rdt), sp(10)]
# ── SECTION 4: PATHOGENESIS ────────────────────────────────────────────────────
story.append(PageBreak())
story += [section_banner("4. VIRULENCE FACTORS & PATHOGENESIS OF P. FALCIPARUM"), sp(4)]
vf_headers = ["Virulence Factor", "Mechanism", "Pathological Consequence"]
vf_rows = [
["PfEMP-1\n(P. falciparum Erythrocyte\nMembrane Protein-1)",
"Expressed on RBC surface by var genes. Binds endothelial receptors: CD36, ICAM-1, VCAM-1, E-selectin",
"SEQUESTRATION - parasitized RBCs adhere to deep capillary walls in brain, kidney, liver, placenta → ischemia, hypoxia → organ failure. Mature stages absent from peripheral blood."],
["Rosetting",
"Parasitized RBCs bind to uninfected RBCs via PfEMP-1 and complement receptors",
"Microvascular occlusion → worsens cerebral and organ ischemia. Strongly associated with severe/cerebral malaria."],
["All-age RBC invasion",
"Invades reticulocytes AND mature RBCs (unlike P. vivax which only infects reticulocytes)",
"Parasitemia up to 30% → massive hemolysis → SEVERE ANEMIA"],
["Knob formation",
"Electron-dense protrusions on parasitized RBC surface; display PfEMP-1",
"Facilitates cytoadherence and rosetting"],
["Hemozoin\n(Malarial pigment)",
"Released on RBC rupture; activates macrophages via TLR9",
"Triggers TNF-alpha, IL-1, IL-6, IL-8 release → HIGH FEVER, systemic inflammation, bone marrow suppression"],
["GPI anchors",
"Glycosylphosphatidylinositol from parasite membrane",
"Pro-inflammatory cytokine induction → cytokine storm"],
["Antigenic variation\n(var gene switching)",
"PfEMP-1 encoded by ~60 var genes; parasite switches expression",
"Immune evasion → prolonged infection, repeated episodes, failure of natural immunity"],
["High multiplication",
"Produces up to 32 merozoites per schizont (vs 12-24 in vivax)",
"Rapid RBC destruction; exponential parasitemia increase"],
]
cw_vf = [4.0*cm, 5.5*cm, 7.1*cm]
story += [make_table(vf_headers, vf_rows, cw_vf), sp(6)]
# Pernicious malaria
story += [section_banner("5. PERNICIOUS (SEVERE/MALIGNANT) MALARIA - CLINICAL SYNDROMES", MID_BLUE), sp(4)]
pern_headers = ["Complication", "Pathogenesis", "Key Features / Threshold"]
pern_rows = [
["Cerebral Malaria\n(MOST DEADLY)",
"Sequestration of pRBCs in cerebral capillaries + cytokine-mediated BBB disruption → cerebral hypoxia",
"Coma (GCS ≤9), seizures, abnormal posturing. Main cause of malaria death."],
["Severe Anemia",
"Hemolysis of pRBCs + innocent bystander hemolysis + dyserythropoiesis (TNF-alpha suppression) + hypersplenism",
"Hb <5 g/dL (children), <7 g/dL (adults). Rapid onset."],
["ARDS",
"Cytokine storm → pulmonary endothelial damage → non-cardiogenic pulmonary edema",
"Respiratory failure, bilateral infiltrates, PaO2/FiO2 <300"],
["Acute Renal Failure",
"Reduced renal perfusion + glomerular damage + hemoglobinuria (Blackwater fever variant)",
"Oliguria/anuria, creatinine elevation. Dialysis may be needed."],
["Hypoglycemia",
"Parasite consumes glucose + quinine/quinidine stimulates insulin secretion (hyperinsulinism)",
"Especially in children and pregnant women. Blood glucose <2.2 mmol/L."],
["Blackwater Fever",
"Massive intravascular hemolysis (quinine hypersensitivity + immune complex) → hemoglobin in urine",
"Cola/black urine, severe anemia, jaundice, renal failure. Mortality 20-30%."],
["Algid Malaria\n(Circulatory Collapse)",
"Gram-negative bacteremia superimposed on malaria + cytokine-mediated shock",
"Cold clammy skin, BP <80/50, septic shock picture"],
["DIC",
"Thrombocytopenia + consumption of clotting factors + platelet dysfunction",
"Bleeding diathesis, abnormal PT/APTT, fibrin degradation products elevated"],
["Hyperpyrexia",
"TNF-alpha and IL-1 from hemozoin-activated macrophages reset hypothalamic thermostat",
"Temperature >40°C. Febrile convulsions in children."],
["Placental Malaria",
"Sequestration via VAR2CSA (PfEMP-1 variant binding chondroitin sulfate A on placental syncytiotrophoblasts)",
"Low birth weight, maternal anemia, stillbirth. Especially in primigravidae."],
]
cw_p = [3.5*cm, 6.0*cm, 7.1*cm]
story += [make_table(pern_headers, pern_rows, cw_p), sp(10)]
# ── SECTION 6: RELAPSE vs RECRUDESCENCE ───────────────────────────────────────
story += [section_banner("6. RELAPSE vs RECRUDESCENCE", HexColor("#5D6D7E")), sp(4)]
rel_headers = ["Feature", "RELAPSE (P. vivax / P. ovale)", "RECRUDESCENCE (P. falciparum / P. malariae)"]
rel_rows = [
["Origin of parasites", "LIVER - reactivation of dormant hypnozoites", "BLOOD - residual erythrocytic parasites below detection threshold"],
["Mechanism", "Hypnozoites dormant in hepatocytes; reactivate under immune suppression, stress, fever", "Subtherapeutic drug levels or incomplete treatment; sequestered parasites persist in deep vessels"],
["Species", "P. vivax, P. ovale ONLY", "P. falciparum, P. malariae"],
["Hypnozoites present", "YES - in liver", "NO"],
["Time to recurrence", "Weeks to 3 years (P. vivax strains vary)", "Days to weeks after apparent cure"],
["Drug to prevent", "PRIMAQUINE (tissue schizonticide) / Tafenoquine", "Complete blood-stage treatment (ACT); adequate drug levels"],
["True new liver cycle", "YES - fresh exo-erythrocytic cycle", "NO - continuation of blood stage cycle"],
["G6PD testing needed", "YES (primaquine contraindicated in G6PD deficiency)", "No specific concern"],
]
cw_rel = [4.0*cm, 7.6*cm, 5.0*cm]
story += [make_table(rel_headers, rel_rows, cw_rel), sp(10)]
# ── SECTION 7: TREATMENT ──────────────────────────────────────────────────────
story += [section_banner("7. TREATMENT & CHEMOPROPHYLAXIS"), sp(4)]
# treatment
tx_headers = ["Species / Scenario", "First-Line Treatment", "Additional / Notes"]
tx_rows = [
["P. vivax (CQ-sensitive)", "Chloroquine 600 mg base load → 300 mg at 6h, 24h, 48h", "PLUS Primaquine 15 mg/day x 14 days (radical cure for hypnozoites). Check G6PD before primaquine."],
["P. vivax (CQ-resistant)", "Artemether-Lumefantrine (ACT) OR Quinine + Doxycycline", "PLUS Primaquine for radical cure"],
["P. falciparum (uncomplicated)", "Artemisinin-based Combination Therapy (ACT):\nArtemether-Lumefantrine (AL) preferred in Bangladesh", "OR Artesunate-Amodiaquine | OR Dihydroartemisinin-Piperaquine. Do NOT use chloroquine (resistant)"],
["P. falciparum (severe / cerebral)", "IV Artesunate (preferred over quinine since WHO 2011)", "ICU care; manage complications; exchange transfusion if parasitemia >10%"],
["P. malariae", "Chloroquine (no resistance reported)", "No primaquine needed (no hypnozoites)"],
["P. ovale", "Chloroquine + Primaquine", "Radical cure needed for hypnozoites"],
["Blackwater Fever", "STOP quinine; supportive care; IV fluids; dialysis if needed", "Avoid hemolytic drugs; transfuse if severe anemia"],
]
cw_tx = [4.0*cm, 6.0*cm, 6.6*cm]
story += [make_table(tx_headers, tx_rows, cw_tx), sp(6)]
# Prophylaxis
story += [Paragraph("Chemoprophylaxis", SUBHD)]
cp_headers = ["Drug", "Regimen", "Start Before Travel", "Indication / Notes"]
cp_rows = [
["Atovaquone-Proguanil\n(Malarone)", "1 adult tablet daily", "1-2 days before", "PREFERRED for CQ-resistant areas (Bangladesh CHT, SE Asia). Well tolerated."],
["Doxycycline", "100 mg daily", "1-2 days before", "CQ-resistant areas; cheap; photosensitivity; contraindicated in pregnancy"],
["Mefloquine", "250 mg weekly", "2 weeks before", "Multi-drug resistant areas; neuropsychiatric side effects possible"],
["Chloroquine", "300 mg base weekly", "1-2 weeks before", "ONLY for CQ-sensitive areas. Largely obsolete for P. falciparum in Bangladesh."],
["Primaquine", "30 mg base daily", "1-2 days before", "P. vivax endemic areas; terminal prophylaxis; G6PD testing MANDATORY"],
]
cw_cp = [3.5*cm, 3.0*cm, 3.2*cm, 6.9*cm]
story += [make_table(cp_headers, cp_rows, cw_cp), sp(4)]
story += [
info_box("<b>Duration of Prophylaxis:</b> Start as indicated before departure. Continue THROUGHOUT stay. Continue for 4 weeks after return (covers erythrocytic stages from late hepatic release). Exception: Atovaquone-Proguanil and Primaquine - only 7 days after return required.",
bg=PALE_GRN, border=ACCENT_GRN),
sp(10),
]
# ── SECTION 8: QUICK RECALL TABLES ────────────────────────────────────────────
story.append(PageBreak())
story += [section_banner("8. HIGH-YIELD MNEMONICS & QUICK RECALL", HexColor("#6C3483")), sp(4)]
# Mnemonic box
mnemo_data = [
[
Paragraph("<b>P. FALCIPARUM - Remember 'FALCIPARUM = FATAL'</b><br/>"
"F - Falciparum invades <u>F</u>ull range of RBCs (all ages)<br/>"
"A - <u>A</u>ccolé (appliqué) ring forms at RBC margin<br/>"
"L - <u>L</u>ack of relapse (no hypnozoites)<br/>"
"C - <u>C</u>rescent/banana-shaped gametocytes<br/>"
"I - <u>I</u>CU-level complications (cerebral malaria, ARDS)<br/>"
"P - PfEMP-1 (sequestration & rosetting)<br/>"
"A - <u>A</u>rtesunate/ACT for treatment<br/>"
"R - <u>R</u>esistant to Chloroquine<br/>"
"U - <u>U</u>p to 30% parasitemia<br/>"
"M - <u>M</u>aurer's clefts (stippling)", BODY),
],
[
Paragraph("<b>P. VIVAX - Remember 'VIVAX = VIVID RELAPSE'</b><br/>"
"V - <u>V</u>ery enlarged RBC<br/>"
"I - <u>I</u>nfects only reticulocytes<br/>"
"V - <u>V</u>aguely amoeboid trophozoite<br/>"
"A - <u>A</u>ll stages visible in peripheral blood<br/>"
"X - e<u>X</u>tra dormant stage = Hypnozoites → relapse<br/>"
"Schuffner's <u>dots</u>, responds to Chloroquine + Primaquine", BODY),
],
]
mnemo_tbl = Table(mnemo_data, colWidths=[PAGE_W])
mnemo_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), PALE_RED),
("BACKGROUND", (0,1), (-1,1), PALE_GRN),
("BOX", (0,0),(-1,-1), 0.5, GREY_MED),
("GRID",(0,0),(-1,-1),0.3,GREY_MED),
("TOPPADDING",(0,0),(-1,-1),7),
("BOTTOMPADDING",(0,0),(-1,-1),7),
("LEFTPADDING",(0,0),(-1,-1),10),
]))
story += [mnemo_tbl, sp(8)]
# Blackwater fever summary
story += [Paragraph("Blackwater Fever - High-Yield Summary", SUBHD)]
bwf_data = [[
Paragraph("<b>Definition:</b> Massive intravascular hemolysis with hemoglobinuria in P. falciparum malaria, often precipitated by quinine.<br/>"
"<b>Conditions:</b> (1) Repeated P. falciparum infections | (2) Quinine use in sensitized patient | (3) G6PD deficiency + oxidant drugs<br/>"
"<b>Pathogenesis:</b> Quinine acts as hapten → binds RBC → antibody-antigen complex → Complement activation (MAC) → Intravascular hemolysis → Free Hb → Hemoglobinuria → BLACK urine → Acute Tubular Necrosis → Renal Failure<br/>"
"<b>Urine:</b> Cola/black colored | Dipstick +ve for blood | NO RBCs on microscopy (distinguishes from hematuria)<br/>"
"<b>Treatment:</b> STOP quinine | IV fluids | Dialysis if needed | Transfusion | Avoid hemolytic drugs | Mortality 20-30%", BODY)
]]
bwf_tbl = Table(bwf_data, colWidths=[PAGE_W])
bwf_tbl.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1), PALE_YEL),
("BOX",(0,0),(-1,-1),1,HexColor("#E67E22")),
("TOPPADDING",(0,0),(-1,-1),8),
("BOTTOMPADDING",(0,0),(-1,-1),8),
("LEFTPADDING",(0,0),(-1,-1),10),
("RIGHTPADDING",(0,0),(-1,-1),10),
]))
story += [bwf_tbl, sp(8)]
# Anemia mechanisms
story += [Paragraph("Mechanisms of Anaemia in Malaria", SUBHD)]
ana_headers = ["Mechanism", "Description", "Species Emphasis"]
ana_rows = [
["Direct Hemolysis", "Rupture of parasitized RBCs during schizogony (every 48-72 h)", "All species; worst in P. falciparum"],
["Innocent Bystander", "Immune complex on unparasitized RBCs → complement-mediated lysis", "P. falciparum"],
["Rosetting", "Parasitized RBCs attach to normal RBCs → both destroyed", "P. falciparum"],
["Hypersplenism", "Enlarged spleen removes both infected and normal RBCs", "Chronic malaria (all species)"],
["Dyserythropoiesis", "TNF-alpha + IL-10 suppress erythroid precursors in bone marrow", "P. falciparum (severe disease)"],
["Relative EPO deficiency", "Inadequate erythropoietin response to anemia", "Chronic infections"],
["Folate depletion", "Increased demand during rapid RBC turnover", "Chronic cases; pregnancy"],
]
cw_ana = [3.8*cm, 8.0*cm, 4.8*cm]
story += [make_table(ana_headers, ana_rows, cw_ana), sp(10)]
# ── SECTION 9: PREVENTION ─────────────────────────────────────────────────────
story += [section_banner("9. PREVENTION OF MALARIA", ACCENT_GRN), sp(4)]
prev_headers = ["Level", "Intervention", "Details"]
prev_rows = [
["Personal", "Insecticide-Treated Nets (LLIN)", "Long-lasting pyrethroid-impregnated nets; most cost-effective individual protection"],
["Personal", "Insect Repellents", "DEET (most effective) applied to exposed skin; also picaridin, IR3535"],
["Personal", "Protective Clothing", "Long sleeves/trousers at dusk-dawn; light-colored clothes"],
["Community", "Indoor Residual Spraying (IRS)", "Pyrethroids/DDT on indoor walls; kills resting Anopheles"],
["Community", "Larval Control", "Temephos, Bti larvicides; Gambusia fish (biological control)"],
["Community", "Environmental Management", "Drain swamps, eliminate stagnant water, manage irrigation"],
["National", "NMEP (National Malaria Elimination Programme)", "Bangladesh's national vector control, surveillance, and treatment programme"],
["Vaccine", "RTS,S/AS01 (Mosquirix)", "WHO-approved 2021 for sub-Saharan Africa children; efficacy ~30-40% (limited)"],
["Traveler", "Chemoprophylaxis", "See Section 7 table above for drug regimens based on destination resistance pattern"],
]
cw_pr = [2.5*cm, 4.5*cm, 9.6*cm]
story += [make_table(prev_headers, prev_rows, cw_pr), sp(10)]
# ── SECTION 10: QUICK EXAM TIPS ───────────────────────────────────────────────
story += [section_banner("10. EXAM HIGH-YIELD POINTS (AMCB CHECKLIST)", HexColor("#7D6608")), sp(4)]
tips = [
("<b>Gametocytes:</b> Crescent/banana shape = P. falciparum ONLY (pathognomonic). All other species have round gametocytes.", PALE_YEL),
("<b>Schuffner's dots:</b> P. vivax (and James's dots in P. ovale). Maurer's clefts = P. falciparum (NOT true dots). Ziemann's = P. malariae (faint).", PALE_YEL),
("<b>Schizont NOT in peripheral blood:</b> P. falciparum mature stages sequestered → only rings circulate → explains why capillary blood is preferred.", PALE_ORG),
("<b>Relapse vs Recrudescence:</b> Relapse = from liver hypnozoites (P. vivax, P. ovale). Recrudescence = from residual blood parasites (P. falciparum, P. malariae).", PALE_GRN),
("<b>Blackwater fever:</b> 'Quinine + repeated Pf malaria → black urine + renal failure + mortality 20-30%'. STOP quinine.", PALE_RED),
("<b>Cerebral malaria:</b> P. falciparum ONLY. Mechanism = sequestration via PfEMP-1. GCS ≤9. ACT + supportive care.", PALE_RED),
("<b>Nephrotic syndrome:</b> P. malariae (immune complex GN). Unique complication of quartan malaria.", PALE_GRN),
("<b>Drug of choice for hypnozoites:</b> PRIMAQUINE (and tafenoquine). ALWAYS check G6PD first. Contraindicated in G6PD deficiency and pregnancy.", PALE_ORG),
("<b>Bangladesh vector:</b> Anopheles dirus (primary in forests), An. philippinensis, An. minimus. CHT = 95% of cases.", LIGHT_BLUE),
("<b>RDT:</b> HRP-2 = P. falciparum specific. pLDH and Aldolase = pan-Plasmodium. HRP-2 may be +ve 3-4 weeks post-treatment.", LIGHT_BLUE),
("<b>WHO preferred drug for severe malaria:</b> IV Artesunate (since 2011, replaced quinine as first-line).", PALE_YEL),
("<b>P. falciparum parasitemia:</b> Up to 30% (invades ALL RBC ages). P. vivax <2% (reticulocytes only). Key reason for severity difference.", PALE_RED),
]
for i in range(0, len(tips), 2):
row_data = []
for tip_text, tip_bg in tips[i:i+2]:
cell_tbl = Table([[Paragraph(tip_text, BODY)]], colWidths=[(PAGE_W/2)-3])
cell_tbl.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),tip_bg),
("BOX",(0,0),(-1,-1),0.5,GREY_MED),
("TOPPADDING",(0,0),(-1,-1),6),
("BOTTOMPADDING",(0,0),(-1,-1),6),
("LEFTPADDING",(0,0),(-1,-1),8),
("RIGHTPADDING",(0,0),(-1,-1),8),
]))
row_data.append(cell_tbl)
if len(row_data) == 1:
row_data.append(Spacer(1,1))
outer = Table([row_data], colWidths=[PAGE_W/2, PAGE_W/2])
outer.setStyle(TableStyle([
("LEFTPADDING",(0,0),(-1,-1),0),
("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),2),
("BOTTOMPADDING",(0,0),(-1,-1),2),
]))
story.append(outer)
story.append(sp(10))
# ── FOOTER REFERENCE ──────────────────────────────────────────────────────────
story += [
hr(),
Paragraph("References: Henry's Clinical Diagnosis and Management by Laboratory Methods | Tietz Textbook of Laboratory Medicine, 7th Ed. | Goldman-Cecil Medicine, International Edition | Quick Compendium of Clinical Pathology, 5th Ed. | Katzung's Basic and Clinical Pharmacology, 16th Ed. | WHO Malaria Reports", SMALL),
Paragraph("Army Medical College Bogura | Department of Microbiology | Parasitology (AMCB-08) | Sporozoa: Plasmodium spp.", SMALL),
]
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/amcb-malaria-guide && python build_pdf.py 2>&1
ls -lh /tmp/workspace/amcb-malaria-guide/AMCB_Plasmodium_Study_Guide.pdf
AMCB Plasmodium Study Guide
PDF Document · PDF
| Section | Content |
|---|---|
| 1. Species at a Glance | Full comparison table: P. falciparum, P. vivax, P. malariae, P. ovale - 15 features side by side |
| 2. Life Cycle | All 6 stages from sporozoite injection → salivary glands, with locations and key events |
| 3. Microscopy & Diagnosis | RBC morphology, stippling types, gametocyte shapes, peripheral blood findings; thick/thin smear, RDT, PCR, QBC comparison; RDT antigen table (HRP-2, pLDH, Aldolase) |
| 4. Virulence Factors | PfEMP-1, sequestration, rosetting, all-age RBC invasion, knobs, hemozoin, antigenic variation - each with mechanism and consequence |
| 5. Pernicious Malaria | 10 complications (cerebral malaria, ARDS, blackwater fever, hypoglycemia, DIC, algid malaria, etc.) with pathogenesis and clinical thresholds |
| 6. Relapse vs Recrudescence | Side-by-side comparison table with species, mechanism, timing, prevention |
| 7. Treatment & Prophylaxis | Treatment by species/severity; chemoprophylaxis drug table with timing and Bangladesh-specific guidance |
| 8. Quick Recall | FALCIPARUM and VIVAX mnemonics; blackwater fever summary box; anaemia mechanisms table |
| 9. Prevention | Personal → Community → National → Vaccine levels |
| 10. Exam Checklist | 12 color-coded high-yield exam tips in two-column card layout |
English ans gulo aro short and easy kore dau & Sathe proti it question er bangla description dio
P. vivax forms Hypnozoites in liver → causes relapse later
| Direction | Form Transmitted |
|---|---|
| Human → Mosquito | Gametocytes (sexual stage) |
| Mosquito → Human | Sporozoites (infective stage) |
| Factor | Role |
|---|---|
| PfEMP-1 (var gene) | Binds RBCs to capillary walls (Sequestration) → organ ischemia |
| Rosetting | Infected RBCs stick to normal RBCs → blocks blood flow |
| All-age RBC invasion | Invades reticulocytes AND old RBCs → very high parasitemia (up to 30%) |
| Knob formation | Helps RBCs stick to blood vessel walls |
| Hemozoin | Triggers TNF-α, IL-1 → high fever, inflammation |
| Antigenic variation | Switches surface proteins → evades immune system |
| High merozoite output | Up to 32 merozoites/schizont → rapid RBC destruction |
| Relapse | Recrudescence | |
|---|---|---|
| Origin | Liver (hypnozoites) | Blood |
| Species | P. vivax, P. ovale | P. falciparum, P. malariae |
| Prevention | Primaquine | Adequate blood-stage treatment |
| Timing | Weeks to years | Days to weeks |
| Mechanism | How |
|---|---|
| Direct hemolysis | RBC ruptures every 48-72 h when schizont bursts |
| Innocent bystander hemolysis | Immune complexes destroy healthy RBCs too |
| Hypersplenism | Enlarged spleen removes too many RBCs |
| Dyserythropoiesis | TNF-α suppresses bone marrow → less RBC production |
| Folate deficiency | High cell turnover depletes folate |
| Complication | Simple Explanation |
|---|---|
| Cerebral malaria | RBCs block brain vessels → coma, seizures (GCS ≤9) |
| Severe anemia | Hb <5 g/dL; massive hemolysis |
| ARDS | Cytokines damage lungs → fluid fills air sacs |
| Acute renal failure | Reduced blood flow to kidneys + hemoglobin blockage |
| Hypoglycemia | Parasite eats glucose + Quinine boosts insulin |
| Blackwater fever | Hemoglobin in urine → black urine |
| Algid malaria | Bacterial sepsis + circulatory shock |
| DIC | Clotting system failure → bleeding |
| Hyperpyrexia | Temp >40°C from TNF-α, IL-1 |
| Film | Purpose | Stain | Sensitivity |
|---|---|---|---|
| Thick film | Detection (screening) — RBCs lysed, parasites concentrated | Giemsa | 5-10 parasites/µL |
| Thin film | Species identification — RBC morphology preserved | Giemsa/Wright | 100-200 parasites/µL |
| Antigen | Detects |
|---|---|
| HRP-2 | P. falciparum only |
| pLDH | All species |
| Aldolase | All species |
| Level | Method |
|---|---|
| Personal | Insecticide-treated bed nets (LLIN), DEET repellent, long clothing at dusk |
| Indoor | Indoor Residual Spraying (IRS) with pyrethroid |
| Environmental | Remove stagnant water, drain swamps, use larvicides (Bti), Gambusia fish |
| Vaccine | RTS,S (Mosquirix) — WHO approved 2021; ~30-40% efficacy; for sub-Saharan Africa children |
| Drug | Dose | Area |
|---|---|---|
| Atovaquone-Proguanil | 1 tab daily | Preferred — resistant areas (Bangladesh CHT) |
| Doxycycline | 100 mg daily | Resistant areas; cheap; contraindicated in pregnancy |
| Mefloquine | 250 mg weekly | Multi-drug resistant areas |
| Chloroquine | 300 mg weekly | Sensitive areas only (mostly obsolete) |
| Primaquine | 30 mg daily | P. vivax areas; check G6PD first |
| Feature | P. vivax | P. falciparum |
|---|---|---|
| Disease | Benign Tertian Malaria | Malignant Tertian Malaria |
| Fever cycle | Every 48 h | Every 36-48 h (irregular first) |
| Severity | Mild-moderate | Severe, life-threatening |
| RBC invaded | Reticulocytes only | All ages |
| RBC size | Enlarged | Normal |
| Max parasitemia | <2% | Up to 30% |
| Complications | Rare (splenic rupture) | Cerebral malaria, renal failure, ARDS, hypoglycemia |
| Hypnozoites | Present → relapse | Absent → no relapse |
| Recurrence | Relapse (months-years) | Recrudescence (days-weeks) |
| Stippling | Schüffner's dots | Maurer's clefts |
| Gametocyte | Round/oval | Crescent/banana |
| Schizont in peripheral blood | Visible | Rarely seen (sequestered) |
| Multiple rings/RBC | Rare | Common |
| Drug | Chloroquine + Primaquine | ACT (Artemether-Lumefantrine) |
| RDT antigen | pLDH, Aldolase | HRP-2 + pLDH + Aldolase |
Reference: Henry's Clinical Diagnosis | Tietz Laboratory Medicine 7th Ed. | Goldman-Cecil Medicine | Quick Compendium of Clinical Pathology 5th Ed. | Katzung's Pharmacology 16th Ed.
Generate a quick reference cheat sheet (one-page summary PDF) for exam prep
ls -la /tmp/workspace/amcb-malaria-guide/
~/amcb-malaria-guide/cheatsheet.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
from reportlab.lib.colors import HexColor, white, black
from reportlab.platypus.flowables import HRFlowable
OUTPUT = "/tmp/workspace/amcb-malaria-guide/AMCB_Plasmodium_CheatSheet.pdf"
# ── Page: A4 landscape for max space ─────────────────────────────────────────
PAGE = A4 # 595 x 842 pt (portrait)
W, H = A4
LM = RM = 0.9*cm
TM = BM = 0.7*cm
USE_W = W - LM - RM # ~16.8 cm usable
doc = SimpleDocTemplate(OUTPUT, pagesize=A4,
leftMargin=LM, rightMargin=RM,
topMargin=TM, bottomMargin=BM)
# ── Colours ───────────────────────────────────────────────────────────────────
NAVY = HexColor("#0D2137")
BLUE = HexColor("#1A5C9E")
LBLUE = HexColor("#D0E8FA")
RED = HexColor("#B71C1C")
LRED = HexColor("#FFEBEE")
GREEN = HexColor("#1B5E20")
LGREEN = HexColor("#E8F5E9")
PURPLE = HexColor("#4A148C")
LPURP = HexColor("#F3E5F5")
ORANGE = HexColor("#E65100")
LORANGE = HexColor("#FFF3E0")
YELLOW = HexColor("#F9A825")
LYELLOW = HexColor("#FFFDE7")
TEAL = HexColor("#004D40")
LTEAL = HexColor("#E0F2F1")
GREY = HexColor("#BDBDBD")
DGREY = HexColor("#424242")
WHITE = white
# ── Styles ────────────────────────────────────────────────────────────────────
def PS(name, font="Helvetica", size=7, color=black, align=TA_LEFT,
bold=False, leading=None, lpad=0, safter=0, sbefore=0):
fn = ("Helvetica-Bold" if bold else "Helvetica") if font == "Helvetica" else font
return ParagraphStyle(name, fontName=fn, fontSize=size,
textColor=color, alignment=align,
leading=leading or size+2,
leftIndent=lpad, spaceAfter=safter, spaceBefore=sbefore)
TH_C = PS("TH_C", size=6.5, color=WHITE, align=TA_CENTER, bold=True, leading=8)
TH_L = PS("TH_L", size=6.5, color=WHITE, align=TA_LEFT, bold=True, leading=8)
TD_C = PS("TD_C", size=6.2, color=black, align=TA_CENTER, leading=7.5)
TD_L = PS("TD_L", size=6.2, color=black, align=TA_LEFT, leading=7.5)
TD_B = PS("TD_B", size=6.2, color=NAVY, align=TA_LEFT, bold=True, leading=7.5)
TD_R = PS("TD_R", size=6.2, color=RED, align=TA_LEFT, bold=True, leading=7.5)
TD_G = PS("TD_G", size=6.2, color=GREEN, align=TA_LEFT, bold=True, leading=7.5)
HDRP = PS("HDRP", size=7, color=WHITE, align=TA_LEFT, bold=True, leading=9)
SHDP = PS("SHDP", size=6, color=WHITE, align=TA_LEFT, leading=7)
BIG = PS("BIG", size=11, color=WHITE, align=TA_CENTER, bold=True, leading=13)
SUB = PS("SUB", size=7, color=HexColor("#BBDEFB"), align=TA_CENTER, leading=9)
FOOT = PS("FOOT", size=5.5, color=DGREY, align=TA_CENTER, leading=7)
WARN = PS("WARN", size=6.5, color=RED, align=TA_CENTER, bold=True, leading=8)
NOTE = PS("NOTE", size=5.8, color=DGREY, align=TA_LEFT, leading=7)
PAD = dict(TOPPADDING=2, BOTTOMPADDING=2, LEFTPADDING=3, RIGHTPADDING=3)
def tpad(t, extra=0):
return [("TOPPADDING",(0,0),(-1,-1),2+extra),
("BOTTOMPADDING",(0,0),(-1,-1),2+extra),
("LEFTPADDING",(0,0),(-1,-1),3),
("RIGHTPADDING",(0,0),(-1,-1),3)]
def sec(label, color=NAVY, sub=""):
inner = [[Paragraph(label, HDRP)]]
if sub:
inner.append([Paragraph(sub, SHDP)])
t = Table(inner, colWidths=[USE_W])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),color),
*tpad(t,1),
]))
return t
def htbl(headers, rows, widths, hbg=NAVY, alt=HexColor("#EAF4FB"), vstyle=None):
data = [[Paragraph(h, TH_C) for h in headers]]
for i,row in enumerate(rows):
r = []
for j,cell in enumerate(row):
st = vstyle[j] if vstyle else (TD_B if j==0 else TD_C)
r.append(Paragraph(str(cell), st))
data.append(r)
style = [
("BACKGROUND",(0,0),(-1,0),hbg),
("ROWBACKGROUNDS",(0,1),(-1,-1),[WHITE,alt]),
("GRID",(0,0),(-1,-1),0.3,GREY),
("VALIGN",(0,0),(-1,-1),"MIDDLE"),
*tpad(None),
]
t = Table(data, colWidths=widths, repeatRows=1)
t.setStyle(TableStyle(style))
return t
def box(text, bg=LYELLOW, border=YELLOW, style=None):
st = style or TD_L
t = Table([[Paragraph(text, st)]], colWidths=[USE_W])
t.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),bg),
("BOX",(0,0),(-1,-1),0.8,border),
*tpad(None,1),
]))
return t
def sp(h=3): return Spacer(1, h)
# ─────────────────────────────────────────────────────────────────────────────
# BUILD STORY
# ─────────────────────────────────────────────────────────────────────────────
story = []
# ══ HEADER BANNER ═════════════════════════════════════════════════════════════
hdr = Table([[
Paragraph("PLASMODIUM spp. — EXAM CHEAT SHEET", BIG),
Paragraph("AMCB-08 | Parasitology | Dept. of Microbiology | Army Medical College Bogura", SUB),
]], colWidths=[USE_W])
hdr.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),NAVY),
("TOPPADDING",(0,0),(-1,-1),5),
("BOTTOMPADDING",(0,0),(-1,-1),4),
("LEFTPADDING",(0,0),(-1,-1),6),
("RIGHTPADDING",(0,0),(-1,-1),6),
]))
story += [hdr, sp(3)]
# ══ ROW 1: SPECIES COMPARISON (full width) ════════════════════════════════════
story += [sec("① SPECIES COMPARISON AT A GLANCE", NAVY), sp(1)]
sp_h = ["Feature","P. falciparum","P. vivax","P. malariae","P. ovale"]
sp_r = [
["Disease", "Malignant Tertian","Benign Tertian","Quartan","Benign Tertian"],
["Fever cycle", "36-48 h","48 h","72 h","48 h"],
["RBC invaded", "ALL ages","Reticulocytes","Old RBCs","Reticulocytes"],
["RBC size", "Normal","ENLARGED","Normal/small","OVAL, fimbriated"],
["Max parasitemia", "Up to 30%","<2%","<1%","<1%"],
["Stippling", "Maurer's clefts","Schüffner's dots","Ziemann's stip.","James's dots"],
["Trophozoite", "Delicate ring; accolé; double chromatin dot","AMOEBOID (irregular)","BAND FORM","Compact"],
["Schizont (periph)","RARELY seen (sequestered); up to 32 mero.","Visible; 12-24 mero.","Visible; 6-12 mero. (daisy)","Visible; 4-16 mero."],
["Gametocyte", "CRESCENT / banana ✦","Round/oval","Round","Round"],
["Multiple rings/RBC","COMMON","Rare","Rare","Rare"],
["Hypnozoites", "ABSENT → no relapse","PRESENT → relapse","Absent","PRESENT → relapse"],
["Recurrence", "Recrudescence","Relapse","Recrudescence","Relapse"],
["Complications", "Cerebral malaria, ARDS, ARF, Blackwater fever, Hypoglycemia","Splenic rupture (rare)","Nephrotic syndrome","Mild"],
["Treatment", "ACT (Artemether-Lumefantrine)","Chloroquine + Primaquine","Chloroquine","Chloroquine + Primaquine"],
]
cw_sp = [2.6*cm, 4.1*cm, 3.5*cm, 3.1*cm, 3.1*cm]
alt_sp = HexColor("#EAF4FB")
story += [htbl(sp_h, sp_r, cw_sp, hbg=NAVY, alt=alt_sp), sp(3)]
# ══ ROW 2: Three-column block ══════════════════════════════════════════════════
C1 = 5.5*cm; C2 = 5.8*cm; C3 = 5.8*cm
GAP = 0.1*cm
# ── Col 1: Life cycle ──────────────────────────────────────────────────────
lc_items = [
["Stage","Where","Form"],
["1. Sporozoite injection","Human blood","Sporozoites (infective)"],
["2. Hepatic schizogony","Liver (hepatocytes)","Liver schizonts → Merozoites"],
["2b. Hypnozoite (vivax/ovale only)","Liver (dormant)","Reactivates → RELAPSE"],
["3. Erythrocytic schizogony","RBCs","Ring→Tropho→Schizont→Mero"],
["4. Gametocytogenesis","RBCs","Micro + Macrogametocytes"],
["5. Fertilization","Mosquito midgut","Gametes → Zygote → Ookinete"],
["6. Sporogony","Mosquito stomach wall","Oocyst → Sporozoites"],
["7. Salivary glands","Mosquito","Sporozoites → injected again"],
]
lc_tbl = htbl(["Stage","Where","Form"], lc_items[1:],
[1.8*cm, 2.0*cm, 1.6*cm], hbg=TEAL, alt=LTEAL,
vstyle=[TD_B, TD_L, TD_L])
# ── Col 2: Virulence factors ────────────────────────────────────────────────
vf_items = [
["PfEMP-1","Sequestration in deep capillaries → organ ischemia (cerebral, renal, placental)"],
["Rosetting","pRBCs bind normal RBCs → microvascular block"],
["All-age RBC invasion","Parasitemia up to 30% → severe anemia"],
["Knob formation","Displays PfEMP-1; helps cytoadherence"],
["Hemozoin","Triggers TNF-α, IL-1 → high fever, bone marrow suppression"],
["Antigenic variation","var gene switching → immune evasion"],
["High merozoite output","Up to 32 merozoites/schizont"],
]
vf_tbl = htbl(["Virulence Factor","Effect"], vf_items,
[2.2*cm, 3.5*cm], hbg=RED, alt=LRED,
vstyle=[TD_B, TD_L])
# ── Col 3: Pernicious malaria ───────────────────────────────────────────────
pm_items = [
["Cerebral malaria","Sequestration in cerebral caps → coma GCS≤9, seizures"],
["Severe anemia","Hb <5 g/dL; massive hemolysis + dyserythropoiesis"],
["ARDS","Cytokines → pulmonary edema → respiratory failure"],
["Acute renal failure","Reduced perfusion + hemoglobin tubular blockage"],
["Hypoglycemia","Parasite eats glucose + Quinine raises insulin"],
["Blackwater fever","Hemoglobinuria → black urine + renal failure (mortality 20-30%)"],
["Algid malaria","Gram-negative sepsis + circulatory shock"],
["DIC","Coagulopathy, thrombocytopenia, bleeding"],
["Hyperpyrexia",">40°C; TNF-α, IL-1; febrile convulsions in children"],
["Placental malaria","VAR2CSA → low birth weight, maternal anemia"],
]
pm_tbl = htbl(["Complication","Mechanism / Feature"], pm_items,
[2.5*cm, 3.2*cm], hbg=ORANGE, alt=LORANGE,
vstyle=[TD_R, TD_L])
# assemble row 2
def mini_sec(text, color):
t = Table([[Paragraph(text, TH_L)]], colWidths=[None])
t.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,-1),color),*tpad(None)]))
return t
col1 = Table([
[mini_sec("② LIFE CYCLE", TEAL)],
[lc_tbl],
], colWidths=[C1])
col1.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0)]))
col2 = Table([
[mini_sec("③ P. FALCIPARUM VIRULENCE FACTORS", RED)],
[vf_tbl],
], colWidths=[C2])
col2.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0)]))
col3 = Table([
[mini_sec("④ PERNICIOUS (SEVERE) MALARIA", ORANGE)],
[pm_tbl],
], colWidths=[C3])
col3.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0)]))
row2 = Table([[col1, col2, col3]], colWidths=[C1+GAP, C2+GAP, C3])
row2.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),2),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0),
("VALIGN",(0,0),(-1,-1),"TOP")]))
story += [row2, sp(3)]
# ══ ROW 3: Four-column narrow block ═══════════════════════════════════════════
D1 = 4.0*cm; D2 = 3.8*cm; D3 = 4.6*cm; D4 = 4.0*cm
# ── D1: Relapse vs Recrudescence ──
rv_items = [
["Origin","Liver (hypnozoites)","Blood (residual)"],
["Species","P. vivax, P. ovale","P. falciparum, P. malariae"],
["Timing","Weeks – 3 years","Days – weeks"],
["Prevention","Primaquine","Complete ACT course"],
["Hypnozoites","PRESENT","ABSENT"],
]
rv_tbl = htbl(["","RELAPSE","RECRUDES."],
rv_items, [1.1*cm, 1.5*cm, 1.3*cm], hbg=PURPLE, alt=LPURP,
vstyle=[TD_B, TD_C, TD_C])
# ── D2: Blackwater fever ──────────
bw_data = [
["Trigger","Repeated Pf + Quinine use"],
["Mechanism","Quinine=hapten→antibody→Complement→Massive hemolysis"],
["Urine","Black / cola-colored (Hb, not RBCs)"],
["Key Lab","Dipstick +ve, NO RBCs on microscopy"],
["Rx","STOP quinine | IV fluids | Dialysis"],
["Mortality","20–30%"],
]
bw_tbl = htbl(["","Blackwater Fever"], bw_data,
[1.5*cm, 2.2*cm], hbg=HexColor("#880E4F"), alt=HexColor("#FCE4EC"),
vstyle=[TD_B, TD_L])
# ── D3: Diagnosis ─────────────────
dx_data = [
["Thick film","Detection; 5-10 para/µL; Giemsa; RBCs lysed"],
["Thin film","Species ID; morphology; 100-200 para/µL"],
["RDT-HRP2","Pf ONLY; lasts 3-4 wk post-Rx (false +ve risk)"],
["RDT-pLDH","All species; clears faster after Rx"],
["RDT-Aldolase","Pan-plasmodium; lower sensitivity"],
["PCR/NAAT","Highest sens; NOT for STAT/emergency"],
["Capillary blood","Use for Pf — sequestered pRBCs in fingertip capillaries → more sensitive"],
]
dx_tbl = htbl(["Method","Key Point"], dx_data,
[2.0*cm, 2.5*cm], hbg=BLUE, alt=LBLUE,
vstyle=[TD_B, TD_L])
# ── D4: Chemoprophylaxis ──────────
cx_data = [
["Atovaquone-Proguanil","1 tab daily","1-2 d before","Best for CHT/resistant areas"],
["Doxycycline","100 mg daily","1-2 d before","Cheap; no pregnancy"],
["Mefloquine","250 mg weekly","2 wk before","Multi-resistant zones"],
["Chloroquine","300 mg weekly","1-2 wk","Sensitive areas only"],
["Primaquine","30 mg daily","1-2 d","Vivax; check G6PD!"],
]
cx_tbl = htbl(["Drug","Dose","Start","Note"], cx_data,
[1.4*cm, 1.0*cm, 0.9*cm, 1.6*cm], hbg=GREEN, alt=LGREEN,
vstyle=[TD_B, TD_C, TD_C, TD_L])
def mini_sec2(text, color, w):
t = Table([[Paragraph(text, TH_L)]], colWidths=[w])
t.setStyle(TableStyle([("BACKGROUND",(0,0),(-1,-1),color),*tpad(None)]))
return t
b1 = Table([[mini_sec2("⑤ RELAPSE vs RECRUDESCENCE", PURPLE, D1)],[rv_tbl]], colWidths=[D1])
b2 = Table([[mini_sec2("⑥ BLACKWATER FEVER", HexColor("#880E4F"), D2)],[bw_tbl]], colWidths=[D2])
b3 = Table([[mini_sec2("⑦ LAB DIAGNOSIS", BLUE, D3)],[dx_tbl]], colWidths=[D3])
b4 = Table([[mini_sec2("⑧ CHEMOPROPHYLAXIS", GREEN, D4)],[cx_tbl]], colWidths=[D4])
for b in [b1,b2,b3,b4]:
b.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),0),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0)]))
row3 = Table([[b1,b2,b3,b4]], colWidths=[D1+GAP, D2+GAP, D3+GAP, D4])
row3.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),2),
("TOPPADDING",(0,0),(-1,-1),0),("BOTTOMPADDING",(0,0),(-1,-1),0),
("VALIGN",(0,0),(-1,-1),"TOP")]))
story += [row3, sp(3)]
# ══ ROW 4: High-yield exam tips (two rows of 4) ════════════════════════════════
story += [sec("⑨ HIGH-YIELD EXAM TIPS ★ = Most frequently asked", HexColor("#37474F")), sp(1)]
tips = [
("★ Gametocyte shape", "Crescent/banana = P. falciparum ONLY (pathognomonic). All others = round.", LRED, RED),
("★ Schüffner's dots", "P. vivax (pink stippling). James's dots = P. ovale. Maurer's clefts = Pf. Ziemann's = P. malariae.", LYELLOW, YELLOW),
("★ Peripheral schizont", "Absent in Pf (sequestered). If you see ONLY rings → think P. falciparum.", LORANGE, ORANGE),
("★ Capillary blood (Pf)","Mature Pf sequestered in skin capillaries via PfEMP-1. Fingertip blood has MORE parasites.", LBLUE, BLUE),
("★ Relapse drug", "Primaquine kills hypnozoites. ALWAYS check G6PD first. Contraindicated in pregnancy & G6PD deficiency.", LGREEN, GREEN),
("★ Pf treatment", "ACT (Artemether-Lumefantrine). IV Artesunate for severe malaria (WHO 2011). NOT chloroquine (resistant).", LRED, RED),
("★ Nephrotic syndrome", "P. malariae → immune-complex GN. Only species causing nephrotic syndrome.", LPURP, PURPLE),
("★ BWF mortality", "20-30%. STOP quinine. Cola/black urine with NO RBCs on microscopy (dipstick +ve).", LORANGE, ORANGE),
]
TW = (USE_W - 3*GAP) / 4
tip_cells = []
for label, text, bg, border in tips:
inner = Table([[Paragraph(f"<b>{label}:</b> {text}", NOTE)]], colWidths=[TW-4])
inner.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),bg),
("BOX",(0,0),(-1,-1),0.8,border),
("TOPPADDING",(0,0),(-1,-1),3),("BOTTOMPADDING",(0,0),(-1,-1),3),
("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),3),
]))
tip_cells.append(inner)
# arrange 4 per row
tip_row1 = Table([[tip_cells[0], tip_cells[1], tip_cells[2], tip_cells[3]]],
colWidths=[TW+GAP, TW+GAP, TW+GAP, TW])
tip_row2 = Table([[tip_cells[4], tip_cells[5], tip_cells[6], tip_cells[7]]],
colWidths=[TW+GAP, TW+GAP, TW+GAP, TW])
for r in [tip_row1, tip_row2]:
r.setStyle(TableStyle([("LEFTPADDING",(0,0),(-1,-1),0),("RIGHTPADDING",(0,0),(-1,-1),2),
("TOPPADDING",(0,0),(-1,-1),1),("BOTTOMPADDING",(0,0),(-1,-1),1),
("VALIGN",(0,0),(-1,-1),"TOP")]))
story += [tip_row1, sp(2), tip_row2, sp(3)]
# ══ FOOTER ════════════════════════════════════════════════════════════════════
foot_data = [
Paragraph("Ref: Henry's Clinical Diagnosis | Tietz Laboratory Medicine 7th Ed. | Goldman-Cecil Medicine | "
"Quick Compendium Clinical Pathology 5th Ed. | Katzung Pharmacology 16th Ed. "
"| Bangladesh vector: An. dirus / An. philippinensis | CHT = ~95% of Bangladesh malaria burden", FOOT)
]
foot_tbl = Table([foot_data], colWidths=[USE_W])
foot_tbl.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,-1),HexColor("#ECEFF1")),
("BOX",(0,0),(-1,-1),0.4,GREY),
("TOPPADDING",(0,0),(-1,-1),2),("BOTTOMPADDING",(0,0),(-1,-1),2),
("LEFTPADDING",(0,0),(-1,-1),4),("RIGHTPADDING",(0,0),(-1,-1),4),
]))
story.append(foot_tbl)
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"Cheat sheet created: {OUTPUT}")
cd /tmp/workspace/amcb-malaria-guide && python cheatsheet.py 2>&1
ls -lh /tmp/workspace/amcb-malaria-guide/AMCB_Plasmodium_CheatSheet.pdf
AMCB Plasmodium CheatSheet
PDF Document · PDF
| Section | Content |
|---|---|
| ① Species Comparison | Full 14-row table: P. falciparum vs P. vivax vs P. malariae vs P. ovale — RBC size, stippling, gametocyte shape, complications, treatment |
| ② Life Cycle | 7-stage compact table (Sporozoite → Hepatic → Erythrocytic → Gametocyte → Mosquito sporogony) |
| ③ Virulence Factors | PfEMP-1, rosetting, knobs, hemozoin, antigenic variation — each with effect |
| ④ Pernicious Malaria | 10 complications with mechanism (cerebral malaria → DIC → placental malaria) |
| ⑤ Relapse vs Recrudescence | Side-by-side: origin, species, timing, prevention |
| ⑥ Blackwater Fever | Trigger → pathogenesis → urine finding → treatment → mortality |
| ⑦ Lab Diagnosis | Thick/thin film, RDT (HRP-2, pLDH, Aldolase), PCR, capillary blood rule |
| ⑧ Chemoprophylaxis | 5 drugs with dose, start time, indication |
| ⑨ 8 High-yield Tips (★) | Color-coded cards: gametocyte shape, stippling, peripheral schizont absence, capillary blood reason, primaquine/G6PD, ACT, nephrotic syndrome, BWF mortality |