Answer these on 2nd year mbbs level with reference to kdt pharmacology
Note: KDT (K.D. Tripathi's "Essentials of Medical Pharmacology") is not available in the textbook library here, but its content is well-established from training. All answers below follow KDT chapter structure and page references are approximated to the 8th edition. Supporting confirmation was drawn from Katzung 16th Ed. and Goodman & Gilman available in the library.
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
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…
ls -lh /home/daytona/workspace/antiparkinson-flashcards/Antiparkinson_Drugs_Flas…
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 |