Answer these on 2nd year mbbs level with reference to kdt pharmacology
Levodopa --[AADC in brain]--> Dopamine (in striatum) --[D1, D2 receptors]--> motor benefit
| Effect | Levodopa Alone | Levodopa + Carbidopa |
|---|---|---|
| Peripheral decarboxylation | High (~97%) | Blocked |
| Brain availability | ~1-3% | ~10x more |
| Dose of levodopa required | High (3-8 g/day) | Low (300-800 mg/day) |
| Nausea/vomiting | Severe | Greatly reduced |
| Cardiovascular side effects | Common | Reduced |
| Onset of benefit | Slower | Faster |
| Drug | Receptor | Route | Notes |
|---|---|---|---|
| Bromocriptine | D2 agonist | Oral | Ergot-derived; older |
| Pramipexole | D2, D3 agonist | Oral | Non-ergot; preferred |
| Ropinirole | D2, D3 agonist | Oral | Non-ergot; preferred |
| Cabergoline | D2 agonist | Oral | Long t1/2; once weekly |
| Apomorphine | D1+D2 agonist | SC injection | For acute "off" episodes |
KDT Key Point: Anticholinergics are more effective for tremor and rigidity than for bradykinesia.
| Feature | Benzodiazepines | Z-drugs (Zolpidem, Zaleplon) |
|---|---|---|
| Receptor selectivity | Non-selective (BZ1 + BZ2) | Selective for BZ1 (omega-1) |
| Anxiolytic effect | Yes | Minimal/None |
| Muscle relaxant effect | Yes (problematic) | Minimal |
| Anticonvulsant effect | Yes | Minimal |
| Sleep architecture | Suppresses deep NREM, REM | Preserves normal sleep architecture |
| Dependence potential | High | Lower |
| Rebound insomnia | More pronounced | Less pronounced |
| Duration | Longer (residual sedation) | Short t1/2 (Zolpidem: 2-3h; Zaleplon: 1h) |
| Next-day hangover | Common | Minimal |
| Amnesia | More | Less |
| Tolerance | Develops faster | Slower |
KDT Key Point: Z-drugs are preferred for insomnia because they selectively promote sleep without the full spectrum of BDZ side effects, especially in the elderly.
| Drug | Route | t1/2 | Onset |
|---|---|---|---|
| Sumatriptan | SC, oral, nasal | ~2 h | Fast (SC fastest) |
| Rizatriptan | Oral (wafer) | ~2 h | Fast |
| Naratriptan | Oral | ~6 h | Slower, less headache recurrence |
| Frovatriptan | Oral | ~26 h | Slowest; used for menstrual migraine |
| Zolmitriptan | Oral, nasal | ~3 h | Moderate |
Additional agents used in premedication: H2 blockers/PPIs (to reduce aspiration pneumonitis risk), antiemetics (ondansetron/metoclopramide).
PABA
|
| ← Sulfamethoxazole inhibits Dihydropteroate synthase (DHPS)
↓
Dihydrofolic acid
|
| ← Trimethoprim inhibits Dihydrofolate reductase (DHFR)
↓
Tetrahydrofolic acid (THF)
|
↓
Purines → DNA synthesis
Ethanol --[ADH]--> Acetaldehyde --[Aldehyde dehydrogenase (ALDH)]--> Acetate --> CO2 + H2O
Other drugs for alcohol dependence (KDT): Naltrexone (reduces craving), Acamprosate (anti-craving), Chlordiazepoxide (for acute withdrawal)
| Drug | Mechanism | Key Adverse Effect |
|---|---|---|
| Sodium Valproate | Na+, GABA, Ca2+ | Weight gain, teratogen |
| Phenytoin | Na+ channels | Gingival hyperplasia, zero-order kinetics |
| Carbamazepine | Na+ channels | Hyponatremia, SJS, enzyme inducer |
| Phenobarbitone | GABA-A (Cl- duration) | Sedation, dependence |
| Levetiracetam | SV2A | Behavioral changes |
| Lamotrigine | Na+ channels + Glu | Rash, SJS |
KDT Key Point for GTCS: Sodium valproate is the preferred first-line drug for primary generalized epilepsy (including GTCS) because of its broad-spectrum efficacy. Phenytoin and carbamazepine are alternatives but are not recommended in absence seizures (may worsen them).
Prepare flashcards on mechanisms and side effects of antiparkinson drugs
What format would you like the flashcards in?
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or missing"
mkdir -p /home/daytona/workspace/antiparkinson-flashcards && echo "done"
~/antiparkinson-flashcards/make_flashcards.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import KeepTogether
# ─── Color palette ────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1a237e")
MED_BLUE = colors.HexColor("#1565c0")
LIGHT_BLUE = colors.HexColor("#e3f2fd")
ACCENT = colors.HexColor("#0288d1")
GREEN = colors.HexColor("#2e7d32")
LIGHT_GREEN = colors.HexColor("#e8f5e9")
RED = colors.HexColor("#c62828")
LIGHT_RED = colors.HexColor("#ffebee")
ORANGE = colors.HexColor("#e65100")
LIGHT_ORANGE = colors.HexColor("#fff3e0")
PURPLE = colors.HexColor("#6a1b9a")
LIGHT_PURPLE = colors.HexColor("#f3e5f5")
TEAL = colors.HexColor("#00695c")
LIGHT_TEAL = colors.HexColor("#e0f2f1")
GOLD = colors.HexColor("#f57f17")
LIGHT_GOLD = colors.HexColor("#fffde7")
WHITE = colors.white
GRAY_LIGHT = colors.HexColor("#f5f5f5")
GRAY_MED = colors.HexColor("#9e9e9e")
DARK_TEXT = colors.HexColor("#212121")
OUTPUT = "/home/daytona/workspace/antiparkinson-flashcards/Antiparkinson_Drugs_Flashcards.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.5*cm,
leftMargin=1.5*cm,
topMargin=1.5*cm,
bottomMargin=1.5*cm,
)
W = A4[0] - 3*cm # usable width
styles = getSampleStyleSheet()
# ─── Custom styles ─────────────────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
title_style = S("MainTitle",
fontSize=22, fontName="Helvetica-Bold", textColor=WHITE,
alignment=TA_CENTER, spaceAfter=4)
subtitle_style = S("Subtitle",
fontSize=11, fontName="Helvetica", textColor=colors.HexColor("#bbdefb"),
alignment=TA_CENTER, spaceAfter=2)
card_title_style = S("CardTitle",
fontSize=14, fontName="Helvetica-Bold", textColor=WHITE,
alignment=TA_CENTER, leading=18)
card_subtitle_style = S("CardSub",
fontSize=9, fontName="Helvetica", textColor=colors.HexColor("#e0e0e0"),
alignment=TA_CENTER, spaceBefore=2)
section_label = S("SecLabel",
fontSize=8, fontName="Helvetica-Bold", textColor=WHITE,
alignment=TA_LEFT, spaceBefore=0, spaceAfter=1)
body_style = S("Body",
fontSize=9, fontName="Helvetica", textColor=DARK_TEXT,
leading=13, spaceAfter=2, alignment=TA_LEFT)
bullet_style = S("Bullet",
fontSize=9, fontName="Helvetica", textColor=DARK_TEXT,
leading=13, leftIndent=10, spaceAfter=1,
bulletIndent=2, alignment=TA_LEFT)
bold_bullet = S("BoldBullet",
fontSize=9, fontName="Helvetica-Bold", textColor=DARK_TEXT,
leading=13, leftIndent=10, spaceAfter=1)
key_point_style = S("KeyPoint",
fontSize=9, fontName="Helvetica-BoldOblique", textColor=DARK_BLUE,
leading=12, alignment=TA_LEFT, spaceBefore=2)
mnemonic_style = S("Mnemonic",
fontSize=10, fontName="Helvetica-Bold", textColor=PURPLE,
alignment=TA_CENTER, spaceBefore=4, spaceAfter=4)
# ─── Helper builders ───────────────────────────────────────────────────────────
def make_cover():
"""Title cover block."""
data = [[Paragraph("ANTIPARKINSON DRUGS", title_style)],
[Paragraph("Mechanisms • Side Effects • Key Points", subtitle_style)],
[Paragraph("KDT Pharmacology — 2nd Year MBBS Flashcards", subtitle_style)]]
t = Table(data, colWidths=[W])
t.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), 16),
("RIGHTPADDING", (0,0), (-1,-1), 16),
("ROUNDEDCORNERS", (0,0), (-1,-1), [10,10,10,10]),
]))
return t
def header_cell(text, sub, bg_color):
"""Colored header banner for a flashcard."""
data = [
[Paragraph(text, card_title_style)],
[Paragraph(sub, card_subtitle_style)],
]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg_color),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
return t
def section_banner(text, bg):
data = [[Paragraph(text.upper(), section_label)]]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
return t
def body_box(rows, bg=GRAY_LIGHT):
"""Simple bordered content box."""
data = [[r] for r in rows]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#bdbdbd")),
]))
return t
def two_col(left_rows, right_rows, left_bg, right_bg, left_label, right_label):
"""Two-column layout: mechanism (left) | side effects (right)."""
half = (W - 0.3*cm) / 2
def col_table(label, bg_label, rows, bg_body):
inner = [[section_banner(label, bg_label)]]
for r in rows:
inner.append([r])
t = Table(inner, colWidths=[half])
t.setStyle(TableStyle([
("BACKGROUND", (0,1), (-1,-1), bg_body),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#bdbdbd")),
]))
return t
lc = col_table(left_label, left_bg, left_rows, LIGHT_BLUE)
rc = col_table(right_label, right_bg, right_rows, LIGHT_RED)
outer = Table([[lc, rc]], colWidths=[half, half],
spaceBefore=0, spaceAfter=0)
outer.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("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 bp(text):
return Paragraph(f"• {text}", bullet_style)
def bb(text):
return Paragraph(f"• <b>{text}</b>", bullet_style)
def b(text):
return Paragraph(text, body_style)
def kp(text):
return Paragraph(f"⭐ {text}", key_point_style)
def mn(text):
return Paragraph(text, mnemonic_style)
def card_wrapper(items):
"""Wrap a card so it tries to keep together and adds spacing."""
return KeepTogether(items + [Spacer(1, 0.35*cm)])
# ═══════════════════════════════════════════════════════════════════════════════
# FLASHCARD DATA
# ═══════════════════════════════════════════════════════════════════════════════
def card_levodopa():
mech_rows = [
b("<b>Drug:</b> Levodopa (L-DOPA)"),
b("<b>Class:</b> Dopamine Precursor"),
Spacer(1,3),
bp("Dopamine CANNOT cross the BBB"),
bp("Levodopa crosses via Large Neutral Amino Acid Transporter (LNAT)"),
bp("Inside brain → decarboxylated by AADC (Aromatic L-Amino Acid Decarboxylase) → Dopamine"),
bp("Dopamine acts on D1 & D2 receptors in striatum → relieves motor symptoms"),
bp("95–99% converted peripherally → explains side effects"),
Spacer(1,3),
b("<b>Route:</b> Levodopa → AADC (brain) → DA → D1/D2 receptors"),
]
se_rows = [
b("<b>GI (peripheral DA):</b>"),
bp("Nausea, vomiting (CTZ stimulation)"),
bp("Anorexia"),
b("<b>Cardiovascular:</b>"),
bp("Postural hypotension"),
bp("Cardiac arrhythmias"),
b("<b>CNS (long-term):</b>"),
bp("Dyskinesias (peak dose, most common)"),
bp("On-Off fluctuations"),
bp("Wearing-off phenomenon"),
bp("Psychosis, hallucinations, confusion"),
bp("Sleep disturbances, vivid dreams"),
b("<b>Other:</b>"),
bp("Dark urine/sweat (melanin)"),
bp("Mydriasis → CI in narrow-angle glaucoma"),
]
return card_wrapper([
header_cell("LEVODOPA (L-DOPA)", "Dopamine Precursor | Most Effective Antiparkinson Drug", MED_BLUE),
two_col(mech_rows, se_rows, MED_BLUE, RED, "⚙ Mechanism of Action", "⚠ Side Effects"),
body_box([
kp("KDT Key: Only ~1–3% of oral levodopa reaches the brain when given alone"),
kp("CI: Psychosis, narrow-angle glaucoma, concurrent non-selective MAO inhibitors"),
kp("NOT given with antipsychotics (D2 blockers — antagonize levodopa)"),
], LIGHT_GOLD),
])
def card_carbidopa():
mech_rows = [
b("<b>Carbidopa:</b> Peripheral DOPA Decarboxylase (DDC) Inhibitor"),
Spacer(1,3),
bp("Does NOT cross the BBB (hydrazine group → polar molecule)"),
bp("Inhibits peripheral decarboxylation of levodopa → peripheral DA NOT formed"),
bp("More levodopa reaches the brain (~10x more bioavailability)"),
bp("Carbidopa itself has NO antiparkinson effect"),
Spacer(1,3),
b("<b>Ratio:</b> Levodopa : Carbidopa = 4:1 (standard preparation)"),
b("<b>Benefits of combination:</b>"),
bp("Levodopa dose reduced by ~75–80%"),
bp("Faster onset of benefit"),
bp("Reduced peripheral side effects"),
bp("No need to restrict dietary protein (protein competes for LNAT)"),
]
se_rows = [
b("<b>Reduced peripheral side effects:</b>"),
bp("Less nausea & vomiting"),
bp("Less postural hypotension"),
bp("Less cardiac arrhythmias"),
Spacer(1,3),
b("<b>Remaining/New effects:</b>"),
bp("CNS side effects persist (dyskinesias, psychosis, hallucinations — even worse as more levodopa reaches brain)"),
bp("Involuntary movements appear earlier"),
Spacer(1,3),
b("<b>Carbidopa alone:</b>"),
bp("No major adverse effects"),
bp("Can precipitate vitamin B6 antagonism (theoretical)"),
]
return card_wrapper([
header_cell("LEVODOPA + CARBIDOPA", "Peripheral DDC Inhibitor Combination | Syndopa / Sinemet", TEAL),
two_col(mech_rows, se_rows, TEAL, RED, "⚙ Mechanism & Rationale", "⚠ Side Effects"),
body_box([
kp("KDT Key: Carbidopa does NOT cross BBB → selectively inhibits PERIPHERAL DDC only"),
kp("Entacapone (COMT inhibitor) can be added → triple combo (Stalevo): further increases levodopa availability"),
], LIGHT_TEAL),
])
def card_dopamine_agonists():
mech_rows = [
b("<b>Class:</b> Direct Dopamine Receptor Agonists (D2/D3)"),
Spacer(1,3),
b("<b>Ergot-derived:</b>"),
bp("Bromocriptine — D2 agonist"),
bp("Cabergoline — D2 agonist, very long t½ (~65h)"),
Spacer(1,3),
b("<b>Non-ergot (preferred):</b>"),
bp("Pramipexole — D2 + D3 agonist"),
bp("Ropinirole — D2 + D3 agonist"),
bp("Rotigotine — transdermal patch"),
Spacer(1,3),
b("<b>Mechanism:</b>"),
bp("Act DIRECTLY on striatal D2/D3 receptors"),
bp("Do NOT require conversion — no need for surviving neurons"),
bp("Longer duration of action than levodopa"),
bp("Fewer motor fluctuations (on-off, dyskinesias)"),
b("<b>Use:</b> Early PD (monotherapy) or adjunct to levodopa"),
]
se_rows = [
b("<b>Common:</b>"),
bp("Nausea, vomiting"),
bp("Postural hypotension"),
bp("Somnolence (sudden 'sleep attacks' — important for driving!)"),
Spacer(1,3),
b("<b>CNS:</b>"),
bp("Hallucinations, psychosis (more than levodopa)"),
bp("Confusion, delirium (especially in elderly)"),
Spacer(1,3),
b("<b>Impulse Control Disorders (ICDs):</b>"),
bp("Pathological gambling"),
bp("Hypersexuality"),
bp("Compulsive eating/shopping"),
bp("Especially with pramipexole & ropinirole"),
Spacer(1,3),
b("<b>Ergot-specific (bromocriptine/cabergoline):</b>"),
bp("Pulmonary/retroperitoneal fibrosis"),
bp("Cardiac valvulopathy (rare)"),
bp("Erythromelalgia"),
]
return card_wrapper([
header_cell("DOPAMINE AGONISTS", "Bromocriptine • Pramipexole • Ropinirole • Cabergoline", ACCENT),
two_col(mech_rows, se_rows, ACCENT, RED, "⚙ Mechanism of Action", "⚠ Side Effects"),
body_box([
kp("KDT Key: Non-ergot DA agonists (pramipexole, ropinirole) are preferred — less fibrotic complications"),
kp("Apomorphine (D1+D2 agonist) given SC for acute 'off' episodes — fastest onset"),
kp("Warn patients about sudden sleep attacks — avoid driving!"),
], LIGHT_GOLD),
])
def card_mao_b():
mech_rows = [
b("<b>Drugs:</b> Selegiline (Deprenyl), Rasagiline"),
b("<b>Class:</b> Selective, Irreversible MAO-B Inhibitors"),
Spacer(1,3),
b("<b>Mechanism:</b>"),
bp("MAO-B = monoamine oxidase type B"),
bp("Responsible for dopamine catabolism in the striatum"),
bp("Selegiline inhibits MAO-B → reduces DA breakdown → ↑ DA availability"),
bp("Does NOT inhibit MAO-A at therapeutic doses"),
bp("NO 'cheese reaction' (tyramine interaction)"),
Spacer(1,3),
b("<b>Neuroprotective hypothesis:</b>"),
bp("Reducing DA oxidation → less free radical production → may slow neurodegeneration (debated)"),
Spacer(1,3),
b("<b>Selegiline metabolized to:</b> L-amphetamine & L-methamphetamine (CNS stimulant metabolites)"),
b("<b>Rasagiline:</b> No amphetamine metabolites; more selective"),
b("<b>Use:</b> Early monotherapy or adjunct to levodopa for 'wearing off'"),
]
se_rows = [
b("<b>Common (selegiline):</b>"),
bp("Insomnia, agitation (amphetamine metabolites)"),
bp("Nausea"),
bp("Dizziness"),
Spacer(1,3),
b("<b>Interactions (IMPORTANT):</b>"),
bp("With pethidine/meperidine → serotonin syndrome (FATAL — contraindicated)"),
bp("With SSRIs/TCAs → serotonin syndrome risk"),
bp("With sympathomimetics → hypertensive crisis"),
Spacer(1,3),
b("<b>At high doses:</b>"),
bp("Loses MAO-B selectivity → MAO-A inhibited → cheese reaction possible"),
Spacer(1,3),
b("<b>Rasagiline side effects:</b>"),
bp("Headache, arthralgia"),
bp("Fewer CNS stimulant effects than selegiline"),
]
return card_wrapper([
header_cell("MAO-B INHIBITORS", "Selegiline (Deprenyl) • Rasagiline", PURPLE),
two_col(mech_rows, se_rows, PURPLE, RED, "⚙ Mechanism of Action", "⚠ Side Effects"),
body_box([
kp("KDT Key: Selegiline is selective MAO-B inhibitor → NO cheese reaction at therapeutic doses"),
kp("CRITICAL CI: Never combine with pethidine → fatal serotonin syndrome"),
kp("Rasagiline is 5–10x more potent than selegiline, no amphetamine metabolites"),
], LIGHT_PURPLE),
])
def card_comt():
mech_rows = [
b("<b>Drugs:</b> Entacapone, Tolcapone, Opicapone"),
b("<b>Class:</b> COMT (Catechol-O-Methyl Transferase) Inhibitors"),
Spacer(1,3),
b("<b>Mechanism:</b>"),
bp("COMT metabolizes levodopa → 3-O-methyldopa (3-OMD, inactive) in the periphery"),
bp("3-OMD competes with levodopa for LNAT → reduces brain entry"),
bp("COMT inhibitors block this step → more levodopa available → prolonged plasma half-life"),
bp("Entacapone: peripheral COMT inhibitor only (does NOT cross BBB)"),
bp("Tolcapone: inhibits both peripheral AND central COMT (more effective but hepatotoxic)"),
Spacer(1,3),
b("<b>Always used WITH levodopa</b> (not effective alone)"),
b("<b>Stalevo:</b> Levodopa + Carbidopa + Entacapone — triple combination"),
b("<b>Use:</b> Adjunct to levodopa to reduce 'wearing off' fluctuations"),
]
se_rows = [
b("<b>Common (entacapone):</b>"),
bp("Diarrhea (most common reason for stopping entacapone)"),
bp("Nausea, abdominal pain"),
bp("Orange-brown discoloration of urine (harmless)"),
bp("Dyskinesias (as more levodopa reaches brain — reduce levodopa dose)"),
bp("Hallucinations"),
Spacer(1,3),
b("<b>Tolcapone (additional):</b>"),
bp("HEPATOTOXICITY — potentially fatal (rare)"),
bp("Requires LFT monitoring every 2 weeks"),
bp("Reserved for patients not responding to entacapone"),
Spacer(1,3),
b("<b>Opicapone:</b>"),
bp("Once-daily peripheral COMT inhibitor"),
bp("Newer; better tolerability profile"),
]
return card_wrapper([
header_cell("COMT INHIBITORS", "Entacapone • Tolcapone • Opicapone", GREEN),
two_col(mech_rows, se_rows, GREEN, RED, "⚙ Mechanism of Action", "⚠ Side Effects"),
body_box([
kp("KDT Key: Entacapone — peripheral COMT only (safer); Tolcapone — central + peripheral (hepatotoxic)"),
kp("Orange urine with entacapone — warn patients (harmless but alarming)"),
kp("Diarrhea is the main reason for discontinuing entacapone"),
], LIGHT_GREEN),
])
def card_amantadine():
mech_rows = [
b("<b>Drug:</b> Amantadine"),
b("<b>Class:</b> Antiviral / NMDA Receptor Antagonist"),
Spacer(1,3),
b("<b>Mechanisms (multiple):</b>"),
bp("1. Increases dopamine RELEASE from surviving neurons"),
bp("2. Inhibits dopamine RE-UPTAKE"),
bp("3. Blocks NMDA glutamate receptors → reduces excitotoxicity"),
bp("4. Mild anticholinergic activity"),
Spacer(1,3),
b("<b>Unique use:</b>"),
bp("Drug of choice for LEVODOPA-INDUCED DYSKINESIAS"),
bp("Used as monotherapy in early mild PD"),
bp("Adjunct in moderate-severe PD"),
Spacer(1,3),
b("<b>Originally developed as:</b> Antiviral (influenza A)"),
b("<b>Renally excreted:</b> Reduce dose in renal impairment"),
]
se_rows = [
b("<b>Common:</b>"),
bp("Livedo reticularis (mottled purplish skin discoloration — characteristic)"),
bp("Ankle edema"),
bp("Insomnia, dizziness"),
Spacer(1,3),
b("<b>CNS:</b>"),
bp("Hallucinations, confusion (especially elderly)"),
bp("Nightmares"),
bp("Ataxia"),
Spacer(1,3),
b("<b>Anticholinergic effects:</b>"),
bp("Dry mouth, blurred vision"),
bp("Urinary retention"),
Spacer(1,3),
b("<b>Cardiovascular:</b>"),
bp("Peripheral edema"),
bp("Orthostatic hypotension"),
Spacer(1,3),
b("<b>Withdrawal:</b>"),
bp("Abrupt withdrawal → neuroleptic malignant syndrome-like state"),
]
return card_wrapper([
header_cell("AMANTADINE", "NMDA Antagonist • DA Releaser | Drug of Choice for Levodopa-Induced Dyskinesias", ORANGE),
two_col(mech_rows, se_rows, ORANGE, RED, "⚙ Mechanism of Action", "⚠ Side Effects"),
body_box([
kp("KDT Key: Livedo reticularis = characteristic skin finding with amantadine"),
kp("DOC for levodopa-induced dyskinesias (NMDA receptor mechanism)"),
kp("Originally an antiviral — repurposed for PD"),
], LIGHT_ORANGE),
])
def card_anticholinergics():
mech_rows = [
b("<b>Drugs:</b> Trihexyphenidyl (Benzhexol), Biperiden,"),
b("Procyclidine, Orphenadrine"),
b("<b>Class:</b> Central Anticholinergic / Antimuscarinic Drugs"),
Spacer(1,3),
b("<b>Rationale (KDT):</b>"),
bp("In PD: DA deficiency → relative excess of ACh activity in striatum"),
bp("Anticholinergics block muscarinic (M1) receptors in striatum"),
bp("Restore DA/ACh balance → reduce tremor and rigidity"),
Spacer(1,3),
b("<b>Receptor:</b> M1 muscarinic receptor blockade (central)"),
Spacer(1,3),
b("<b>Trihexyphenidyl:</b> Most commonly used"),
b("<b>Best for:</b> Tremor > Rigidity"),
b("<b>NOT effective for:</b> Bradykinesia (least effective for this)"),
Spacer(1,3),
b("<b>Uses:</b>"),
bp("Drug-induced parkinsonism (antipsychotic-induced EPS) — DOC"),
bp("Tremor-predominant PD (especially young patients)"),
bp("Adjunct when levodopa is inadequate for tremor"),
]
se_rows = [
b("<b>Peripheral antimuscarinic:</b>"),
bp("Dry mouth (xerostomia)"),
bp("Blurred vision (cycloplegia)"),
bp("Urinary retention (CI in BPH)"),
bp("Constipation"),
bp("Tachycardia"),
bp("Mydriasis (CI in narrow-angle glaucoma)"),
Spacer(1,3),
b("<b>Central (CNS):</b>"),
bp("Memory impairment, confusion"),
bp("Cognitive decline (especially elderly)"),
bp("Hallucinations, delirium"),
bp("Sedation, drowsiness"),
Spacer(1,3),
b("<b>Contraindications:</b>"),
bp("Elderly (cognitive impairment)"),
bp("Benign prostatic hyperplasia"),
bp("Narrow-angle glaucoma"),
bp("Dementia (Alzheimer's)"),
]
return card_wrapper([
header_cell("ANTICHOLINERGIC DRUGS", "Trihexyphenidyl (Benzhexol) • Biperiden • Procyclidine", colors.HexColor("#bf360c")),
two_col(mech_rows, se_rows, colors.HexColor("#bf360c"), RED, "⚙ Mechanism of Action", "⚠ Side Effects"),
body_box([
kp("KDT Key: Best for TREMOR; least effective for BRADYKINESIA"),
kp("DOC for drug-induced (antipsychotic-induced) parkinsonism"),
kp("AVOID in elderly — high risk of cognitive impairment & hallucinations"),
], LIGHT_RED),
])
def card_summary():
"""Summary comparison table card."""
col_w = [W*0.22, W*0.28, W*0.27, W*0.23]
header_row = [
Paragraph("<b>Drug</b>", S("th", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER)),
Paragraph("<b>Mechanism</b>", S("th", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER)),
Paragraph("<b>Key Side Effect</b>", S("th", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER)),
Paragraph("<b>Key Point</b>", S("th", fontSize=8, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER)),
]
def row(d, m, s, k, bg=WHITE):
cs = S("tc", fontSize=7.5, fontName="Helvetica", textColor=DARK_TEXT, leading=11, alignment=TA_LEFT)
return [Paragraph(d,cs), Paragraph(m,cs), Paragraph(s,cs), Paragraph(k,cs)]
data = [
header_row,
row("Levodopa", "Dopamine precursor\n→ crosses BBB\n→ DA in striatum",
"Dyskinesias\nOn-off\nPsychosis", "Most effective\ndrug"),
row("+ Carbidopa", "Peripheral DDC\ninhibitor\n(does NOT cross BBB)",
"↑ CNS side effects\n(more levodopa\nto brain)", "Reduces dose\n& peripheralSE"),
row("DA Agonists\n(Pramipexole,\nRopinirole)", "Direct D2/D3\nreceptor agonist\n(no conversion needed)",
"Hallucinations\nImpulse control\ndisorders", "Non-ergot\npreferred"),
row("Selegiline\n(MAO-B inh.)", "Irreversible\nselective\nMAO-B inhibitor",
"Insomnia\nFatal interaction\nwith pethidine", "No cheese\nreaction at\ntherapeutic dose"),
row("Entacapone\n(COMT inh.)", "Peripheral COMT\ninhibitor\n↑ levodopa t½",
"Diarrhea\nOrange urine\nDyskinesias", "Always given\nwith levodopa"),
row("Amantadine", "NMDA antagonist\n+ DA release\n+ reuptake block",
"Livedo reticularis\nAnkle edema\nHallucinations", "DOC for\nlevodopa-induced\ndyskinesias"),
row("Trihexyphenidyl\n(Anticholinergic)", "M1 muscarinic\nreceptor blockade\nin striatum",
"Dry mouth\nUrinary retention\nCognitive decline", "DOC for\ndrug-induced\nParkinsonism"),
]
t = Table(data, colWidths=col_w, repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GRAY_LIGHT]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#9e9e9e")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
]))
title_t = Table([[Paragraph("QUICK COMPARISON TABLE — All Antiparkinson Drugs", card_title_style)]],
colWidths=[W])
title_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
]))
return KeepTogether([title_t, t, Spacer(1, 0.35*cm)])
def card_pd_overview():
"""Pathophysiology overview card."""
items = [
b("<b>Parkinson's Disease Pathophysiology:</b>"),
bp("Degeneration of dopaminergic neurons in <b>Substantia Nigra pars compacta (SNpc)</b>"),
bp("Loss of nigrostriatal tract → ↓ Dopamine in striatum"),
bp("Relative excess of <b>Acetylcholine (ACh)</b> activity → motor symptoms"),
bp("Cardinal features: <b>TRAP</b> — Tremor (resting), Rigidity (cogwheel), Akinesia/Bradykinesia, Postural instability"),
Spacer(1,4),
b("<b>Treatment Goal:</b> Restore DA/ACh balance in striatum"),
Spacer(1,4),
b("<b>Classification of Antiparkinson Drugs (KDT):</b>"),
b("<b>A. Dopaminergic (↑ DA):</b>"),
bp("1. DA Precursor: Levodopa (± Carbidopa, Benserazide)"),
bp("2. DA Agonists: Bromocriptine, Pramipexole, Ropinirole, Cabergoline, Apomorphine"),
bp("3. MAO-B Inhibitors: Selegiline, Rasagiline"),
bp("4. COMT Inhibitors: Entacapone, Tolcapone, Opicapone"),
bp("5. DA Releaser + NMDA antagonist: Amantadine"),
b("<b>B. Anticholinergic (↓ ACh):</b>"),
bp("Trihexyphenidyl (Benzhexol), Biperiden, Procyclidine, Orphenadrine"),
]
title_t = Table([[Paragraph("PARKINSON'S DISEASE — OVERVIEW & DRUG CLASSIFICATION", card_title_style)]],
colWidths=[W])
title_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#004d40")),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
]))
return KeepTogether([title_t, body_box(items, LIGHT_TEAL),
body_box([mn("Mnemonic: TRAP = Tremor • Rigidity • Akinesia • Postural instability")], LIGHT_GOLD),
Spacer(1, 0.35*cm)])
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD DOCUMENT
# ═══════════════════════════════════════════════════════════════════════════════
story = []
# Cover
story.append(make_cover())
story.append(Spacer(1, 0.4*cm))
# Overview
story.append(card_pd_overview())
# Individual drug cards
story.append(card_levodopa())
story.append(card_carbidopa())
story.append(card_dopamine_agonists())
story.append(card_mao_b())
story.append(card_comt())
story.append(card_amantadine())
story.append(card_anticholinergics())
# Summary table
story.append(card_summary())
# Footer note
story.append(body_box([
Paragraph("Reference: KD Tripathi — Essentials of Medical Pharmacology, 8th Ed. | Chapter 32: Drugs for Parkinsonism",
S("ref", fontSize=8, fontName="Helvetica-Oblique", textColor=GRAY_MED, alignment=TA_CENTER))
], WHITE))
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/antiparkinson-flashcards && python make_flashcards.py 2>&1
ls -lh /home/daytona/workspace/antiparkinson-flashcards/Antiparkinson_Drugs_Flashcards.pdf
Antiparkinson Drugs Flashcards
PDF Document · PDF
| Card | Drug | Color Theme |
|---|---|---|
| 0 | Overview & Classification of Antiparkinson Drugs | Dark Teal |
| 1 | Levodopa — mechanism, peripheral vs central action | Blue |
| 2 | Levodopa + Carbidopa — rationale, dose reduction | Teal |
| 3 | Dopamine Agonists (Pramipexole, Ropinirole, Bromocriptine) | Sky Blue |
| 4 | MAO-B Inhibitors (Selegiline, Rasagiline) | Purple |
| 5 | COMT Inhibitors (Entacapone, Tolcapone) | Green |
| 6 | Amantadine — NMDA antagonist, DOC for dyskinesias | Orange |
| 7 | Anticholinergics (Trihexyphenidyl, Biperiden) | Brown-Red |
| 8 | Quick Comparison Table — all drugs side-by-side | Navy |