attachment
attachment

Ans all the questions serially in English according to medical parasitology with popular reference book All ans serially also describe in bangla

Reading File
Finding Sources
Finding Sources
Finding Sources
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
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:

Quick Summary:
  1. Q1 - Bangladesh malaria is concentrated in Chittagong Hill Tracts (~95% cases); P. falciparum & P. vivax dominant; life cycle: Sporozoite → Liver (Hepatic schizogony) → RBC (Erythrocytic schizogony) → Gametocyte → Mosquito (Sporogony) → Sporozoites.
  2. Q2 - Vector: Female Anopheles; Human→Mosquito: Gametocytes; Mosquito→Human: Sporozoites.
  3. Q3 - Virulence factors of P. falciparum: PfEMP-1 (Sequestration/Cytoadherence), Rosetting, all-age RBC invasion, Knob formation, Hemozoin (TNF-α induction), Antigenic variation → Cerebral malaria, severe anemia, ARDS, renal failure.
  4. Q4 - Relapse (P. vivax): Hypnozoites reactivate from liver months-years later. Recrudescence (P. falciparum): Residual blood-stage parasites below detection threshold re-emerge. Only Primaquine kills hypnozoites.
  5. Q5 - Blackwater Fever: Multiple P. falciparum attacks + Quinine use → Quinine acts as hapten → Immune hemolysis → Hemoglobinuria → black urine → Acute Renal Failure. Mortality 20-30%.
  6. Q6 - Anaemia: RBC rupture, immune hemolysis, hypersplenism, dyserythropoiesis. Pernicious malaria: Cerebral malaria, ARDS, renal failure, hypoglycemia, DIC, algid malaria.
  7. Q7 - Diagnosis: Thick+Thin Giemsa smear (Gold Standard); RDT detects HRP-2 (P. falciparum), pLDH (all species), Aldolase (all species) - result in 15-20 min; PCR highest sensitivity but not for STAT use.
  8. Q8 - Prevention: LLIN, DEET, IRS, larval control. Chemoprophylaxis: Atovaquone-proguanil or Doxycycline (resistant areas like Bangladesh CHT); start before travel, continue 4 weeks after return.
  9. Q9 - P. vivax: benign, RBC enlarged+Schüffner's dots, round gametocytes, relapse, chloroquine+primaquine. P. falciparum: malignant, normal RBC, crescent gametocytes, sequestration, recrudescence, ACT treatment.
  10. Q10 - Capillary blood better for P. falciparum because mature parasites sequester in deep skin capillaries of fingertips via PfEMP-1 → higher parasitemia in fingertip blood; venous blood only has ring forms. Mature schizonts almost never seen in peripheral blood.

Create a study guide PDF comparing Plasmodium species features for AMCB exam

Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || echo "workspace empty or missing"

Running Command

mkdir -p /tmp/workspace/amcb-malaria-guide

Writing File

~/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 &amp; 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}")
Running Command

cd /tmp/workspace/amcb-malaria-guide && python build_pdf.py 2>&1

Running Command

ls -lh /tmp/workspace/amcb-malaria-guide/AMCB_Plasmodium_Study_Guide.pdf

Your study guide PDF is ready. Here it is:

AMCB Plasmodium Study Guide

PDF Document · PDF


What's inside (10 sections):
SectionContent
1. Species at a GlanceFull comparison table: P. falciparum, P. vivax, P. malariae, P. ovale - 15 features side by side
2. Life CycleAll 6 stages from sporozoite injection → salivary glands, with locations and key events
3. Microscopy & DiagnosisRBC morphology, stippling types, gametocyte shapes, peripheral blood findings; thick/thin smear, RDT, PCR, QBC comparison; RDT antigen table (HRP-2, pLDH, Aldolase)
4. Virulence FactorsPfEMP-1, sequestration, rosetting, all-age RBC invasion, knobs, hemozoin, antigenic variation - each with mechanism and consequence
5. Pernicious Malaria10 complications (cerebral malaria, ARDS, blackwater fever, hypoglycemia, DIC, algid malaria, etc.) with pathogenesis and clinical thresholds
6. Relapse vs RecrudescenceSide-by-side comparison table with species, mechanism, timing, prevention
7. Treatment & ProphylaxisTreatment by species/severity; chemoprophylaxis drug table with timing and Bangladesh-specific guidance
8. Quick RecallFALCIPARUM and VIVAX mnemonics; blackwater fever summary box; anaemia mechanisms table
9. PreventionPersonal → Community → National → Vaccine levels
10. Exam Checklist12 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

এখানে সব ১০টি প্রশ্নের সংক্ষিপ্ত ও সহজ ইংরেজি উত্তর এবং বাংলা বিবরণ দেওয়া হলো:

AMCB-08: Sporozoa — Plasmodium spp.


Q1. Geographic distribution of malaria in Bangladesh + Life cycle stages

✅ English (Short & Easy):

Distribution in Bangladesh:
  • Malaria is mainly found in Chittagong Hill Tracts (CHT) — Rangamati, Khagrachari, Bandarban
  • About 95% of all cases come from CHT
  • Two main species: P. falciparum (70-80%) and P. vivax (20-30%)
  • Vector: Anopheles dirus mosquito
Life Cycle Stages:
In Human (Asexual):
  1. Mosquito injects Sporozoites → enter liver
  2. Liver: Hepatic schizogony → Hepatic schizonts → Merozoites
  3. Merozoites enter RBCs → Ring → Trophozoite → Schizont → Merozoites (erythrocytic schizogony)
  4. RBC rupture → Paroxysm (fever, chills, sweating)
  5. Some merozoites → Gametocytes (male + female)
In Mosquito (Sexual): 6. Mosquito ingests gametocytes → Exflagellation → Zygote → Ookinete → Oocyst 7. Oocyst ruptures → Sporozoites → salivary glands → back to human
P. vivax forms Hypnozoites in liver → causes relapse later

🇧🇩 বাংলা বিবরণ:

বাংলাদেশে ম্যালেরিয়ার বিস্তার: বাংলাদেশে ম্যালেরিয়া প্রধানত চট্টগ্রাম পার্বত্য অঞ্চলে (রাঙামাটি, খাগড়াছড়ি, বান্দরবান) সীমাবদ্ধ। মোট কেসের প্রায় ৯৫% এই অঞ্চল থেকে আসে। P. falciparum (৭০-৮০%) ও P. vivax (২০-৩০%) প্রধান প্রজাতি। ভেক্টর মশা Anopheles dirus পাহাড়ি-বনাঞ্চলে বাস করে।
জীবনচক্রের ধাপ:
মানবদেহে (অযৌন পর্যায়):
  • মশা কামড়ায় → Sporozoite রক্তে প্রবেশ করে
  • যকৃতে যায় → Hepatic schizogonyMerozoite তৈরি
  • Merozoite → RBC তে ঢোকে → Ring → Trophozoite → Schizont → আবার Merozoite
  • RBC ফেটে যায় → জ্বর, কাঁপুনি, ঘাম (Paroxysm)
  • কিছু Merozoite → Gametocyte (যৌন রূপ) তৈরি করে
মশার দেহে (যৌন পর্যায়):
  • মশা Gametocyte গ্রহণ করে → Zygote → Ookinete → Oocyst → Sporozoite তৈরি → লালাগ্রন্থিতে → আবার মানুষে প্রবেশ
বিশেষ দ্রষ্টব্য: P. vivax যকৃতে Hypnozoite তৈরি করে যা পরে Relapse ঘটায়।

Q2. Vector and form transmitted human ↔ mosquito

✅ English (Short & Easy):

Vector: Female Anopheles mosquito (males don't bite)
DirectionForm Transmitted
Human → MosquitoGametocytes (sexual stage)
Mosquito → HumanSporozoites (infective stage)
  • P. falciparum gametocytes are crescent/banana-shaped (diagnostic!)

🇧🇩 বাংলা বিবরণ:

ভেক্টর: স্ত্রী Anopheles মশা (পুরুষ মশা কামড়ায় না)
সংক্রমণের রূপ:
  • মানুষ → মশায়: মশা রক্ত খাওয়ার সময় Gametocyte গ্রহণ করে। এটি যৌন রূপ (Sexual stage)।
  • মশা → মানুষে: মশা কামড়ানোর সময় লালার মাধ্যমে Sporozoite মানব রক্তে প্রবেশ করে। এটি সংক্রামক রূপ (Infective stage)।
মনে রাখো: P. falciparum-এর Gametocyte দেখতে কলার মতো/Crescent আকৃতির — এটি শুধুমাত্র এই প্রজাতিতেই দেখা যায়।

Q3. Virulence factors of P. falciparum & pathogenesis of malignant tertian malaria

✅ English (Short & Easy):

Virulence Factors:
FactorRole
PfEMP-1 (var gene)Binds RBCs to capillary walls (Sequestration) → organ ischemia
RosettingInfected RBCs stick to normal RBCs → blocks blood flow
All-age RBC invasionInvades reticulocytes AND old RBCs → very high parasitemia (up to 30%)
Knob formationHelps RBCs stick to blood vessel walls
HemozoinTriggers TNF-α, IL-1 → high fever, inflammation
Antigenic variationSwitches surface proteins → evades immune system
High merozoite outputUp to 32 merozoites/schizont → rapid RBC destruction
Pathogenesis of Malignant Tertian Malaria:
  • Sequestration → brain capillary blockage → Cerebral malaria (coma, seizures)
  • Mass hemolysis → Severe anemia
  • Cytokines → lung damage → ARDS
  • Renal hypoperfusion → Renal failure
  • Quinine + parasite → Hypoglycemia
  • Hemoglobin in urine → Blackwater fever

🇧🇩 বাংলা বিবরণ:

P. falciparum-এর ভাইরুলেন্স ফ্যাক্টর:
১. PfEMP-1 ও Sequestration: সংক্রমিত RBC গভীর রক্তনালীতে আটকে যায় → মস্তিষ্ক, কিডনি, লিভারে রক্ত চলাচল বন্ধ হয়।
২. Rosetting: সংক্রমিত RBC সুস্থ RBC-এর সাথে জড়িয়ে যায় → আরও বেশি বাধা তৈরি হয়।
৩. সব বয়সের RBC আক্রমণ: P. vivax শুধু তরুণ RBC আক্রমণ করে, কিন্তু P. falciparum সব বয়সের RBC আক্রমণ করে → Parasitemia ৩০% পর্যন্ত হতে পারে।
৪. Hemozoin: RBC ভাঙার সময় বের হয় → TNF-α, IL-1 নিঃসরণ → উচ্চ জ্বর ও প্রদাহ।
৫. Antigenic Variation: Surface protein বদলায় → ইমিউন সিস্টেম চিনতে পারে না → দীর্ঘস্থায়ী সংক্রমণ।
Malignant Tertian Malaria-র পরিণতি:
  • Cerebral Malaria → কোমা, খিঁচুনি
  • Severe Anemia → Hb কমে যায়
  • ARDS → শ্বাসকষ্ট
  • Acute Renal Failure → প্রস্রাব কমে
  • Hypoglycemia → রক্তে সুগার কমে
  • Blackwater Fever → কালো প্রস্রাব

Q4. Relapse of vivax vs Recrudescence of falciparum

✅ English (Short & Easy):

RELAPSE (P. vivax):
  • Some sporozoites stay dormant in liver as Hypnozoites
  • After weeks/months/years → they reactivate → new RBC infection → new clinical attack
  • This is a fresh cycle from the liver
  • Prevented by Primaquine (only drug that kills hypnozoites)
  • P. falciparum has NO hypnozoites → NO relapse
RECRUDESCENCE (P. falciparum):
  • No hypnozoites; instead, a small number of blood-stage parasites survive treatment (hidden by sequestration)
  • When immunity drops or drug levels fall → they multiply again
  • This is continuation of the same blood-stage infection — NOT from liver
RelapseRecrudescence
OriginLiver (hypnozoites)Blood
SpeciesP. vivax, P. ovaleP. falciparum, P. malariae
PreventionPrimaquineAdequate blood-stage treatment
TimingWeeks to yearsDays to weeks

🇧🇩 বাংলা বিবরণ:

Relapse (P. vivax): P. vivax sporozoite যকৃতে ঢোকার পর কিছু পরজীবী Hypnozoite হিসেবে সুপ্ত অবস্থায় থাকে। সপ্তাহ বা মাস পরে এরা সক্রিয় হয় → নতুন করে RBC আক্রমণ করে → আবার রোগ দেখা দেয়। এটাই Relapse। শুধু Primaquine এই Hypnozoite মারতে পারে।
Recrudescence (P. falciparum): P. falciparum-এ কোনো Hypnozoite নেই। কিন্তু অপর্যাপ্ত চিকিৎসায় রক্তের ভেতর কিছু পরজীবী বেঁচে থাকে (Sequestration-এর কারণে ধরা পড়ে না)। পরে এরা আবার বাড়ে → রোগ ফিরে আসে। এটাই Recrudescence — যকৃত থেকে নয়, রক্ত থেকেই।
সহজ পার্থক্য: Relapse = যকৃত থেকে নতুন আক্রমণ | Recrudescence = রক্তের পুরনো পরজীবীর পুনরুত্থান।

Q5. Blackwater fever — condition & pathogenesis

✅ English (Short & Easy):

When It Occurs:
  • Repeated P. falciparum infections in a semi-immune person
  • Use of Quinine in a sensitized patient (most common trigger)
  • G6PD deficiency + oxidant drugs (e.g., primaquine)
Pathogenesis (Step by Step):
  1. Repeated malaria → patient becomes sensitized
  2. Quinine acts as a hapten → binds RBC surface → antibody forms against quinine-RBC complex
  3. Re-exposure to quinine → antigen-antibody reaction on RBC
  4. Complement activated → MAC formation → intravascular hemolysis (massive)
  5. Free hemoglobin → blood (hemoglobinemia) → filtered by kidney → hemoglobinuria
  6. Dark/black urine (cola colored) — gives the name "Blackwater"
  7. Hemoglobin blocks renal tubules → Acute Tubular Necrosis → Renal Failure
Key: Urine dipstick +ve for blood, but NO RBCs on microscopy (pure hemoglobinuria) Mortality: 20-30% if untreated. STOP quinine immediately.

🇧🇩 বাংলা বিবরণ:

Blackwater Fever কখন হয়:
  • P. falciparum ম্যালেরিয়ার বারবার আক্রমণের পর
  • Quinine ওষুধের ব্যবহারে (সবচেয়ে সাধারণ কারণ)
  • G6PD deficiency রোগীতে Primaquine ব্যবহারে
রোগ তৈরির ধাপ (Pathogenesis): ১. বারবার ম্যালেরিয়া → রোগী সংবেদনশীল হয়ে পড়ে ২. Quinine হ্যাপটেন হিসেবে RBC-এর সাথে যুক্ত হয় → Antibody তৈরি হয় ৩. আবার Quinine দিলে → Antigen-Antibody reaction → Complement সক্রিয় ৪. Intravascular Hemolysis (ব্যাপক RBC ভাঙন) ৫. মুক্ত Hemoglobin → রক্তে → কিডনিতে ছাঁকা হয় → Hemoglobinuria ৬. প্রস্রাব কালো/কোলার মতো রঙ হয় → "Blackwater" নাম ৭. Renal tubule ক্ষতিগ্রস্ত → Acute Renal Failure
করণীয়: Quinine বন্ধ করো, IV fluid দাও, প্রয়োজনে Dialysis। মৃত্যুহার ২০-৩০%।

Q6. Anaemia in Plasmodium + Pernicious malaria

✅ English (Short & Easy):

Causes of Anaemia:
MechanismHow
Direct hemolysisRBC ruptures every 48-72 h when schizont bursts
Innocent bystander hemolysisImmune complexes destroy healthy RBCs too
HypersplenismEnlarged spleen removes too many RBCs
DyserythropoiesisTNF-α suppresses bone marrow → less RBC production
Folate deficiencyHigh cell turnover depletes folate
Pernicious Malaria — Basic Events: (P. falciparum only — "Pernicious" = dangerous/severe)
ComplicationSimple Explanation
Cerebral malariaRBCs block brain vessels → coma, seizures (GCS ≤9)
Severe anemiaHb <5 g/dL; massive hemolysis
ARDSCytokines damage lungs → fluid fills air sacs
Acute renal failureReduced blood flow to kidneys + hemoglobin blockage
HypoglycemiaParasite eats glucose + Quinine boosts insulin
Blackwater feverHemoglobin in urine → black urine
Algid malariaBacterial sepsis + circulatory shock
DICClotting system failure → bleeding
HyperpyrexiaTemp >40°C from TNF-α, IL-1

🇧🇩 বাংলা বিবরণ:

ম্যালেরিয়ায় Anaemia কেন হয়:
১. Direct Hemolysis: প্রতি ৪৮-৭২ ঘন্টায় Schizont ফেটে RBC নষ্ট হয়। ২. Innocent Bystander Hemolysis: Immune complex সুস্থ RBC-তেও জমে → সেগুলোও ধ্বংস হয়। ৩. Hypersplenism: বড় প্লীহা সুস্থ RBC-ও বেশি বেশি ধ্বংস করে। ৪. Dyserythropoiesis: TNF-α অস্থি মজ্জায় RBC তৈরিতে বাধা দেয়। ৫. Folate ঘাটতি: দ্রুত কোষ বিভাজনে Folate কমে যায়।
Pernicious Malaria-র মূল ঘটনাগুলো: (শুধুমাত্র P. falciparum-এ হয়)
  • Cerebral Malaria: মস্তিষ্কের রক্তনালী বন্ধ → কোমা, খিঁচুনি — সবচেয়ে মারাত্মক
  • Severe Anemia: Hb <5 g/dL
  • ARDS: ফুসফুসে পানি জমে → শ্বাসকষ্ট
  • Acute Renal Failure: কিডনিতে রক্তপ্রবাহ কমে
  • Hypoglycemia: পরজীবী glucose খায় + Quinine ইনসুলিন বাড়ায়
  • Blackwater Fever: কালো প্রস্রাব
  • Algid Malaria: ব্যাকটেরিয়া সংক্রমণ + Shock
  • DIC: রক্ত জমাট বাঁধার সমস্যা

Q7. Laboratory diagnosis of malaria + What is RDT?

✅ English (Short & Easy):

Step 1 — Microscopy (Gold Standard):
FilmPurposeStainSensitivity
Thick filmDetection (screening) — RBCs lysed, parasites concentratedGiemsa5-10 parasites/µL
Thin filmSpecies identification — RBC morphology preservedGiemsa/Wright100-200 parasites/µL
Key morphological clues:
  • P. falciparum: Ring only, accolé forms, crescent gametocytes, Maurer's clefts
  • P. vivax: Enlarged RBC, amoeboid trophozoite, Schüffner's dots
  • P. malariae: Band-form trophozoite, Ziemann's stippling
  • P. ovale: Oval/fimbriated RBC, James's dots
Step 2 — RDT (Rapid Diagnostic Test):
  • Detects malaria antigens in blood using immunochromatographic strips
  • Result in 15-20 minutes, no microscope needed
AntigenDetects
HRP-2P. falciparum only
pLDHAll species
AldolaseAll species
  • Limitation: HRP-2 stays positive 3-4 weeks after treatment (false +ve)
Other Methods:
  • PCR: Most sensitive; for species confirmation & drug resistance — NOT for emergency
  • QBC: Fluorescent staining; fast but needs centrifuge
  • Serology (ELISA): Epidemiology only, not for acute diagnosis

🇧🇩 বাংলা বিবরণ:

ল্যাবরেটরিতে ম্যালেরিয়া নির্ণয়:
মাইক্রোস্কপি (সোনার মান/Gold Standard):
  • Thick Film (পুরু স্মিয়ার): পরজীবী খোঁজার জন্য — বেশি Sensitive। Giemsa দিয়ে রং করা হয়।
  • Thin Film (পাতলা স্মিয়ার): প্রজাতি চেনার জন্য — RBC-র আকার ও পরজীবীর আকৃতি দেখা যায়।
RDT (Rapid Diagnostic Test) কী: RDT হলো একটি দ্রুত পরীক্ষা পদ্ধতি যেখানে রক্তের একটি ফোঁটা Test Strip-এ লাগালে ১৫-২০ মিনিটে ফলাফল পাওয়া যায়। এটি রক্তে ম্যালেরিয়ার Antigen শনাক্ত করে।
তিনটি Antigen শনাক্ত করে:
  • HRP-2: শুধু P. falciparum ধরে
  • pLDH ও Aldolase: সব প্রজাতি ধরে
সুবিধা: মাইক্রোস্কোপ লাগে না, প্রত্যন্ত অঞ্চলে ব্যবহার করা যায়। সীমাবদ্ধতা: HRP-2 চিকিৎসার পরেও ৩-৪ সপ্তাহ Positive থাকতে পারে।

Q8. Prevention of malaria + Chemoprophylaxis

✅ English (Short & Easy):

Prevention:
LevelMethod
PersonalInsecticide-treated bed nets (LLIN), DEET repellent, long clothing at dusk
IndoorIndoor Residual Spraying (IRS) with pyrethroid
EnvironmentalRemove stagnant water, drain swamps, use larvicides (Bti), Gambusia fish
VaccineRTS,S (Mosquirix) — WHO approved 2021; ~30-40% efficacy; for sub-Saharan Africa children
Chemoprophylaxis:
When: Before traveling to endemic area → throughout stay → 4 weeks after return
DrugDoseArea
Atovaquone-Proguanil1 tab dailyPreferred — resistant areas (Bangladesh CHT)
Doxycycline100 mg dailyResistant areas; cheap; contraindicated in pregnancy
Mefloquine250 mg weeklyMulti-drug resistant areas
Chloroquine300 mg weeklySensitive areas only (mostly obsolete)
Primaquine30 mg dailyP. vivax areas; check G6PD first

🇧🇩 বাংলা বিবরণ:

ম্যালেরিয়া প্রতিরোধ:
ব্যক্তিগত পর্যায়:
  • Insecticide-treated মশারি (LLIN) ব্যবহার — সবচেয়ে কার্যকর
  • DEET যুক্ত মশা তাড়ানো ক্রিম ব্যবহার
  • সন্ধ্যার পর লম্বা হাতার পোশাক পরা
পরিবেশ নিয়ন্ত্রণ:
  • জমা পানি দূর করা (মশার প্রজননস্থল)
  • Larvicides (Bti, Temephos) ব্যবহার
  • Gambusia মাছ — মশার লার্ভা খায় (Biological control)
  • ঘরের ভেতর কীটনাশক স্প্রে (IRS)
Chemoprophylaxis (ওষুধ দ্বারা প্রতিরোধ):
কখন দেওয়া হয়: Endemic অঞ্চলে যাওয়ার আগে শুরু করে, সেখানে থাকাকালীন এবং ফেরার ৪ সপ্তাহ পর পর্যন্ত চলবে।
কোন ওষুধ:
  • Atovaquone-Proguanil (Malarone): বাংলাদেশ CHT-তে সবচেয়ে ভালো (Resistant এলাকায়), প্রতিদিন
  • Doxycycline: সস্তা, প্রতিদিন, Resistant এলাকায় — গর্ভাবস্থায় নিষিদ্ধ
  • Mefloquine: Multi-drug resistant এলাকায়, সাপ্তাহিক
  • Chloroquine: শুধু sensitive এলাকায়, সাপ্তাহিক
  • Primaquine: P. vivax প্রতিরোধে, G6PD test করে নিতে হবে

Q9. Compare P. vivax vs P. falciparum (clinical features & diagnosis)

✅ English (Short & Easy):

FeatureP. vivaxP. falciparum
DiseaseBenign Tertian MalariaMalignant Tertian Malaria
Fever cycleEvery 48 hEvery 36-48 h (irregular first)
SeverityMild-moderateSevere, life-threatening
RBC invadedReticulocytes onlyAll ages
RBC sizeEnlargedNormal
Max parasitemia<2%Up to 30%
ComplicationsRare (splenic rupture)Cerebral malaria, renal failure, ARDS, hypoglycemia
HypnozoitesPresent → relapseAbsent → no relapse
RecurrenceRelapse (months-years)Recrudescence (days-weeks)
StipplingSchüffner's dotsMaurer's clefts
GametocyteRound/ovalCrescent/banana
Schizont in peripheral bloodVisibleRarely seen (sequestered)
Multiple rings/RBCRareCommon
DrugChloroquine + PrimaquineACT (Artemether-Lumefantrine)
RDT antigenpLDH, AldolaseHRP-2 + pLDH + Aldolase

🇧🇩 বাংলা বিবরণ:

P. vivax বনাম P. falciparum — তুলনামূলক পার্থক্য:
ক্লিনিক্যাল পার্থক্য:
  • P. vivax: জ্বর প্রতি ৪৮ ঘণ্টায়, মৃদু থেকে মধ্যম, জটিলতা কম — তাই "Benign Tertian"
  • P. falciparum: জ্বর ৩৬-৪৮ ঘণ্টায়, অত্যন্ত গুরুতর, জটিলতা বেশি — তাই "Malignant Tertian"
জটিলতার পার্থক্য:
  • P. vivax-এ মূলত Splenic rupture (বিরল)
  • P. falciparum-এ Cerebral malaria, Renal failure, ARDS, Hypoglycemia, Blackwater fever
রোগ নির্ণয়ের পার্থক্য:
  • P. vivax: RBC বড় হয়, Schüffner's dots দেখা যায়, সব Stage peripheral blood-এ থাকে, গোলাকার Gametocyte
  • P. falciparum: RBC স্বাভাবিক আকার, Maurer's clefts, শুধু Ring form peripheral blood-এ, কলার আকৃতির Gametocyte, একটি RBC-তে একাধিক Ring — এগুলো সব P. falciparum-এর বৈশিষ্ট্য
চিকিৎসার পার্থক্য:
  • P. vivax: Chloroquine + Primaquine (Hypnozoite মারতে)
  • P. falciparum: ACT (Artemether-Lumefantrine) — Chloroquine কাজ করে না

Q10. Why capillary blood is more appropriate to detect P. falciparum?

✅ English (Short & Easy):

One word answer: SEQUESTRATION
Explanation:
  1. Mature P. falciparum parasites (trophozoites + schizonts) express PfEMP-1 on infected RBC surface
  2. PfEMP-1 binds to endothelial receptors (CD36, ICAM-1) in deep capillaries of organs (brain, kidney, skin of fingers)
  3. So mature stages are trapped/sequestered in deep vessels — they don't circulate freely
  4. Only ring forms (early stage) appear in peripheral/venous blood
  5. But fingertip capillaries (cutaneous capillaries) have many sequestered parasitized RBCs concentrated there
  6. Therefore, capillary (fingertip) blood has MORE parasites → higher sensitivity
Diagnostic clue: If you see only ring forms and no schizonts in a blood smear → think P. falciparum
For P. vivax / P. malariae / P. ovale: All stages circulate freely → venous blood = capillary blood (no difference)

🇧🇩 বাংলা বিবরণ:

কেন P. falciparum শনাক্তে আঙুলের রক্ত (Capillary Blood) বেশি ভালো:
এক কথায়: Sequestration
বিস্তারিত:
  • পরিপক্ব P. falciparum পরজীবী PfEMP-1 নামে একটি protein তৈরি করে এবং এটি RBC-এর উপর প্রকাশ পায়
  • এই PfEMP-1 গভীর রক্তনালীর দেয়ালে (CD36, ICAM-1 receptor) আটকে যায় → সংক্রমিত RBC রক্তনালীতে আটকে পড়ে (Sequestration)
  • তাই Mature Trophozoite ও Schizont সাধারণ শিরার রক্তে (Venous blood) প্রায় দেখা যায় না
  • কিন্তু আঙুলের ডগার Capillary (ত্বকের কৈশিকনালী) তে এই Sequestered পরজীবীগুলো বেশি জমা থাকে
  • তাই আঙুল থেকে নেওয়া Capillary blood-এ বেশি পরজীবী পাওয়া যায় → পরীক্ষা বেশি sensitive হয়
মনে রাখো: Peripheral blood smear-এ শুধু Ring form দেখলেই সন্দেহ করো P. falciparum — কারণ Mature form-গুলো sequestered থাকে।
P. vivax, P. malariae, P. ovale-এ সব ধাপ রক্তে সমানভাবে ঘোরে, তাই এদের ক্ষেত্রে Capillary বা Venous blood-এ কোনো পার্থক্য নেই।

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

Running Command

ls -la /tmp/workspace/amcb-malaria-guide/

Writing File

~/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}")
Running Command

cd /tmp/workspace/amcb-malaria-guide && python cheatsheet.py 2>&1

Running Command

ls -lh /tmp/workspace/amcb-malaria-guide/AMCB_Plasmodium_CheatSheet.pdf

Your one-page cheat sheet is ready — print it and stick it to your desk!

AMCB Plasmodium CheatSheet

PDF Document · PDF


What's packed into the single A4 page:
SectionContent
① Species ComparisonFull 14-row table: P. falciparum vs P. vivax vs P. malariae vs P. ovale — RBC size, stippling, gametocyte shape, complications, treatment
② Life Cycle7-stage compact table (Sporozoite → Hepatic → Erythrocytic → Gametocyte → Mosquito sporogony)
③ Virulence FactorsPfEMP-1, rosetting, knobs, hemozoin, antigenic variation — each with effect
④ Pernicious Malaria10 complications with mechanism (cerebral malaria → DIC → placental malaria)
⑤ Relapse vs RecrudescenceSide-by-side: origin, species, timing, prevention
⑥ Blackwater FeverTrigger → pathogenesis → urine finding → treatment → mortality
⑦ Lab DiagnosisThick/thin film, RDT (HRP-2, pLDH, Aldolase), PCR, capillary blood rule
⑧ Chemoprophylaxis5 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
This is a shared conversation. Sign in to Orris to start your own chat.