Ans all the questions serially in English according to medical parasitology with popular reference book All ans serially also describe in bangla
| Direction | Form Transmitted | Stage |
|---|---|---|
| Human → Mosquito | Gametocytes (microgametocyte & macrogametocyte) | Sexual stage |
| Mosquito → Human | Sporozoites | Pre-erythrocytic stage |
| Feature | Relapse (Vivax) | Recrudescence (Falciparum) |
|---|---|---|
| Origin | Liver (hypnozoites) | Blood (residual parasites) |
| Species | P. vivax, P. ovale | P. falciparum, P. malariae |
| Hypnozoites | Present | Absent |
| Prevention | Primaquine | Adequate blood-stage treatment |
| Nature | Fresh cycle from liver | Continuation of blood cycle |
| Period | Months to years | Days to weeks |
| Drug | Regimen | Indication |
|---|---|---|
| Chloroquine | 300 mg base weekly | Chloroquine-sensitive areas only |
| Atovaquone-Proguanil (Malarone) | 1 tablet daily | Chloroquine-resistant areas (preferred) |
| Doxycycline | 100 mg daily | Chloroquine-resistant areas; cheap |
| Mefloquine | 250 mg weekly (start 2 wks before) | Areas with multi-drug resistance |
| Primaquine | 30 mg base daily | P. vivax endemic areas; G6PD normal only |
| Feature | P. vivax (Benign Tertian) | P. falciparum (Malignant Tertian) |
|---|---|---|
| Distribution | Tropical + temperate zones | Mainly tropical zones |
| RBC Preference | Reticulocytes (young RBCs) | All ages of RBCs |
| RBC Enlargement | Yes - enlarged | No enlargement |
| Parasite/RBC | Usually 1 | Often multiple rings/RBC |
| % Parasitemia | <1-2% (low) | Up to 30% (very high) |
| Fever Periodicity | Every 48 hrs (tertian) | Every 36-48 hrs (irregular at first) |
| Clinical Severity | Mild to moderate ("benign") | Severe, life-threatening ("malignant") |
| Complications | Splenic rupture (rare) | Cerebral malaria, renal failure, ARDS, severe anemia, hypoglycemia, blackwater fever |
| Hypnozoites | Present (relapse) | Absent (no relapse) |
| Relapse/Recrudescence | Relapse (weeks-years) | Recrudescence (days-weeks) |
| Gametocyte Shape | Round/oval | Crescent/banana-shaped (diagnostic!) |
| Drug Sensitivity | Chloroquine sensitive (mostly) | Often chloroquine RESISTANT |
| Treatment | Chloroquine + Primaquine | Artemisinin-based Combination Therapy (ACT) |
| Mortality | Low | High (can be >25% untreated) |
| Diagnostic Feature | P. vivax | P. falciparum |
|---|---|---|
| Thick Film | Present at all stages | Only ring forms in peripheral blood |
| Thin Film - RBC | Enlarged, pale (Schüffner's dots) | Normal size, no enlargement |
| Trophozoite | Amoeboid, irregular | Delicate ring, double chromatin dot |
| Schizont | Seen in peripheral blood, 12-24 merozoites | Rarely seen in peripheral blood (sequestered) |
| Gametocyte | Round/oval, fills RBC | Crescent/banana-shaped - ONLY P. falciparum |
| Stippling | Schüffner's dots (pink dots) | Maurer's clefts (clefts, not true dots) |
| Multiple infection/RBC | Rare | Common |
| RDT | pLDH or aldolase positive | HRP-2 + pLDH + aldolase positive |
| Blood Sample | Venous blood acceptable | Capillary blood preferred (see Q10) |
| Accolé (appliqué) forms | Absent | Present (ring at cell margin) |
| বৈশিষ্ট্য | P. vivax | P. falciparum |
|---|---|---|
| জ্বরের ধরন | প্রতি ৪৮ ঘন্টায় (Benign Tertian) | ৩৬-৪৮ ঘন্টায় (Malignant Tertian) |
| গুরুতরতা | মৃদু থেকে মধ্যম | অত্যন্ত গুরুতর |
| জটিলতা | কম (Splenic rupture বিরল) | Cerebral malaria, Renal failure, ARDS, Hypoglycemia |
| Hypnozoite | আছে (Relapse ঘটায়) | নেই |
| RBC | বড় হয়, Schüffner's dots | স্বাভাবিক আকার, কোনো stippling নয় (Maurer's cleft) |
| Gametocyte | গোলাকার | কলার/ক্রিসেন্ট আকৃতির |
| Peripheral blood | সব ধাপ দেখা যায় | শুধু Ring form (Sequestration-এর কারণে) |
| RDT | pLDH/Aldolase | HRP-2 সবচেয়ে ভালো |
| চিকিৎসা | Chloroquine + Primaquine | ACT (Artemether-Lumefantrine) |
| Question | Key Reference |
|---|---|
| Q1-2 | Henry's Clinical Diagnosis (Block 32); Tietz Lab Medicine 7th Ed. (Block 38) |
| Q3,6 | Goldman-Cecil Medicine; Tietz 7th Ed. |
| Q4 | Quick Compendium of Clinical Pathology 5th Ed.; Henry's Clinical Diagnosis |
| Q5 | Katzung's Basic & Clinical Pharmacology 16th Ed. |
| Q7,10 | Henry's Clinical Diagnosis; Tietz 7th Ed. |
| Q8,9 | Goldman-Cecil Medicine; Katzung's Pharmacology 16th Ed. |
Popular Reference Books Used: Chatterjee's Parasitology framework; Henry's Clinical Diagnosis and Management by Laboratory Methods; Tietz Textbook of Laboratory Medicine 7th Edition; Goldman-Cecil Medicine International Edition; Quick Compendium of Clinical Pathology 5th Ed.; Katzung's Basic and Clinical Pharmacology 16th Ed.All 10 questions from Army Medical College Bogura - Parasitology Card 05 (Item 08: Sporozoa-Plasmodium spp.) have been answered in full, both in English and Bengali (Bangla), based on authoritative medical parasitology references including Henry's Clinical Diagnosis, Tietz Textbook of Laboratory Medicine 7th Ed., Goldman-Cecil Medicine, Quick Compendium of Clinical Pathology 5th Ed., and Katzung's Pharmacology 16th Ed. Here is a quick recap of the key points per question:
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 |