Craeye a mind map that cannot be forgeteb for antiadrenergic drugs
ls -la /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/antiadrenergic-mindmap
~/antiadrenergic-mindmap/build.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_WIDE"; // 13.3" x 7.5"
pres.title = "Antiadrenergic Drugs Mind Map";
// βββ COLOUR PALETTE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
const C = {
bg: "0D1117", // near-black background
bgCard: "161B22", // card background
accent: "58A6FF", // vivid blue β central hub
alpha: "FF7B72", // coral-red β alpha blockers
beta: "3FB950", // green β beta blockers
central: "D2A8FF", // lavender β centrally acting
pregang: "FFA657", // amber β ganglionic / presynaptic
text: "E6EDF3", // light text
textDim: "8B949E", // dim secondary text
gold: "F8E45C", // mnemonic highlights
white: "FFFFFF",
};
// βββ HELPER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
function pill(slide, txt, x, y, w, h, fillColor, textColor, fontSize = 9, bold = false) {
slide.addShape(pres.ShapeType.roundRect, {
x, y, w, h,
fill: { color: fillColor },
line: { color: fillColor },
rectRadius: 0.08,
});
slide.addText(txt, {
x, y, w, h,
fontSize, color: textColor, bold,
align: "center", valign: "middle", margin: 4,
});
}
function connector(slide, x1, y1, x2, y2, color = "4D5662") {
slide.addShape(pres.ShapeType.line, {
x: x1, y: y1, w: x2 - x1, h: y2 - y1,
line: { color, width: 1.2, dashType: "solid" },
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 1 β MASTER OVERVIEW MIND MAP
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
const slide = pres.addSlide();
// ββ Background ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 13.3, h: 7.5,
fill: { color: C.bg },
line: { color: C.bg },
});
// ββ Title banner ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
slide.addShape(pres.ShapeType.rect, {
x: 3.5, y: 0.08, w: 6.3, h: 0.6,
fill: { color: "161B22" },
line: { color: C.accent, width: 1.5 },
});
slide.addText("ANTIADRENERGIC DRUGS β MASTER MIND MAP", {
x: 3.5, y: 0.08, w: 6.3, h: 0.6,
fontSize: 13, color: C.accent, bold: true,
align: "center", valign: "middle",
});
// ββ Centre hub ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
const cx = 6.65, cy = 3.75;
slide.addShape(pres.ShapeType.ellipse, {
x: cx - 0.85, y: cy - 0.42, w: 1.7, h: 0.84,
fill: { color: C.accent },
line: { color: C.white, width: 1.5 },
});
slide.addText("ANTI-\nADRENERGIC", {
x: cx - 0.85, y: cy - 0.42, w: 1.7, h: 0.84,
fontSize: 10, color: C.bg, bold: true,
align: "center", valign: "middle",
});
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// BRANCH 1 β Ξ± BLOCKERS (top-left)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
pill(slide, "Ξ±-BLOCKERS", 0.25, 0.78, 2.0, 0.45, C.alpha, C.white, 11, true);
connector(slide, 2.25, 1.0, cx - 0.85, cy - 0.1, C.alpha);
// Non-selective
pill(slide, "Non-Selective Ξ±1+Ξ±2", 0.15, 1.42, 2.2, 0.36, "3D1A19", C.alpha, 8.5, true);
slide.addText([
{ text: "Phentolamine", options: { breakLine: true } },
{ text: "Phenoxybenzamine (irreversible)", options: { breakLine: true } },
], { x: 0.2, y: 1.84, w: 2.1, h: 0.55, fontSize: 8, color: C.text });
// Selective Ξ±1
pill(slide, "Selective Ξ±1 Blockers", 0.15, 2.46, 2.2, 0.36, "3D1A19", C.alpha, 8.5, true);
slide.addText([
{ text: "Prazosin (prototype, 1st gen)", options: { breakLine: true } },
{ text: "Terazosin, Doxazosin (long-acting)", options: { breakLine: true } },
{ text: "Tamsulosin, Alfuzosin (uroselective)", options: { breakLine: true } },
{ text: "Silodosin (most uroselective)", options: {} },
], { x: 0.2, y: 2.88, w: 2.1, h: 0.72, fontSize: 7.8, color: C.text });
// Uses
pill(slide, "Uses", 0.15, 3.68, 1.1, 0.3, "2A1717", C.gold, 8, true);
slide.addText("HTN β’ BPH β’ Pheochromocytoma\nRaynaud β’ PTSD (prazosin)", {
x: 1.32, y: 3.68, w: 1.1, h: 0.42, fontSize: 7.5, color: C.textDim,
});
// ADRs
pill(slide, "ADRs", 0.15, 4.18, 1.1, 0.3, "2A1717", C.gold, 8, true);
slide.addText("1st-dose syncope β’ Reflex tachycardia\nNasal congestion β’ Sexual dysfunction", {
x: 1.32, y: 4.18, w: 1.1, h: 0.42, fontSize: 7.5, color: C.textDim,
});
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// BRANCH 2 β Ξ² BLOCKERS (top-right)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
pill(slide, "Ξ²-BLOCKERS", 11.1, 0.78, 2.0, 0.45, C.beta, C.white, 11, true);
connector(slide, 11.1, 1.0, cx + 0.85, cy - 0.1, C.beta);
// Non-selective
pill(slide, "Non-Selective Ξ²1+Ξ²2", 11.0, 1.42, 2.2, 0.36, "162618", C.beta, 8.5, true);
slide.addText("Propranolol, Nadolol, Timolol\nPindolol (+ ISA)", {
x: 11.05, y: 1.84, w: 2.15, h: 0.42, fontSize: 8, color: C.text,
});
// Cardioselective
pill(slide, "Cardioselective Ξ²1", 11.0, 2.34, 2.2, 0.36, "162618", C.beta, 8.5, true);
slide.addText("Metoprolol, Atenolol\nBisoprolol, Esmolol (IV, ultra-short)\nBetaxolol", {
x: 11.05, y: 2.76, w: 2.15, h: 0.5, fontSize: 8, color: C.text,
});
// Mixed Ξ±+Ξ²
pill(slide, "Mixed Ξ±+Ξ² Blockers", 11.0, 3.34, 2.2, 0.36, "162618", C.beta, 8.5, true);
slide.addText("Labetalol (IV in HTN emergency)\nCarvedilol (HF, anti-oxidant)", {
x: 11.05, y: 3.76, w: 2.15, h: 0.4, fontSize: 8, color: C.text,
});
// Uses
pill(slide, "Uses", 11.0, 4.24, 1.1, 0.3, "0E1F0E", C.gold, 8, true);
slide.addText("HTN β’ Angina β’ MI (mortality β)\nHF β’ Arrhythmia β’ Glaucoma\nHyperthyroidism β’ Migraine prophylaxis", {
x: 12.15, y: 4.24, w: 1.0, h: 0.55, fontSize: 7.5, color: C.textDim,
});
// ADRs
pill(slide, "ADRs", 11.0, 4.88, 1.1, 0.3, "0E1F0E", C.gold, 8, true);
slide.addText("Bronchoconstriction (Ξ²2)\nMask hypoglycaemia\nFatigue β’ Cold extremities\nAbrupt withdrawal β rebound", {
x: 12.15, y: 4.88, w: 1.0, h: 0.55, fontSize: 7.5, color: C.textDim,
});
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// BRANCH 3 β CENTRALLY ACTING (bottom-left)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
pill(slide, "CENTRALLY ACTING", 0.2, 5.65, 2.4, 0.45, C.central, C.bg, 10, true);
connector(slide, 2.6, 5.88, cx - 0.85, cy + 0.42, C.central);
slide.addText([
{ text: "Clonidine", options: { bold: true, color: C.central, breakLine: true } },
{ text: "Ξ±2 agonist β central sympathetic outflow", options: { breakLine: true } },
{ text: "Uses: HTN, opioid withdrawal, ADHD", options: { breakLine: true } },
{ text: "ADR: Rebound HTN on withdrawal", options: { breakLine: true, color: "FF6B6B" } },
], { x: 0.2, y: 6.16, w: 2.5, h: 0.9, fontSize: 7.8, color: C.textDim });
slide.addText([
{ text: "Methyldopa", options: { bold: true, color: C.central, breakLine: true } },
{ text: "β Ξ±-methylnorepinephrine (false TX)", options: { breakLine: true } },
{ text: "Drug of choice: Pregnancy HTN", options: { breakLine: true } },
{ text: "ADR: Haemolytic anaemia, sedation", options: { color: "FF6B6B" } },
], { x: 2.85, y: 6.16, w: 2.4, h: 0.9, fontSize: 7.8, color: C.textDim });
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// BRANCH 4 β GANGLIONIC + PRESYNAPTIC (bottom-right)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
pill(slide, "GANGLIONIC / PRESYNAPTIC", 10.4, 5.65, 2.8, 0.45, C.pregang, C.bg, 10, true);
connector(slide, 10.4, 5.88, cx + 0.85, cy + 0.42, C.pregang);
slide.addText([
{ text: "Reserpine", options: { bold: true, color: C.pregang, breakLine: true } },
{ text: "Depletes NE/DA/5-HT from vesicles", options: { breakLine: true } },
{ text: "ADR: Depression, Parkinsonism, Sedation", options: { breakLine: true, color: "FF6B6B" } },
], { x: 10.4, y: 6.16, w: 2.4, h: 0.75, fontSize: 7.8, color: C.textDim });
slide.addText([
{ text: "Guanethidine", options: { bold: true, color: C.pregang, breakLine: true } },
{ text: "Blocks NE release from sympathetic terminals", options: { breakLine: true } },
{ text: "ADR: Orthostatic hypotension, diarrhoea", options: { color: "FF6B6B" } },
], { x: 10.4, y: 6.92, w: 2.7, h: 0.52, fontSize: 7.8, color: C.textDim });
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// MNEMONIC STRIP (centre-bottom)
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
slide.addShape(pres.ShapeType.rect, {
x: 3.5, y: 6.86, w: 6.3, h: 0.55,
fill: { color: "1C2130" },
line: { color: C.gold, width: 1 },
});
slide.addText([
{ text: "β¦ MNEMONIC ", options: { bold: true, color: C.gold } },
{ text: '"A', options: { bold: true, color: C.alpha } },
{ text: "lpha blocks β ", options: { color: C.text } },
{ text: "A", options: { bold: true, color: C.gold } },
{ text: "ction on vessels (vasoD) | ", options: { color: C.text } },
{ text: "B", options: { bold: true, color: C.beta } },
{ text: "eta blocks β ", options: { color: C.text } },
{ text: "B", options: { bold: true, color: C.gold } },
{ text: 'eat & BP β"', options: { color: C.text } },
], {
x: 3.5, y: 6.86, w: 6.3, h: 0.55,
fontSize: 9, align: "center", valign: "middle",
});
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// Legend dots
// βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
const legend = [
[C.alpha, "Ξ±-Blockers"],
[C.beta, "Ξ²-Blockers"],
[C.central, "Centrally Acting"],
[C.pregang, "Ganglionic/Presynaptic"],
];
legend.forEach(([col, lbl], i) => {
const lx = 3.6 + i * 1.58;
slide.addShape(pres.ShapeType.ellipse, { x: lx, y: 0.83, w: 0.15, h: 0.15, fill: { color: col }, line: { color: col } });
slide.addText(lbl, { x: lx + 0.2, y: 0.8, w: 1.35, h: 0.22, fontSize: 7.5, color: C.textDim });
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 2 β Ξ²-BLOCKERS DEEP-DIVE
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
const slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color:C.bg}, line:{color:C.bg} });
// Header
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.72, fill:{color:C.beta}, line:{color:C.beta} });
slide.addText("Ξ²-BLOCKERS β DEEP DIVE", {
x:0, y:0, w:13.3, h:0.72, fontSize:18, color:C.bg, bold:true, align:"center", valign:"middle",
});
// ββ Column helper ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
function col(slide, title, x, w, items, titleColor) {
slide.addShape(pres.ShapeType.rect, { x, y:0.82, w, h:0.38, fill:{color:"1F2933"}, line:{color:titleColor, width:1} });
slide.addText(title, { x, y:0.82, w, h:0.38, fontSize:9.5, color:titleColor, bold:true, align:"center", valign:"middle" });
items.forEach(([label, val, accent], idx) => {
const iy = 1.32 + idx * 0.52;
slide.addShape(pres.ShapeType.rect, { x, y:iy, w, h:0.46, fill:{color:"161B22"}, line:{color:"2D333B"} });
slide.addText([
{ text: label + " ", options: { bold: true, color: accent || titleColor } },
{ text: val, options: { color: C.text } },
], { x:x+0.08, y:iy+0.04, w:w-0.16, h:0.38, fontSize:8, valign:"top" });
});
}
col(slide, "NON-SELECTIVE (Ξ²1+Ξ²2)", 0.2, 3.9, [
["Propranolol", "Prototype β’ Lipophilic (crosses BBB)\nMetabolism: Hepatic (high first-pass)", C.beta],
["Nadolol", "Long-acting β’ Hydrophilic\nRenal excretion", C.beta],
["Timolol", "Glaucoma (topical) β’ Used post-MI", C.beta],
["Pindolol", "Has ISA (intrinsic sympathomimetic activity)\nβ Less bradycardia", C.beta],
["Sotalol", "Class II + III antiarrhythmic\nProlongs QT interval", C.beta],
["Carteolol", "Has ISA β’ Topical glaucoma", C.beta],
], C.beta);
col(slide, "CARDIOSELECTIVE (Ξ²1)", 4.3, 3.9, [
["Metoprolol", "Most used β’ Tartrate (IR) / Succinate (XL)\nFor HF: Succinate only (MERIT-HF trial)", C.beta],
["Atenolol", "Hydrophilic β’ Renal excretion\nNo CNS effects", C.beta],
["Bisoprolol", "Highly selective Ξ²1\nFor HF (CIBIS-II trial)", C.beta],
["Esmolol", "IV only β’ Ultra-short tΒ½ 9 min\nIntra-op HTN, SVT", C.beta],
["Nebivolol", "Highest Ξ²1 selectivity + NO release\nβ Vasodilation", C.beta],
["Betaxolol", "Selective Ξ²1 β’ Topical (glaucoma)", C.beta],
], C.beta);
col(slide, "MIXED Ξ±+Ξ²", 8.4, 2.3, [
["Labetalol", "Ξ±1:Ξ² ratio 1:3 (oral) / 1:7 (IV)\nHypertensive emergency in pregnancy", C.beta],
["Carvedilol", "Ξ±1+Ξ²1+Ξ²2 + antioxidant\nHF (COPERNICUS trial)", C.beta],
], C.beta);
// Selectivity spectrum
slide.addShape(pres.ShapeType.rect, { x:8.4, y:2.9, w:2.3, h:0.35, fill:{color:"1C2130"}, line:{color:C.beta, width:1} });
slide.addText("Ξ²1 SELECTIVITY SPECTRUM", { x:8.4, y:2.9, w:2.3, h:0.35, fontSize:8, color:C.gold, bold:true, align:"center", valign:"middle" });
slide.addText("Less selective ββ More selective\nPropranolol < Metoprolol < Bisoprolol < Nebivolol", {
x:8.4, y:3.3, w:4.7, h:0.55, fontSize:8, color:C.textDim, align:"center",
});
// Properties table
const propX = 0.2, propY = 5.05, propW = 12.9, propH = 0.32;
slide.addShape(pres.ShapeType.rect, { x:propX, y:propY, w:propW, h:propH, fill:{color:"1F2933"}, line:{color:C.beta} });
slide.addText("KEY PROPERTIES TO REMEMBER", { x:propX, y:propY, w:propW, h:propH, fontSize:9, color:C.beta, bold:true, align:"center", valign:"middle" });
const props = [
["Lipophilic (CNS effects)", "Propranolol, Metoprolol, Carvedilol, Labetalol"],
["Hydrophilic (no CNS)", "Atenolol, Nadolol, Esmolol"],
["Has ISA", "Pindolol, Acebutolol, Carteolol"],
["Class III also", "Sotalol (β QT β torsades risk)"],
["Ultra-short tΒ½", "Esmolol (IV, 9 min)"],
["Vasodilating Ξ²-blockers", "Nebivolol (NOβ), Carvedilol (Ξ±1 block)"],
];
props.forEach(([k, v], i) => {
const row = Math.floor(i / 3), colIdx = i % 3;
const rx = propX + colIdx * 4.3, ry = propY + propH + 0.05 + row * 0.55;
slide.addShape(pres.ShapeType.rect, { x:rx, y:ry, w:4.25, h:0.48, fill:{color:"161B22"}, line:{color:"2D333B"} });
slide.addText([
{ text: k + ": ", options: { bold:true, color:C.gold } },
{ text: v, options: { color:C.text } },
], { x:rx+0.08, y:ry+0.06, w:4.1, h:0.36, fontSize:8, valign:"middle" });
});
// CI / ADR strip
slide.addShape(pres.ShapeType.rect, { x:0.2, y:7.0, w:12.9, h:0.42, fill:{color:"2D1B1B"}, line:{color:"FF6B6B"} });
slide.addText([
{ text: "β CONTRAINDICATIONS: ", options:{ bold:true, color:"FF6B6B" } },
{ text: "Asthma/COPD (Ξ²2 block) β’ 2nd/3rd degree AV block β’ Severe bradycardia β’ Severe peripheral arterial disease | ", options:{ color:C.text } },
{ text: "NEVER stop abruptly!", options:{ bold:true, color:"FF6B6B" } },
], { x:0.2, y:7.0, w:12.9, h:0.42, fontSize:8.5, align:"center", valign:"middle" });
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 3 β Ξ±-BLOCKERS DEEP-DIVE
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
const slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color:C.bg}, line:{color:C.bg} });
// Header
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.72, fill:{color:C.alpha}, line:{color:C.alpha} });
slide.addText("Ξ±-BLOCKERS β DEEP DIVE", {
x:0, y:0, w:13.3, h:0.72, fontSize:18, color:C.white, bold:true, align:"center", valign:"middle",
});
// ββ Non-selective panel ββββββββββββββββββββββββββββββββββββββββββββββββββββ
slide.addShape(pres.ShapeType.rect, { x:0.2, y:0.82, w:4.0, h:0.38, fill:{color:"2A1717"}, line:{color:C.alpha, width:1} });
slide.addText("NON-SELECTIVE Ξ±1 + Ξ±2", { x:0.2, y:0.82, w:4.0, h:0.38, fontSize:10, color:C.alpha, bold:true, align:"center", valign:"middle" });
const nsData = [
["Phentolamine", "Competitive reversible block β’ Short-acting IV\nDx: Pheochromocytoma (phentolamine test)\nTx: Hypertensive crisis in pheo\nNote: Reflex tachycardia (Ξ±2 block β NEβ)"],
["Phenoxybenzamine", "NON-COMPETITIVE (covalent, irreversible)\nLong-acting oral β’ Pre-op pheo preparation\nNote: Full receptor recovery needs new receptors"],
];
nsData.forEach(([name, desc], i) => {
const iy = 1.32 + i * 1.45;
slide.addShape(pres.ShapeType.rect, { x:0.2, y:iy, w:4.0, h:1.35, fill:{color:"1A0F0F"}, line:{color:"4D2020"} });
slide.addText([
{ text: name + "\n", options: { bold:true, color:C.alpha } },
{ text: desc, options: { color:C.text } },
], { x:0.3, y:iy+0.1, w:3.8, h:1.15, fontSize:8.2, valign:"top" });
});
// ββ Selective Ξ±1 panel βββββββββββββββββββββββββββββββββββββββββββββββββββββ
slide.addShape(pres.ShapeType.rect, { x:4.4, y:0.82, w:5.0, h:0.38, fill:{color:"2A1717"}, line:{color:C.alpha, width:1} });
slide.addText("SELECTIVE Ξ±1 BLOCKERS", { x:4.4, y:0.82, w:5.0, h:0.38, fontSize:10, color:C.alpha, bold:true, align:"center", valign:"middle" });
const selData = [
["Prazosin", "1st gen β’ Prototype\nShort tΒ½ (BID-TID)\nFirst-dose phenomenon (orthostatic hypotension)\nUses: HTN, BPH, Raynaud, PTSD nightmares\nNote: No reflex tachycardia (Ξ±2 intact)"],
["Terazosin", "2nd gen β’ Longer tΒ½ (once daily)\nUses: HTN + BPH"],
["Doxazosin", "2nd gen β’ Longest tΒ½ (once daily)\nAllhat trial: less favoured for HTN alone"],
["Tamsulosin", "Highly uroselective (Ξ±1A/Ξ±1D > Ξ±1B)\nBPH first-line (little BP effect)\nComplication: Floppy iris syndrome (cataract surgery!)"],
["Alfuzosin", "Uroselective Ξ±1A\nBPH β’ Less BP drop than prazosin"],
["Silodosin", "MOST uroselective Ξ±1A\nBPH β’ Retrograde ejaculation common"],
];
selData.forEach(([name, desc], i) => {
const row = Math.floor(i / 2), col2 = i % 2;
const sx = 4.4 + col2 * 2.5, sy = 1.32 + row * 1.55;
slide.addShape(pres.ShapeType.rect, { x:sx, y:sy, w:2.4, h:1.45, fill:{color:"1A0F0F"}, line:{color:"4D2020"} });
slide.addText([
{ text: name + "\n", options: { bold:true, color:C.alpha } },
{ text: desc, options: { color:C.text } },
], { x:sx+0.08, y:sy+0.08, w:2.24, h:1.28, fontSize:7.5, valign:"top" });
});
// ββ Receptor pharmacology panel ββββββββββββββββββββββββββββββββββββββββββββ
slide.addShape(pres.ShapeType.rect, { x:9.6, y:0.82, w:3.5, h:0.38, fill:{color:"2A1717"}, line:{color:C.alpha, width:1} });
slide.addText("Ξ±-RECEPTOR PHARMACOLOGY", { x:9.6, y:0.82, w:3.5, h:0.38, fontSize:9, color:C.alpha, bold:true, align:"center", valign:"middle" });
const recData = [
["Ξ±1 (postsynaptic)", "Vasoconstriction (skin, GIT, renal)\nMydriasis β’ Urethral sphincter contraction"],
["Ξ±2 (presynaptic)", "β NE release (autoreceptor)\nInhibit insulin release\nPlatelet aggregation"],
["Ξ±1 blockade β", "Vasodilation (β SVR, β BP)\nNasal congestion β’ Ejaculatory dysfunction"],
["Ξ±2 blockade β", "β NE release β reflex tachycardia\n(Why non-selectives cause more tachycardia)"],
];
recData.forEach(([k, v], i) => {
const ry = 1.32 + i * 1.15;
slide.addShape(pres.ShapeType.rect, { x:9.6, y:ry, w:3.5, h:1.05, fill:{color:"1A0F0F"}, line:{color:"4D2020"} });
slide.addText([
{ text: k + "\n", options: { bold:true, color:C.gold } },
{ text: v, options: { color:C.text } },
], { x:9.7, y:ry+0.06, w:3.3, h:0.93, fontSize:7.8, valign:"top" });
});
// ββ Uses summary βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
slide.addShape(pres.ShapeType.rect, { x:0.2, y:5.62, w:13.1, h:0.3, fill:{color:"1F2933"}, line:{color:C.alpha} });
slide.addText("CLINICAL USES SUMMARY", { x:0.2, y:5.62, w:13.1, h:0.3, fontSize:9, color:C.alpha, bold:true, align:"center", valign:"middle" });
const uses = [
["Hypertension", "Prazosin, Terazosin, Doxazosin\n(not first-line per JNC)"],
["BPH", "Tamsulosin, Alfuzosin,\nSilodosin (uroselective)"],
["Pheo crisis", "Phentolamine IV\n(then phenoxybenzamine pre-op)"],
["Raynaud's", "Prazosin (off-label)"],
["PTSD nightmares", "Prazosin (blocks Ξ±1 in brain)"],
];
uses.forEach(([title2, desc], i) => {
const ux = 0.2 + i * 2.62, uy = 5.98;
slide.addShape(pres.ShapeType.rect, { x:ux, y:uy, w:2.55, h:1.4, fill:{color:"1A0F0F"}, line:{color:"4D2020"} });
slide.addText([
{ text: title2 + "\n", options: { bold:true, color:C.alpha } },
{ text: desc, options: { color:C.text } },
], { x:ux+0.08, y:uy+0.08, w:2.39, h:1.24, fontSize:8, valign:"top", align:"center" });
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 4 β CENTRALLY ACTING + PRESYNAPTIC
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
const slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color:C.bg}, line:{color:C.bg} });
// Split header
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:6.65, h:0.72, fill:{color:C.central}, line:{color:C.central} });
slide.addText("CENTRALLY ACTING ANTIADRENERGICS", { x:0, y:0, w:6.65, h:0.72, fontSize:13, color:C.bg, bold:true, align:"center", valign:"middle" });
slide.addShape(pres.ShapeType.rect, { x:6.65, y:0, w:6.65, h:0.72, fill:{color:C.pregang}, line:{color:C.pregang} });
slide.addText("PRESYNAPTIC / GANGLIONIC", { x:6.65, y:0, w:6.65, h:0.72, fontSize:13, color:C.bg, bold:true, align:"center", valign:"middle" });
// ββ Centrally acting drugs ββββββββββββββββββββββββββββββββββββββββββββββββββ
const centralDrugs = [
{
name: "Clonidine",
moa: "Ξ±2 agonist in brainstem (locus coeruleus)\nβ β sympathetic outflow β β NE release",
uses: "Hypertension (2nd line)\nOpioid/alcohol withdrawal\nADHD (off-label)\nMigraine prophylaxis\nMenopausal flushing",
adr: "Sedation, dry mouth\nConstipation\nRebound HTN (abrupt stop)\nBradycardia",
pk: "Both oral & transdermal patch\nExcreted renally",
color: C.central,
},
{
name: "Methyldopa",
moa: "Prodrug β Ξ±-methyldopamine\nβ Ξ±-methylnorepinephrine (false TX)\nβ Ξ±2 agonist in CNS",
uses: "HTN in PREGNANCY (drug of choice)\nHypertensive emergencies (IV)\nHypertension (older patients)",
adr: "Sedation, depression\nPositive Coombs test (20%)\nHaemolytic anaemia (0.5%)\nHepatotoxicity β’ Drug fever\nSodium retention",
pk: "Oral; crosses placenta safely\nProbe of choice in pregnancy",
color: C.central,
},
{
name: "Moxonidine",
moa: "Imidazoline I1-receptor agonist\n(+ weak Ξ±2 agonist)\nβ β central sympathetic tone",
uses: "Mild-moderate HTN\nFewer CNS side effects than clonidine",
adr: "Dry mouth, dizziness\nLess sedation than clonidine",
pk: "Oral, once daily\nImidazoline selectivity = less sedation",
color: C.central,
},
{
name: "Rilmenidine",
moa: "Selective imidazoline I1 agonist\nMinimal Ξ±2 activity",
uses: "Hypertension\nMetabolic neutral (no lipid/glucose effect)",
adr: "Well tolerated β’ Dry mouth",
pk: "Oral, once daily",
color: C.central,
},
];
centralDrugs.forEach((d, i) => {
const col2 = i % 2, row = Math.floor(i / 2);
const dx = 0.2 + col2 * 3.25, dy = 0.9 + row * 3.0;
slide.addShape(pres.ShapeType.rect, { x:dx, y:dy, w:3.15, h:2.75, fill:{color:"1A1A2E"}, line:{color:d.color, width:1.2} });
slide.addText(d.name, { x:dx, y:dy, w:3.15, h:0.35, fontSize:10, color:d.color, bold:true, align:"center", valign:"middle" });
const rows2 = [
{ label: "MOA: ", val: d.moa },
{ label: "Uses: ", val: d.uses },
{ label: "ADRs: ", val: d.adr },
{ label: "PK: ", val: d.pk },
];
rows2.forEach((r, ri) => {
slide.addText([
{ text: r.label, options: { bold:true, color:C.gold } },
{ text: r.val, options: { color:C.text } },
], { x:dx+0.1, y:dy + 0.38 + ri * 0.57, w:2.95, h:0.52, fontSize:7.5, valign:"top" });
});
});
// ββ Presynaptic / ganglionic ββββββββββββββββββββββββββββββββββββββββββββββββ
const preDrugs = [
{
name: "Reserpine",
moa: "Inhibits VMAT (vesicular monoamine transporter)\nβ Depletes NE, DA, 5-HT from storage vesicles\nβ Long-lasting effect (days-weeks)",
uses: "Rarely used (historical)\nSevere HTN in combination\nAntipsychotic (old)",
adr: "DEPRESSION (β monoamines)\nParkinsonism (β DA)\nSedation, nasal congestion\nPeptic ulcer (β ACh effect)\nDiarrhoea",
pk: "Long-acting (irreversible)\nReserves deplete slowly",
color: C.pregang,
},
{
name: "Guanethidine",
moa: "Enters sympathetic terminals via NE transporter\nβ Displaces NE from vesicles\nβ Blocks exocytosis of NE",
uses: "Severe HTN (rarely used now)\nTopical: Glaucoma",
adr: "Severe orthostatic hypotension\nRetrograde ejaculation\nDiarrhoea (unopposed PNS)\nNasal congestion\nFluid retention",
pk: "Poor CNS penetration (does NOT cross BBB)\nBlocked by TCAs (uptake competition)",
color: C.pregang,
},
{
name: "Bretylium",
moa: "Blocks NE release from adrenergic neurons\nAccumulates in nerve terminal",
uses: "Ventricular fibrillation (refractory)\nVentricular tachycardia (historical use)",
adr: "Orthostatic hypotension\nNausea, vomiting\nTransient HTN (initial NE release)",
pk: "IV only β’ Renally excreted\nLargely replaced by amiodarone",
color: C.pregang,
},
{
name: "Ganglionic Blockers",
moa: "Block nicotinic ACh receptors\n(N_N) at autonomic ganglia\nβ Block both SNS and PNS",
uses: "Trimethaphan: Hypertensive crisis,\naortic dissection (historical)\nMecamylamine: Smoking cessation",
adr: "Orthostatic hypotension\nConstipation, urinary retention\nDry mouth, sexual dysfunction\n(Block all ganglia indiscriminately)",
pk: "Trimethaphan: IV infusion\nMecamylamine: Oral",
color: C.pregang,
},
];
preDrugs.forEach((d, i) => {
const col2 = i % 2, row = Math.floor(i / 2);
const dx = 6.85 + col2 * 3.2, dy = 0.9 + row * 3.0;
slide.addShape(pres.ShapeType.rect, { x:dx, y:dy, w:3.1, h:2.75, fill:{color:"1A1710"}, line:{color:d.color, width:1.2} });
slide.addText(d.name, { x:dx, y:dy, w:3.1, h:0.35, fontSize:10, color:d.color, bold:true, align:"center", valign:"middle" });
const rows2 = [
{ label: "MOA: ", val: d.moa },
{ label: "Uses: ", val: d.uses },
{ label: "ADRs: ", val: d.adr },
{ label: "PK: ", val: d.pk },
];
rows2.forEach((r, ri) => {
slide.addText([
{ text: r.label, options: { bold:true, color:C.gold } },
{ text: r.val, options: { color:C.text } },
], { x:dx+0.1, y:dy + 0.38 + ri * 0.57, w:2.9, h:0.52, fontSize:7.5, valign:"top" });
});
});
// Divider line
slide.addShape(pres.ShapeType.line, { x:6.65, y:0.72, w:0, h:6.78, line:{color:"4D5662", width:1.5, dashType:"dash"} });
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// SLIDE 5 β CLINICAL PEARLS, MNEMONICS & COMPARISON TABLE
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
const slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:7.5, fill:{color:C.bg}, line:{color:C.bg} });
// Header
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:13.3, h:0.65, fill:{color:"1C2130"}, line:{color:C.gold, width:2} });
slide.addText("β‘ CLINICAL PEARLS, MNEMONICS & MUST-KNOW COMPARISONS", {
x:0, y:0, w:13.3, h:0.65, fontSize:15, color:C.gold, bold:true, align:"center", valign:"middle",
});
// ββ Mnemonic boxes βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
const mnemonics = [
{
title: "Ξ²-blocker ABCDEs",
color: C.beta,
content: "A β Angina / After MI / Arrhythmias\nB β Blood pressure (HTN)\nC β Cardiac failure (bisoprolol, carvedilol, metoprolol)\nD β Dissection (labetalol)\nE β Extra: glaucoma, migraine, tremor",
},
{
title: "Ξ±-blocker BLAST",
color: C.alpha,
content: "B β BPH (tamsulosin, silodosin)\nL β Lower BP (prazosin, doxazosin)\nA β Alpha pheo (phentolamine, phenoxybenzamine)\nS β Syncope first-dose (warn patients!)\nT β Tamsulosin β floppy iris (tell ophthalmologist!)",
},
{
title: "Centrally Acting CMM",
color: C.central,
content: "C β Clonidine β rebound if stopped abruptly\nM β Methyldopa β Mums (pregnancy safe)\nM β Moxonidine β Mild, less sedation (imidazoline)",
},
{
title: "Presynaptic DRAG",
color: C.pregang,
content: "D β Depletes monoamines (Reserpine β Depression!)\nR β Releases NE initially then blocks (Bretylium)\nA β Autonomic ganglion blockers (block everything)\nG β Guanethidine β Gut effects + orthostatic hypotension",
},
];
mnemonics.forEach((m, i) => {
const col2 = i % 2, row = Math.floor(i / 2);
const mx = 0.2 + col2 * 6.5, my = 0.78 + row * 2.05;
slide.addShape(pres.ShapeType.rect, { x:mx, y:my, w:6.35, h:1.9, fill:{color:"161B22"}, line:{color:m.color, width:1.5} });
slide.addShape(pres.ShapeType.rect, { x:mx, y:my, w:6.35, h:0.35, fill:{color:m.color}, line:{color:m.color} });
slide.addText(m.title, { x:mx, y:my, w:6.35, h:0.35, fontSize:10, color:C.bg, bold:true, align:"center", valign:"middle" });
slide.addText(m.content, { x:mx+0.15, y:my+0.42, w:6.05, h:1.4, fontSize:8.5, color:C.text, valign:"top" });
});
// ββ Comparison table ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
const tableY = 4.95;
slide.addShape(pres.ShapeType.rect, { x:0.2, y:tableY, w:12.9, h:0.35, fill:{color:"1F2933"}, line:{color:"4D5662"} });
slide.addText("QUICK COMPARISON", { x:0.2, y:tableY, w:12.9, h:0.35, fontSize:10, color:C.text, bold:true, align:"center", valign:"middle" });
const headers = ["Drug Class", "Site of Action", "Main Uses", "Key ADR", "Contraindication"];
const rows = [
[C.alpha, "Ξ±1 Blockers", "Post-synaptic Ξ±1", "HTN, BPH, Pheo", "1st-dose syncope", "Caution in HF"],
[C.beta, "Ξ² Blockers (non-sel)","Ξ²1 + Ξ²2 receptors", "HTN, angina, arrhythmia", "Bronchoconstriction", "Asthma, COPD"],
[C.beta, "Ξ² Blockers (cardio)", "Ξ²1 > Ξ²2", "HTN, HF, post-MI", "Bradycardia, fatigue", "2nd/3rd AV block"],
[C.central, "Clonidine", "CNS Ξ±2 agonist", "HTN, withdrawal", "Rebound HTN (stop abruptly)", "Must taper off"],
[C.central, "Methyldopa", "CNS β false TX", "Pregnancy HTN", "Haemolytic anaemia", "Pheochromocytoma"],
[C.pregang, "Reserpine", "VMAT inhibitor", "Severe HTN (historical)", "Depression, Parkinsonism", "History of depression"],
[C.pregang, "Guanethidine", "Nerve terminal", "Severe HTN (historical)", "Orthostatic hypotension", "TCAs block its uptake"],
];
const colWidths = [1.8, 2.0, 1.9, 2.3, 2.3, 2.4];
const colX = [0.2, 2.0, 4.0, 5.9, 8.2, 10.5];
// Header row
headers.forEach((h, ci) => {
slide.addShape(pres.ShapeType.rect, { x:colX[ci], y:tableY+0.35, w:colWidths[ci], h:0.32, fill:{color:"2D333B"}, line:{color:"4D5662"} });
slide.addText(h, { x:colX[ci]+0.05, y:tableY+0.35, w:colWidths[ci]-0.1, h:0.32, fontSize:7.8, color:C.gold, bold:true, valign:"middle" });
});
rows.forEach(([rowColor, ...cells], ri) => {
const ry = tableY + 0.67 + ri * 0.32;
cells.forEach((cell, ci) => {
slide.addShape(pres.ShapeType.rect, { x:colX[ci], y:ry, w:colWidths[ci], h:0.3, fill:{color: ri%2===0 ? "161B22" : "111318"}, line:{color:"2D333B"} });
slide.addText(cell, { x:colX[ci]+0.05, y:ry+0.02, w:colWidths[ci]-0.1, h:0.26, fontSize:7.5, color: ci===0 ? rowColor : C.text, bold: ci===0, valign:"middle" });
});
});
}
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
// WRITE FILE
// ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
pres.writeFile({ fileName: "/home/daytona/workspace/antiadrenergic-mindmap/Antiadrenergic_Drugs_MindMap.pptx" })
.then(() => console.log("β
Done: /home/daytona/workspace/antiadrenergic-mindmap/Antiadrenergic_Drugs_MindMap.pptx"))
.catch(e => { console.error("β Error:", e); process.exit(1); });
cd /home/daytona/workspace/antiadrenergic-mindmap && node build.js 2>&1
Antiadrenergic Drugs MindMap
Presentation Β· PPTX
| Color | Class |
|---|---|
| π΅ Blue | Central Hub |
| π΄ Coral-Red | Ξ±-Blockers |
| π’ Green | Ξ²-Blockers |
| π£ Lavender | Centrally Acting |
| π Amber | Ganglionic / Presynaptic |
Create a quick-reference PDF cheat sheet for exam prep
~/antiadrenergic-mindmap/cheatsheet.py
"""
Antiadrenergic Drugs β Exam Prep Cheat Sheet
2-page A4 PDF using ReportLab
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.platypus.flowables import BalancedColumns
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
import os
OUT = "/home/daytona/workspace/antiadrenergic-mindmap/Antiadrenergic_CheatSheet.pdf"
# ββ Colour palette ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
BG = colors.HexColor("#0D1117")
PANEL = colors.HexColor("#161B22")
BORDER = colors.HexColor("#2D333B")
ACCENT = colors.HexColor("#58A6FF") # blue β headers
ALPHA_C = colors.HexColor("#FF7B72") # coral β alpha
BETA_C = colors.HexColor("#3FB950") # green β beta
CENT_C = colors.HexColor("#D2A8FF") # lavender β central
PRE_C = colors.HexColor("#FFA657") # amber β presynaptic
GOLD = colors.HexColor("#F8E45C")
WHITE = colors.white
DIM = colors.HexColor("#8B949E")
TEXT = colors.HexColor("#E6EDF3")
RED = colors.HexColor("#FF6B6B")
# ββ Doc setup βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc = SimpleDocTemplate(
OUT,
pagesize=A4,
leftMargin=10*mm, rightMargin=10*mm,
topMargin=8*mm, bottomMargin=8*mm,
title="Antiadrenergic Drugs Cheat Sheet",
author="Orris Medical"
)
W, H = A4
CW = W - 20*mm # content width
story = []
# ββ Style helpers βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def S(name, base=None, **kw):
s = ParagraphStyle(name, **kw)
return s
BODY = S("body", fontSize=7, textColor=TEXT, leading=9.5, fontName="Helvetica")
BODY_BOLD = S("body_bold", fontSize=7, textColor=TEXT, leading=9.5, fontName="Helvetica-Bold")
TINY = S("tiny", fontSize=6, textColor=DIM, leading=8, fontName="Helvetica")
LABEL = S("label", fontSize=7, textColor=GOLD, leading=9, fontName="Helvetica-Bold")
HEAD = S("head", fontSize=7.5, textColor=WHITE, leading=9, fontName="Helvetica-Bold", alignment=TA_CENTER)
RED_S = S("red_s", fontSize=6.5, textColor=RED, leading=8.5, fontName="Helvetica")
ALPHA_S = S("alpha_s", fontSize=7, textColor=ALPHA_C, leading=9, fontName="Helvetica-Bold")
BETA_S = S("beta_s", fontSize=7, textColor=BETA_C, leading=9, fontName="Helvetica-Bold")
CENT_S = S("cent_s", fontSize=7, textColor=CENT_C, leading=9, fontName="Helvetica-Bold")
PRE_S = S("pre_s", fontSize=7, textColor=PRE_C, leading=9, fontName="Helvetica-Bold")
def p(txt, style=None): return Paragraph(txt, style or BODY)
def pb(txt): return Paragraph(f"<b>{txt}</b>", BODY)
def hr(col=BORDER, thick=0.5): return HRFlowable(width="100%", thickness=thick, color=col, spaceAfter=1, spaceBefore=1)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PAGE BACKGROUND (drawn via canvas callback)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def bg_canvas(canvas, doc):
canvas.saveState()
canvas.setFillColor(BG)
canvas.rect(0, 0, W, H, fill=1, stroke=0)
canvas.restoreState()
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# TITLE BANNER
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
title_data = [[
Paragraph(
'<font color="#58A6FF"><b>ANTIADRENERGIC DRUGS</b></font> '
'<font color="#8B949E">| Exam Quick-Reference Cheat Sheet</font>',
S("t", fontSize=13, textColor=WHITE, leading=16, fontName="Helvetica-Bold")
)
]]
title_tbl = Table(title_data, colWidths=[CW])
title_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), PANEL),
("BOX", (0,0), (-1,-1), 1, ACCENT),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING",(0,0),(-1,-1),5),
("LEFTPADDING",(0,0),(-1,-1),8),
]))
story.append(title_tbl)
story.append(Spacer(1, 3*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# HELPER: section header
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def section_hdr(txt, col):
tbl = Table([[Paragraph(f"<b>{txt}</b>", S("sh", fontSize=9, textColor=colors.HexColor("#0D1117"), leading=11, fontName="Helvetica-Bold", alignment=TA_CENTER))]],
colWidths=[CW])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), col),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
]))
return tbl
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# HELPER: drug card row [name, moa, uses, adr, note]
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def drug_table(rows, col_color, col_widths=None):
if col_widths is None:
col_widths = [28*mm, 40*mm, 42*mm, 42*mm, 35*mm]
header = [
Paragraph("<b>Drug</b>", S("h", fontSize=7, textColor=col_color, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Mechanism</b>", S("h", fontSize=7, textColor=col_color, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Uses</b>", S("h", fontSize=7, textColor=col_color, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Key ADRs</b>", S("h", fontSize=7, textColor=GOLD, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Pearl / Note</b>", S("h", fontSize=7, textColor=GOLD, leading=9, fontName="Helvetica-Bold")),
]
data = [header]
for r in rows:
data.append([p(c) for c in r])
tbl = Table(data, colWidths=col_widths, repeatRows=1)
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1F2933")),
("BACKGROUND", (0,1), (-1,-1), PANEL),
("ROWBACKGROUNDS",(0,1),(-1,-1),[PANEL, colors.HexColor("#111318")]),
("GRID", (0,0), (-1,-1), 0.4, BORDER),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING",(0,0),(-1,-1),2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING",(0,0), (-1,-1), 3),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return tbl
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# β Ξ±-BLOCKERS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_hdr("β Ξ±-BLOCKERS", ALPHA_C))
story.append(Spacer(1, 1*mm))
alpha_rows = [
# Drug | MOA | Uses | ADRs | Pearl
["Phentolamine",
"Competitive reversible Ξ±1+Ξ±2 block",
"Pheo hypertensive crisis\nDx: phentolamine test",
"Reflex tachycardia (Ξ±2 blockβNEβ)\nOrtho hypotension",
"IV only; short-acting\nReversal: norepinephrine"],
["Phenoxybenzamine",
"Non-competitive IRREVERSIBLE Ξ±1+Ξ±2 block",
"Pre-op pheo prep\nPheo long-term",
"Reflex tachycardia\nNasal stuffiness\nEjaculatory dysfunction",
"Covalent bond β effect lasts days\nPre-op: start 1-2 wks before surgery"],
["Prazosin",
"Selective Ξ±1 block (post-synaptic)\nΞ±2 intact β less tachycardia",
"HTN β’ BPH\nRaynaud β’ PTSD nightmares",
"1st-dose syncope!\nOrthostatic hypotension\nPalpitations",
"PROTOTYPE Ξ±1 blocker\nTake 1st dose at bedtime!"],
["Terazosin",
"Selective Ξ±1 block",
"HTN + BPH",
"Orthostatic hypotension\nDizziness",
"Longer tΒ½ than prazosin\nOnce daily"],
["Doxazosin",
"Selective Ξ±1 block",
"HTN + BPH",
"Orthostatic hypotension\nPeripheral edema",
"Longest tΒ½ in class\nALLHAT trial: avoid for HTN alone"],
["Tamsulosin",
"Uroselective Ξ±1A > Ξ±1B block",
"BPH (1st line)\nKidney stone passage",
"Retrograde ejaculation\nOrthostasis (less)",
"β FLOPPY IRIS syndrome\n(tell ophthalmologist before cataract sx!)"],
["Alfuzosin",
"Uroselective Ξ±1A block",
"BPH",
"Dizziness, GI upset",
"Less BP effect than prazosin"],
["Silodosin",
"MOST uroselective Ξ±1A",
"BPH",
"Retrograde ejaculation (most common)\nDiarrhea",
"Highest uroselectivity in class"],
]
story.append(drug_table(alpha_rows, ALPHA_C, [30*mm, 38*mm, 35*mm, 42*mm, 42*mm]))
story.append(Spacer(1, 2*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# β‘ Ξ²-BLOCKERS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_hdr("β‘ Ξ²-BLOCKERS", BETA_C))
story.append(Spacer(1, 1*mm))
beta_rows = [
["Propranolol",
"Non-selective Ξ²1+Ξ²2 block\nLipophilic (crosses BBB)",
"HTN β’ Angina β’ MI prophylaxis\nArrhythmias β’ Hyperthyroidism\nMigraine prophylaxis β’ Tremor\nPortal HTN (varices)\nGlaucoma (topical timolol)",
"Bronchoconstriction (Ξ²2β)\nMasks hypoglycemia sx\nCold extremities\nFatigue, depression",
"PROTOTYPE Ξ²-blocker\nHighest first-pass metabolism\nDo NOT stop abruptly!"],
["Metoprolol",
"Cardioselective Ξ²1 > Ξ²2\nLipophilic",
"HTN β’ Angina β’ HF (succinate XL)\nMI β’ Arrhythmia",
"Bradycardia β’ Fatigue\nWorse glucose tolerance",
"Tartrate (IR) vs Succinate (XL)\nFor HF: SUCCINATE only (MERIT-HF)\nMost widely used Ξ²-blocker"],
["Atenolol",
"Cardioselective Ξ²1\nHydrophilic (no CNS effects)",
"HTN β’ Angina β’ Post-MI",
"Bradycardia\nRenal excretion (dose-adjust in CKD)",
"No CNS ADRs (hydrophilic)\nOld standard for HTN"],
["Bisoprolol",
"Highly selective Ξ²1 (most selective after nebivolol)",
"HTN β’ HF (CIBIS-II trial)\nAngina",
"Bradycardia β’ Fatigue",
"One of three Ξ²-blockers proven for HF mortality\n(bisoprolol, carvedilol, metoprolol succinate)"],
["Esmolol",
"Ultra-short acting Ξ²1 selective\nHydrophilic; IV only",
"Intra-op HTN & tachycardia\nSVT (acute control)\nAortic dissection",
"Bradycardia β’ Hypotension",
"tΒ½ = 9 MIN (metabolized by plasma esterases)\nTitrated by infusion"],
["Nebivolol",
"Highest Ξ²1 selectivity + releases NO\nβ vasodilation (unique!)",
"HTN β’ HF (adjunct)",
"Headache (vasodilation)\nBradycardia",
"VASODILATING Ξ²-blocker via NO\nBest metabolic profile"],
["Pindolol",
"Non-selective Ξ²1+Ξ²2 + ISA\n(partial agonist)",
"HTN",
"Less bradycardia than propranolol\nCan worsen angina",
"ISA = intrinsic sympathomimetic activity\nLess bradycardia at rest"],
["Sotalol",
"Non-selective Ξ²-block + K+ channel block\n(Class II + III antiarrhythmic)",
"Ventricular arrhythmias\nAtrial fibrillation",
"QT prolongation β Torsades de Pointes!\nBradycardia",
"Monitor QTc carefully\nHydrophilic; renally cleared"],
["Labetalol",
"Ξ±1 + Ξ²1 + Ξ²2 block\nΞ±1:Ξ² ratio 1:3 (oral) / 1:7 (IV)",
"HTN emergency in pregnancy\nHypertensive urgency/emergency\nAortic dissection",
"Orthostatic hypotension\nBronchospasm (Ξ²2 block)",
"Drug of choice: Hypertensive\nemergency in PREGNANCY\n(Methyldopa = chronic; Labetalol = acute)"],
["Carvedilol",
"Ξ±1 + Ξ²1 + Ξ²2 block + antioxidant\nNon-selective",
"HF (COPERNICUS trial)\nPost-MI LV dysfunction\nHTN",
"Dizziness β’ Hypotension\nWeight gain",
"One of 3 mortality-reducing Ξ²-blockers in HF\nAntioxidant property: unique"],
["Timolol",
"Non-selective Ξ²1+Ξ²2 block",
"Glaucoma (topical)\nPost-MI β’ Migraine prophylaxis",
"Bronchoconstriction (topical absorption!)\nBradycardia",
"Topical: systemic absorption still occurs\nWarn asthmatic patients!"],
]
story.append(drug_table(beta_rows, BETA_C, [28*mm, 42*mm, 35*mm, 40*mm, 42*mm]))
story.append(Spacer(1, 2*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# β’ CENTRALLY ACTING
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_hdr("β’ CENTRALLY ACTING ANTIADRENERGICS", CENT_C))
story.append(Spacer(1, 1*mm))
central_rows = [
["Clonidine",
"Ξ±2 agonist in brainstem (NTS + locus coeruleus)\nβ β sympathetic outflow β βNE, βHR, βBP",
"Hypertension (2nd line)\nOpioid withdrawal\nAlcohol withdrawal\nADHD (off-label)\nMigraine prophylaxis\nMenopausal flushing",
"Sedation β’ Dry mouth\nConstipation β’ Bradycardia\nβ Rebound HTN (abrupt stop)\nSexual dysfunction",
"Available oral + transdermal patch\nNEVER stop abruptly (rebound HTN crisis)\nOpioid withdrawal: clonidine covers autonomic sx\nbut not craving/pain"],
["Methyldopa",
"Prodrug β Ξ±-methyldopamine\nβ Ξ±-methylnorepinephrine (false TX)\nβ Stimulates Ξ±2 in CNS β β sympathetic outflow",
"HTN in PREGNANCY (drug of choice!)\nHypertensive emergencies (IV)\nGeneral HTN (older patients)",
"Sedation, depression\n+ve Coombs test (20%)\nHaemolytic anaemia (0.5%)\nHepatotoxicity β’ Drug fever\nSodium/water retention",
"DOC for chronic HTN in PREGNANCY\nFalse TX concept: competes with DOPA\nIV form available for HTN emergency"],
["Moxonidine",
"Selective imidazoline I1 receptor agonist\n(+ weak Ξ±2 agonist)\nβ β central sympathetic tone",
"Mild-moderate hypertension",
"Dry mouth β’ Dizziness\nLess sedation than clonidine",
"Imidazoline selectivity = fewer CNS ADRs\nMetabolic neutral (no lipid/glucose effects)"],
["Rilmenidine",
"Selective imidazoline I1 agonist\nMinimal Ξ±2 activity",
"Hypertension",
"Well tolerated β’ Dry mouth",
"Best tolerated centrally acting drug\nOnce daily dosing"],
]
story.append(drug_table(central_rows, CENT_C, [25*mm, 42*mm, 35*mm, 40*mm, 45*mm]))
story.append(Spacer(1, 2*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# β£ PRESYNAPTIC / GANGLIONIC
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_hdr("β£ PRESYNAPTIC & GANGLIONIC BLOCKERS", PRE_C))
story.append(Spacer(1, 1*mm))
pre_rows = [
["Reserpine",
"Irreversibly inhibits VMAT-2\nβ Depletes NE, DA, 5-HT\nfrom storage vesicles (presynaptic)",
"Severe HTN (combination; historical)\nRarely used now",
"β DEPRESSION (monoamine depletion)\nParkinsonism (β DA)\nSedation β’ Nasal congestion\nPeptic ulcer (β ACh relative)\nDiarrhea",
"Effect lasts days-weeks (irreversible)\nHistorically important for understanding NE storage\nCI: History of depression or Parkinson's"],
["Guanethidine",
"Enters via NET β taken up into nerve terminal\nβ Displaces NE from vesicles\nβ Blocks exocytosis of NE",
"Severe hypertension (historical)\nGlaucoma (topical)",
"Severe orthostatic hypotension\nRetrograde ejaculation\nDiarrhea (β GI motility)\nNasal congestion",
"Does NOT cross BBB (no CNS effects)\nβ Blocked by TCAs (competes for NET)\nGuanadrel: similar drug, faster onset"],
["Bretylium",
"Accumulates in adrenergic nerve terminals\nβ Initial NE release (transient HTN)\nβ Then blocks NE release",
"Refractory VF / VT (historical)\n(largely replaced by amiodarone)",
"Orthostatic hypotension\nTransient HTN (initial NE release)\nNausea",
"IV only; renally excreted\nBiphasic response: HTN first, then hypotension"],
["Trimethaphan\n(Ganglionic blocker)",
"Blocks nAChR (NN) at autonomic ganglia\nβ Blocks BOTH SNS and PNS",
"Hypertensive crisis (historical)\nControlled hypotension in surgery\nAortic dissection (historical)",
"Orthostatic hypotension\nConstipation, urinary retention\nDry mouth, blurred vision\nSexual dysfunction",
"Non-selective: blocks all ganglia\nHistorical; largely replaced by nitroprusside\nMecamylamine (oral): smoking cessation"],
]
story.append(drug_table(pre_rows, PRE_C, [28*mm, 42*mm, 32*mm, 42*mm, 43*mm]))
story.append(Spacer(1, 3*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# MNEMONICS + CONTRAST BOXES (side by side)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_hdr("β‘ MNEMONICS, PEARLS & HIGH-YIELD CONTRASTS", GOLD))
story.append(Spacer(1, 1.5*mm))
MN_W = (CW - 4*mm) / 2
def mnemonic_card(title, col, lines):
content = []
for l in lines:
content.append(Paragraph(l, S("mn", fontSize=7, textColor=TEXT, leading=9.5, fontName="Helvetica")))
hdr = Paragraph(f"<b>{title}</b>", S("mnh", fontSize=8, textColor=colors.HexColor("#0D1117"), leading=10, fontName="Helvetica-Bold", alignment=TA_CENTER))
inner = Table([[hdr]] + [[c] for c in content], colWidths=[MN_W - 4*mm])
inner.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,0), col),
("BACKGROUND", (0,1),(-1,-1), PANEL),
("TOPPADDING", (0,0),(-1,-1), 2),
("BOTTOMPADDING",(0,0),(-1,-1), 2),
("LEFTPADDING", (0,0),(-1,-1), 4),
("BOX", (0,0),(-1,-1), 0.8, col),
]))
return inner
mn1 = mnemonic_card("Ξ²-blockers: ABCDE Mnemonic", BETA_C, [
"A β Angina / After MI / Arrhythmias",
"B β Blood Pressure (HTN)",
"C β Cardiac failure (carvedilol, bisoprolol, metoprolol-XL)",
"D β Dissection / aortic (labetalol IV)",
"E β Extras: glaucoma, migraine, tremor, hyperthyroidism",
])
mn2 = mnemonic_card("Ξ±-blockers: BLAST Mnemonic", ALPHA_C, [
"B β BPH (tamsulosin, silodosin β uroselective)",
"L β Lower BP (prazosin, doxazosin)",
"A β Alpha pheo (phentolamine IV; phenoxybenzamine pre-op)",
"S β Syncope 1st dose β take at BEDTIME",
"T β Tamsulosin β floppy iris (warn ophthalmologist!)",
])
mn3 = mnemonic_card("Centrally Acting: CMR", CENT_C, [
"C β Clonidine β Can't stop (rebound HTN) β taper slowly",
"M β Methyldopa β Mums (pregnancy DOC) β +ve Coombs",
"R β Rebound risk with clonidine: NEVER abrupt stop",
"Extra: Moxonidine = imidazoline selectivity = less sedation",
])
mn4 = mnemonic_card("Presynaptic: DRAG Mnemonic", PRE_C, [
"D β Depletes monoamines (Reserpine) β Depression!",
"R β Releases NE first, then blocks (Bretylium)",
"A β Autonomic ganglion blockers (trimethaphan β blocks all)",
"G β Guanethidine: blocked by TCAs; causes Orthostatic βBP",
])
mnem_tbl = Table([[mn1, mn2], [mn3, mn4]],
colWidths=[MN_W, MN_W],
spaceBefore=0, spaceAfter=0)
mnem_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), BG),
("TOPPADDING", (0,0),(-1,-1), 2),
("BOTTOMPADDING", (0,0),(-1,-1), 2),
("LEFTPADDING", (0,0),(-1,-1), 0),
("RIGHTPADDING", (0,0),(-1,-1), 2),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
story.append(mnem_tbl)
story.append(Spacer(1, 3*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# HIGH-YIELD COMPARISON TABLE
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_hdr("HIGH-YIELD COMPARISONS β FREQUENTLY TESTED CONTRASTS", ACCENT))
story.append(Spacer(1, 1*mm))
contrast_data = [
# Header
[Paragraph("<b>Question</b>", S("q", fontSize=7.5, textColor=ACCENT, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Answer</b>", S("a", fontSize=7.5, textColor=ACCENT, leading=9, fontName="Helvetica-Bold"))],
# rows
["DOC: Pregnancy HTN (chronic)", "Methyldopa (safe; also labetalol, nifedipine)"],
["DOC: Hypertensive emergency in pregnancy","Labetalol IV (or hydralazine IV)"],
["DOC: Pre-op pheo prep", "Phenoxybenzamine (irreversible Ξ±-block, 1-2 wks before surgery)"],
["DOC: Pheo hypertensive crisis", "Phentolamine IV (reversible, short-acting)"],
["Ξ²-blocker for HF (3 proven)", "Bisoprolol, Carvedilol, Metoprolol succinate (all β mortality)"],
["Ξ²-blocker with ISA", "Pindolol, Acebutolol, Carteolol β less resting bradycardia"],
["Ultra-short Ξ²-blocker", "Esmolol (tΒ½ 9 min; IV infusion; plasma esterases)"],
["Most uroselective Ξ±1-blocker", "Silodosin (Ξ±1A >> Ξ±1B) β for BPH, causes retrograde ejaculation"],
["Ξ±1-blocker that causes floppy iris", "Tamsulosin β β must inform ophthalmologist before cataract surgery"],
["IRREVERSIBLE Ξ±-blocker", "Phenoxybenzamine (covalent bond to receptor)"],
["Ξ²-blocker CI in asthma?", "All Ξ²-blockers worsen asthma; even cardioselective ones at high dose"],
["Rebound HTN risk", "Clonidine (central Ξ±2 agonist) β NEVER stop abruptly; taper over 1-2 wks"],
["Drug causing haemolytic anaemia", "Methyldopa (positive Coombs test in 20%; actual haemolysis in 0.5%)"],
["Drug causing depression", "Reserpine (depletes monoamines β NE, DA, 5-HT)"],
["Ξ²-blocker + QT prolongation", "Sotalol (Class II + III) β risk of Torsades de Pointes"],
["Vasodilating Ξ²-blocker mechanism", "Nebivolol (NO release) vs Carvedilol / Labetalol (Ξ±1 blockade)"],
["Ξ²-blocker blocked by TCAs", "Guanethidine β TCAs block its uptake into nerve terminal β no effect"],
["Drug for opioid withdrawal (autonomic)","Clonidine (Ξ±2 agonist) β covers sweating, tachycardia, HTN, anxiety"],
["Ξ±-blocker for PTSD nightmares", "Prazosin (blocks Ξ±1 receptors in brain during REM sleep)"],
["Betablocker for glaucoma (topical)", "Timolol (non-selective) and Betaxolol (selective Ξ²1)"],
["Ξ²-blocker safe in peripheral arterial disease","Nebivolol or Bisoprolol (highly cardioselective + vasodilating)"],
]
def alt_row(data):
tbl = Table(data, colWidths=[70*mm, CW - 70*mm - 0.4*mm])
style = [
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1F2933")),
("ROWBACKGROUNDS",(0,1), (-1,-1), [PANEL, colors.HexColor("#111318")]),
("GRID", (0,0), (-1,-1), 0.4, BORDER),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("FONTNAME", (0,0), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TEXTCOLOR", (0,1), (0,-1), GOLD),
("TEXTCOLOR", (1,1), (1,-1), TEXT),
]
tbl.setStyle(TableStyle(style))
return tbl
story.append(alt_row(contrast_data))
story.append(Spacer(1, 3*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# RECEPTOR PHARMACOLOGY QUICK-REF
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_hdr("RECEPTOR PHARMACOLOGY QUICK-REFERENCE", ACCENT))
story.append(Spacer(1, 1*mm))
rec_data = [
[Paragraph("<b>Receptor</b>", S("rh", fontSize=7.5, textColor=ACCENT, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Location</b>", S("rh", fontSize=7.5, textColor=ACCENT, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Effect when stimulated</b>", S("rh", fontSize=7.5, textColor=ACCENT, leading=9, fontName="Helvetica-Bold")),
Paragraph("<b>Effect when BLOCKED</b>", S("rh", fontSize=7.5, textColor=GOLD, leading=9, fontName="Helvetica-Bold"))],
["Ξ±1 (Gq)", "Vascular smooth muscle, iris dilator, urethra, GIT",
"Vasoconstriction, mydriasis, urinary retention",
"Vasodilation, miosis, urinary relaxation (BPH relief)"],
["Ξ±2 (Gi)", "Presynaptic (autoreceptor), platelets, CNS",
"β NE release, platelet aggregation, β insulin",
"β NE release β reflex tachycardia (non-selective blockers)"],
["Ξ²1 (Gs)", "Heart, kidney (JG cells)",
"β HR, β contractility, β renin",
"β HR, β contractility, β renin (β β BP)"],
["Ξ²2 (Gs)", "Bronchi, uterus, vascular SM, liver",
"Bronchodilation, uterine relaxation, glycogenolysis",
"Bronchoconstriction, masks hypoglycemia, uterine contraction"],
["Ξ²3 (Gs)", "Adipose tissue, bladder detrusor",
"Lipolysis, bladder relaxation",
"Rarely targeted clinically (mirabegron activates Ξ²3)"],
["I1 (imidazoline)", "Brainstem (RVLM)",
"β Sympathetic outflow β β BP",
"N/A (moxonidine/rilmenidine AGONISTS at I1)"],
]
rec_tbl = Table(rec_data, colWidths=[30*mm, 42*mm, 60*mm, 55*mm])
rec_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1F2933")),
("ROWBACKGROUNDS",(0,1),(-1,-1), [PANEL, colors.HexColor("#111318")]),
("GRID", (0,0),(-1,-1), 0.4, BORDER),
("TOPPADDING", (0,0),(-1,-1), 2),
("BOTTOMPADDING", (0,0),(-1,-1), 2),
("LEFTPADDING", (0,0),(-1,-1), 4),
("RIGHTPADDING", (0,0),(-1,-1), 4),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
("FONTNAME", (0,1),(-1,-1), "Helvetica"),
("FONTSIZE", (0,0),(-1,-1), 7),
("TEXTCOLOR", (0,1),(0,-1), GOLD),
("TEXTCOLOR", (1,1),(-1,-1), TEXT),
]))
story.append(rec_tbl)
story.append(Spacer(1, 3*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# CONTRAINDICATIONS STRIP
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ci_data = [[
Paragraph("<b>β KEY CONTRAINDICATIONS</b>", S("ci", fontSize=8, textColor=RED, leading=10, fontName="Helvetica-Bold")),
Paragraph(
"Ξ²-blockers: Asthma/COPD β’ 2Β°/3Β° AV block β’ Sick sinus syndrome β’ Severe bradycardia β’ Severe PAD "
"| Ξ±-blockers: 1st-dose hypotension (warn pt!) β’ Caution in HF with reduced EF "
"| Clonidine: NEVER stop abruptly "
"| Methyldopa: Avoid in active hepatic disease, pheo "
"| Reserpine: History of depression, Parkinsonism, ulcers "
"| Guanethidine: TCAs block uptake β renders drug ineffective",
S("ci2", fontSize=7, textColor=TEXT, leading=9, fontName="Helvetica")
)
]]
ci_tbl = Table(ci_data, colWidths=[38*mm, CW - 38*mm])
ci_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), colors.HexColor("#2D1B1B")),
("BOX", (0,0),(-1,-1), 1, RED),
("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"),
]))
story.append(ci_tbl)
story.append(Spacer(1, 2*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Ξ²-BLOCKER SELECTIVITY SPECTRUM
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
spec_data = [[
Paragraph("<b>Ξ²1 Selectivity Spectrum</b>", S("sp", fontSize=7.5, textColor=BETA_C, leading=9, fontName="Helvetica-Bold")),
Paragraph(
"<font color='#FF7B72'>Non-selective:</font> Propranolol = Nadolol = Timolol = Sotalol = Pindolol (ISA) "
"<font color='#8B949E'>β</font> "
"<font color='#3FB950'>Cardioselective Ξ²1:</font> Atenolol < Metoprolol < Bisoprolol < <b>Nebivolol</b> (+ NO vasodilation) "
"<font color='#8B949E'>β</font> "
"<font color='#FFA657'>Mixed Ξ±+Ξ²:</font> Labetalol (Ξ±1:Ξ² = 1:3 oral, 1:7 IV) β’ Carvedilol (Ξ±1+Ξ²1+Ξ²2+antioxidant)",
S("spec2", fontSize=7, textColor=TEXT, leading=9, fontName="Helvetica")
)
]]
spec_tbl = Table(spec_data, colWidths=[35*mm, CW - 35*mm])
spec_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), colors.HexColor("#0E1F0E")),
("BOX", (0,0),(-1,-1), 1, BETA_C),
("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"),
]))
story.append(spec_tbl)
story.append(Spacer(1, 2*mm))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# FOOTER
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
footer_data = [[
Paragraph(
'<font color="#58A6FF"><b>Orris Medical | Antiadrenergic Drugs Cheat Sheet</b></font>'
'<font color="#8B949E"> β For exam preparation only. Verify all clinical decisions against current guidelines.</font>',
S("ft", fontSize=6.5, textColor=DIM, leading=8.5, fontName="Helvetica", alignment=TA_CENTER)
)
]]
ft_tbl = Table(footer_data, colWidths=[CW])
ft_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), PANEL),
("BOX", (0,0),(-1,-1), 0.5, BORDER),
("TOPPADDING", (0,0),(-1,-1), 3),
("BOTTOMPADDING", (0,0),(-1,-1), 3),
("LEFTPADDING", (0,0),(-1,-1), 5),
]))
story.append(footer_data[0][0])
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BUILD
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story, onFirstPage=bg_canvas, onLaterPages=bg_canvas)
print(f"β
PDF saved: {OUT}")
cd /home/daytona/workspace/antiadrenergic-mindmap && python cheatsheet.py 2>&1
Antiadrenergic CheatSheet
PDF Document Β· PDF