Histamine releasing anesthetic drugs and muscle relaxants and their anesthetic importance
"Histamine release typically is a direct action of the muscle relaxant on the mast cell rather than anaphylaxis mediated by immunoglobulin E." - Goodman & Gilman's, p. 261
| Drug | Histamine Release | Clinical Significance |
|---|---|---|
| Morphine | Significant | Hypotension, urticaria, flushing, pruritus |
| Meperidine (pethidine) | Moderate | Hypotension, skin effects |
| Codeine | Moderate | Flushing, urticaria |
| Fentanyl | None/negligible | Preferred in hemodynamically compromised patients |
| Sufentanil | None | High-dose cardiac anesthesia |
| Remifentanil | None | - |
"Bolus doses of meperidine, hydromorphone, and morphine evoke varying amounts of histamine release that can lead to profound drops in systemic vascular resistance and arterial blood pressure. The potential hazards of histamine release can be minimized by infusing opioids slowly or by pretreatment with H1 and H2 antagonists." - Morgan & Mikhail's Clinical Anesthesiology, 7e, p. 356
| Drug | Histamine Release |
|---|---|
| Thiopental (barbiturates) | Yes - from mast cells |
| Propofol | Minimal/rare |
| Etomidate | None |
| Ketamine | None |
"Compared to propofol, barbiturates produce a higher incidence of wheezing in asthmatics, attributed to histamine release from mast cells during induction of anesthesia." - Goodman & Gilman's
"Thiopental should not be used in these patients [hemodynamically stable patients with severe bronchospasm] because it provokes release of histamine and can induce bronchospasm." - Roberts and Hedges' Clinical Procedures in Emergency Medicine
| Drug | Class | Histamine Release | Autonomic Effects |
|---|---|---|---|
| d-Tubocurarine (dTc) | Benzylisoquinolinium | Marked (+++); also ganglionic blockade | Ganglionic block |
| Atracurium | Benzylisoquinolinium | Slight (+) | None |
| Mivacurium | Benzylisoquinolinium | Slight (similar to atracurium) | None |
| Cisatracurium | Benzylisoquinolinium | None/minimal (0) | None |
| Succinylcholine | Depolarizing | Slight | Muscarinic + ganglionic stimulation |
| Pancuronium | Steroidal | None (0) | Vagolytic (tachycardia) |
| Vecuronium | Steroidal | None (0) | None |
| Rocuronium | Steroidal | None (0) | Slight vagolytic |
| Gantacurium | Chlorofumarate | Slight (+) | None |
"It is approximately four times as potent as atracurium, and in contrast to atracurium, it does not cause histamine release, thus indicating that histamine release may be stereospecific." - Miller's Anesthesia, 10e
| Plasma Histamine Concentration | Effects |
|---|---|
| Mild elevation | Skin flushing, urticaria along vein of injection |
| Moderate elevation | Hypotension (peripheral vasodilation), tachycardia, bronchospasm |
| Severe elevation | Anaphylactoid/anaphylactic reaction, cardiovascular collapse |

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/histamine-anesthesia && find /usr/share/fonts -name "DejaVuSans.ttf" 2>/dev/null | head -3; find /home -name "DejaVuSans.ttf" 2>/dev/null | head -3
~/histamine-anesthesia/build_pdf.py
#!/usr/bin/env python3
"""
PDF: Histamine-Releasing Anesthetic Drugs and Muscle Relaxants
"""
import urllib.request
import io
import os
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_JUSTIFY, TA_CENTER
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, Image
)
from reportlab.platypus.flowables import Flowable
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# ── Register DejaVuSans ──────────────────────────────────────────────────────
FONT_PATH = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
FONT_BOLD_PATH = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
pdfmetrics.registerFont(TTFont("DejaVuSans", FONT_PATH))
pdfmetrics.registerFont(TTFont("DejaVuSans-Bold", FONT_BOLD_PATH))
# ── Colors ───────────────────────────────────────────────────────────────────
DEEP_BLUE = colors.HexColor("#1a3a5c")
MID_BLUE = colors.HexColor("#2e6da4")
LIGHT_BLUE = colors.HexColor("#e8f0fb")
ALT_ROW = colors.HexColor("#eef3f8")
AMBER_BG = colors.HexColor("#fff4e0")
AMBER_TEXT = colors.HexColor("#7a2b00")
GREEN_BG = colors.HexColor("#eaf7ea")
GREEN_TEXT = colors.HexColor("#1a5c1a")
RED_BG = colors.HexColor("#fdecea")
RED_TEXT = colors.HexColor("#8b0000")
YELLOW_BG = colors.HexColor("#fff9c4")
GRID_COLOR = colors.HexColor("#aabbcc")
WHITE = colors.white
BLACK = colors.black
LIGHT_GRAY = colors.HexColor("#f5f5f5")
PAGE_W, PAGE_H = A4
MARGIN = 2 * cm
OUTPUT_PATH = "/home/daytona/workspace/histamine-anesthesia/Histamine_Releasing_Drugs_Anesthesia.pdf"
# ── Document ─────────────────────────────────────────────────────────────────
def make_doc():
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=2.5 * cm, bottomMargin=2.5 * cm,
title="Histamine-Releasing Anesthetic Drugs and Muscle Relaxants",
author="Orris Medical"
)
return doc
def on_page(canvas, doc):
"""Footer: title left, page number right."""
canvas.saveState()
canvas.setFont("DejaVuSans", 8)
canvas.setFillColor(colors.HexColor("#555555"))
canvas.drawString(MARGIN, 1.2 * cm, "Histamine-Releasing Drugs in Anesthesia")
canvas.drawRightString(PAGE_W - MARGIN, 1.2 * cm, f"Page {doc.page}")
canvas.restoreState()
# ── Style helpers ─────────────────────────────────────────────────────────────
def h1_style():
return ParagraphStyle("H1", fontName="DejaVuSans-Bold", fontSize=13,
textColor=WHITE, backColor=DEEP_BLUE,
spaceBefore=16, spaceAfter=6,
leftIndent=-4, rightIndent=-4,
borderPad=6, leading=18)
def h2_style():
return ParagraphStyle("H2", fontName="DejaVuSans-Bold", fontSize=11,
textColor=MID_BLUE, spaceBefore=12, spaceAfter=4,
leading=15)
def h3_style():
return ParagraphStyle("H3", fontName="DejaVuSans-Bold", fontSize=10,
textColor=DEEP_BLUE, spaceBefore=8, spaceAfter=3,
leading=14)
def body_style():
return ParagraphStyle("Body", fontName="DejaVuSans", fontSize=9.5,
leading=14, spaceAfter=5, alignment=TA_JUSTIFY)
def bullet_style():
return ParagraphStyle("Bullet", fontName="DejaVuSans", fontSize=9.5,
leading=13, spaceAfter=3,
leftIndent=14, firstLineIndent=-10)
def box_style(bg, fg):
return ParagraphStyle("Box", fontName="DejaVuSans", fontSize=9.5,
backColor=bg, textColor=fg,
leading=13, spaceAfter=4,
borderPad=6, leftIndent=8, rightIndent=8)
def italic_style():
return ParagraphStyle("Italic", fontName="DejaVuSans", fontSize=9,
textColor=colors.HexColor("#444444"),
leading=13, spaceAfter=4, alignment=TA_JUSTIFY,
leftIndent=14, rightIndent=8)
def caption_style():
return ParagraphStyle("Caption", fontName="DejaVuSans", fontSize=8.5,
textColor=colors.HexColor("#555555"),
leading=12, spaceAfter=6, alignment=TA_CENTER)
# ── Table builder ─────────────────────────────────────────────────────────────
def build_table(headers, rows, col_widths, caption=None):
body_s = ParagraphStyle("TC", fontName="DejaVuSans", fontSize=9, leading=12)
bold_s = ParagraphStyle("TCB", fontName="DejaVuSans-Bold", fontSize=9, leading=12, textColor=WHITE)
cap_s = caption_style()
hdr_row = [Paragraph(h, bold_s) for h in headers]
data = [hdr_row]
for i, row in enumerate(rows):
styled = []
for j, cell in enumerate(row):
s = ParagraphStyle("TC2", fontName="DejaVuSans-Bold" if j == 0 else "DejaVuSans",
fontSize=9, leading=12)
styled.append(Paragraph(str(cell), s))
data.append(styled)
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style_cmds = [
("BACKGROUND", (0, 0), (-1, 0), DEEP_BLUE),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "DejaVuSans-Bold"),
("FONTSIZE", (0, 0), (-1, -1), 9),
("GRID", (0, 0), (-1, -1), 0.5, GRID_COLOR),
("VALIGN", (0, 0), (-1, -1), "TOP"),
("WORDWRAP", (0, 0), (-1, -1), True),
("TOPPADDING", (0, 0), (-1, -1), 5),
("BOTTOMPADDING", (0, 0), (-1, -1), 5),
("LEFTPADDING", (0, 0), (-1, -1), 6),
]
for i in range(1, len(data)):
bg = ALT_ROW if i % 2 == 0 else WHITE
style_cmds.append(("BACKGROUND", (0, i), (-1, i), bg))
tbl.setStyle(TableStyle(style_cmds))
items = [tbl]
if caption:
items.append(Paragraph(caption, cap_s))
return items
# ── Download image ────────────────────────────────────────────────────────────
def download_image(url, dest):
try:
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, timeout=10) as r:
data = r.read()
with open(dest, "wb") as f:
f.write(data)
return True
except Exception as e:
print(f"Image download failed: {e}")
return False
# ── Build story ───────────────────────────────────────────────────────────────
def build_story():
H1 = h1_style()
H2 = h2_style()
H3 = h3_style()
BD = body_style()
BL = bullet_style()
ITA = italic_style()
CAP = caption_style()
BLUE_BOX = box_style(LIGHT_BLUE, DEEP_BLUE)
AMBER_BOX = box_style(AMBER_BG, AMBER_TEXT)
GREEN_BOX = box_style(GREEN_BG, GREEN_TEXT)
RED_BOX = box_style(RED_BG, RED_TEXT)
story = []
# ── Title block ──────────────────────────────────────────────────────────
title_style = ParagraphStyle("Title", fontName="DejaVuSans-Bold", fontSize=18,
textColor=WHITE, backColor=DEEP_BLUE,
alignment=TA_CENTER, leading=26,
borderPad=12, spaceAfter=4)
sub_style = ParagraphStyle("Sub", fontName="DejaVuSans", fontSize=11,
textColor=DEEP_BLUE, alignment=TA_CENTER,
spaceAfter=14, leading=15)
story.append(Paragraph("Histamine-Releasing Drugs in Anesthesia", title_style))
story.append(Paragraph("Anesthetic Agents and Muscle Relaxants: Mechanisms, Classification & Clinical Management", sub_style))
story.append(HRFlowable(width="100%", thickness=1.5, color=DEEP_BLUE, spaceAfter=10))
# ── Section 1: Overview ──────────────────────────────────────────────────
story.append(Paragraph("1. Overview and Mechanism", H1))
story.append(Paragraph(
"Histamine release during anesthesia is a clinically significant event that can cause bronchospasm, "
"cutaneous flushing, urticaria, hypotension, and - in severe cases - anaphylactoid reactions. "
"The mechanism is typically a direct mast cell degranulation (non-IgE mediated) rather than true anaphylaxis, "
"though IgE-mediated reactions can also occur. The response is dose-dependent, rate-dependent, and "
"exhibits tachyphylaxis.", BD))
story.append(Paragraph(
"<b>KEY CONCEPT:</b> Histamine release is a direct pharmacological action on mast cells, "
"NOT IgE-mediated anaphylaxis. Subsequent doses of the same size usually cause little to no further release "
"(tachyphylaxis).",
BLUE_BOX))
story.append(Spacer(1, 6))
# Receptor effects table
story.append(Paragraph("Histamine Receptor Effects", H2))
rows_rx = [
["H1 Receptors", "Bronchospasm, increased mucus secretion, peripheral vasodilation, urticaria, pruritus, increased vascular permeability"],
["H2 Receptors", "Increased gastric acid secretion, vasodilation, tachycardia, positive inotropy"],
["Combined H1 + H2", "Maximal hypotension; cardiovascular collapse in severe cases"],
]
story.extend(build_table(
["Receptor Type", "Effects"],
rows_rx,
[4.5*cm, 12*cm],
"Table 1. Histamine receptor effects relevant to anesthetic practice"
))
story.append(Spacer(1, 8))
# Dose-related effects
story.append(Paragraph("Dose-Related Clinical Effects", H2))
rows_dose = [
["Mild elevation", "Skin flushing, urticaria along injection vein, localized wheal"],
["Moderate elevation", "Hypotension (systemic vasodilation), tachycardia, bronchospasm, increased secretions"],
["Severe elevation", "Anaphylactoid/anaphylactic reaction, cardiovascular collapse, laryngospasm"],
]
story.extend(build_table(
["Plasma Histamine Level", "Clinical Effects"],
rows_dose,
[5*cm, 11.5*cm],
"Table 2. Dose-dependent histamine effects"
))
story.append(Spacer(1, 8))
# ── Section 2: Opioids ───────────────────────────────────────────────────
story.append(Paragraph("2. Histamine-Releasing Opioids", H1))
story.append(Paragraph(
"Among opioids, the naturally occurring agents (morphine, codeine) and meperidine release histamine "
"through a non-immunological mechanism acting directly on cutaneous and systemic mast cells. "
"Synthetic opioids do not release histamine and are preferred in high-risk patients.", BD))
rows_opi = [
["Morphine", "Significant (+++)", "Hypotension, urticaria, flushing, pruritus; IV bolus most hazardous"],
["Meperidine (Pethidine)", "Moderate (++)", "Hypotension, skin effects; also structurally similar to atropine - tachycardia"],
["Codeine", "Moderate (+)", "Flushing, urticaria; oral route less problematic"],
["Hydromorphone", "Mild (+)", "Less than morphine but present"],
["Fentanyl", "None (0)", "Preferred in hemodynamically unstable patients and cardiac surgery"],
["Sufentanil", "None (0)", "High-dose cardiac anesthesia; no histamine release"],
["Alfentanil", "None (0)", "Short-acting; no histamine release"],
["Remifentanil", "None (0)", "Ultra-short-acting; renal metabolite inactive"],
]
story.extend(build_table(
["Opioid", "Histamine Release", "Clinical Significance"],
rows_opi,
[4*cm, 4*cm, 8.5*cm],
"Table 3. Histamine release by opioids"
))
story.append(Spacer(1, 6))
story.append(Paragraph(
"<b>QUOTE (Morgan and Mikhail's Clinical Anesthesiology, 7e):</b> \"Bolus doses of meperidine, hydromorphone, "
"and morphine evoke varying amounts of histamine release that can lead to profound drops in systemic vascular "
"resistance and arterial blood pressure. The potential hazards of histamine release can be minimized by "
"infusing opioids slowly or by pretreatment with H1 and H2 antagonists.\"",
ITA))
story.append(Paragraph(
"<b>CLINICAL PEARL:</b> Pruritus from opioids has both a peripheral (histamine) and central (spinal cord) "
"component. Antihistamines only partially relieve opioid-induced pruritus; naloxone or low-dose nalbuphine "
"are more effective for the central component.",
GREEN_BOX))
story.append(Spacer(1, 8))
# ── Section 3: Induction Agents ──────────────────────────────────────────
story.append(Paragraph("3. Intravenous Induction Agents", H1))
rows_ind = [
["Thiopental (Barbiturate)", "Yes - mast cell degranulation", "Contraindicated in asthma; higher incidence of wheezing vs. propofol"],
["Propofol", "Minimal / rare", "Much lower bronchospasm incidence; preferred in reactive airway disease"],
["Etomidate", "None", "No histamine release; cardiovascular stability; adrenocortical suppression"],
["Ketamine", "None", "Bronchodilator; drug of choice in asthmatic patients for RSI"],
["Midazolam", "None / negligible", "Acceptable alternative; no significant histamine release"],
]
story.extend(build_table(
["Induction Agent", "Histamine Release", "Anesthetic Importance"],
rows_ind,
[4.5*cm, 4.5*cm, 7.5*cm],
"Table 4. Histamine release by IV induction agents"
))
story.append(Spacer(1, 6))
story.append(Paragraph(
"<b>CAUTION - ASTHMA:</b> Thiopental (and barbiturates) should NOT be used in asthmatic patients for "
"induction because they provoke mast cell histamine release and can precipitate severe bronchospasm. "
"Ketamine (bronchodilator) or propofol are the preferred alternatives for rapid sequence induction in "
"reactive airway disease.",
AMBER_BOX))
story.append(Spacer(1, 8))
# ── Section 4: Muscle Relaxants ──────────────────────────────────────────
story.append(Paragraph("4. Histamine-Releasing Muscle Relaxants", H1))
story.append(Paragraph(
"The tendency to release histamine is strongly correlated with chemical class. "
"Benzylisoquinolinium compounds release histamine via direct mast cell action; "
"aminosteroid (steroidal) compounds do not. This is the most important classification principle "
"for exam purposes.", BD))
story.append(Paragraph(
"<b>KEY RULE:</b> Benzylisoquinoliniums = histamine release | Aminosteroids = NO histamine release",
BLUE_BOX))
story.append(Spacer(1, 6))
# Full NMB table
rows_nmb = [
["d-Tubocurarine (dTc)", "Benzylisoquinolinium", "Marked (+++)", "Ganglionic blockade", "WITHDRAWN - most potent histamine releaser among all NMBDs; hypotension via histamine + ganglionic block"],
["Atracurium", "Benzylisoquinolinium", "Slight (+)", "None", "Releases histamine at doses >0.4 mg/kg (rapid bolus); safety margin 3x greater than dTc; metabolite laudanosine potentially epileptogenic"],
["Mivacurium", "Benzylisoquinolinium", "Slight (+)", "None", "Same degree as atracurium; doses >0.15 mg/kg rapid bolus cause transient hypotension; ultra-short duration (20-30 min) via pseudocholinesterase"],
["Cisatracurium", "Benzylisoquinolinium", "None / minimal (0)", "None", "4x more potent than atracurium; histamine release stereospecific; produces less laudanosine; PREFERRED over atracurium"],
["Succinylcholine", "Depolarizing", "Slight (+)", "Ganglionic + muscarinic stimulation", "Also causes fasciculations, hyperkalemia risk, malignant hyperthermia trigger; bradycardia with 2nd dose"],
["Pancuronium", "Steroidal", "None (0)", "Vagolytic (tachycardia ++)", "No histamine release; increases HR via M2 blockade; prolongs action in renal failure"],
["Vecuronium", "Steroidal", "None (0)", "None", "No histamine release; biliary excretion; intermediate duration; liver disease prolongs action"],
["Rocuronium", "Steroidal", "None (0)", "Slight vagolytic (+)", "Fastest onset of nondepolarizers; reversible with sugammadex; preferred for RSI when succinylcholine contraindicated"],
["Gantacurium", "Chlorofumarate", "Slight (+)", "None", "Ultra-short duration; adductor pollicis onset <2 min; limited clinical availability"],
]
story.extend(build_table(
["Drug", "Class", "Histamine Release", "Autonomic Effect", "Anesthetic Notes"],
rows_nmb,
[3.2*cm, 3.5*cm, 2.5*cm, 2.8*cm, 4.5*cm],
"Table 5. Neuromuscular blocking drugs - histamine release and autonomic effects"
))
story.append(Spacer(1, 8))
# ── Subsections on key NMBDs ─────────────────────────────────────────────
story.append(Paragraph("4.1 d-Tubocurarine (Tubocurarine, dTc)", H2))
story.append(Paragraph(
"The most potent histamine releaser among all muscle relaxants - now withdrawn from clinical use. "
"Causes hypotension by two mechanisms: (1) histamine release causing systemic vasodilation, and "
"(2) ganglionic blockade reducing sympathetic compensatory reflexes. "
"The cardiovascular response is prevented by both antihistamines and NSAIDs (aspirin), as the final "
"step in dTc-induced hypotension is modulated by vasodilatory prostaglandins. "
"The effect is tachyphylactic - subsequent identical doses cause far less response.", BD))
story.append(Paragraph("4.2 Atracurium vs. Cisatracurium", H2))
story.append(Paragraph(
"Atracurium releases histamine at doses greater than 0.4 mg/kg when given as a rapid bolus. "
"Cisatracurium is a stereoisomer with 4x greater potency and NO histamine release, "
"demonstrating that histamine release is stereospecific within the same molecule. "
"Both undergo Hofmann elimination (pH- and temperature-dependent spontaneous degradation), "
"making them useful in hepatic and renal failure. Cisatracurium produces less laudanosine. "
"Its slower onset limits its utility for rapid-sequence induction.", BD))
story.append(Paragraph(
"<b>CLINICAL PEARL (Miller's Anesthesia):</b> The safety margin for histamine release is approximately "
"3 times greater for atracurium and mivacurium than for d-tubocurarine. Rapid administration of atracurium "
"at doses greater than 0.4 mg/kg or mivacurium greater than 0.15 mg/kg has been associated with "
"transient hypotension secondary to histamine release.",
GREEN_BOX))
story.append(Spacer(1, 6))
story.append(Paragraph("4.3 Mivacurium Dose-Response", H2))
story.append(Paragraph(
"Mivacurium releases histamine to the same degree as atracurium. Doses exceeding 0.15 mg/kg given "
"as a rapid bolus cause transient hypotension. Slower injection over 30 seconds reduces MAP changes "
"to less than 10%. Its main advantage is ultra-short duration (20-30 min) via plasma pseudocholinesterase "
"hydrolysis. Prolonged blockade occurs in patients with pseudocholinesterase deficiency or severe "
"liver disease.", BD))
# Try to embed the mivacurium graph image
img_url = "https://cdn.orris.care/cdss_images/c9ab79066b1b2f808031df62107afb10f984f2f2b38d4435cc2714584d2b0b53.png"
img_path = "/home/daytona/workspace/histamine-anesthesia/mivacurium_graph.png"
if download_image(img_url, img_path) and os.path.exists(img_path):
try:
img = Image(img_path, width=13*cm, height=8*cm)
story.append(img)
story.append(Paragraph(
"Figure 1. Dose-response to mivacurium (rapid injection). Mean arterial pressure "
"drops significantly (15-20%) at 2.5-3x the ED95 (0.20-0.25 mg/kg). Heart rate is "
"relatively preserved. Twitch response is abolished at 0.10 mg/kg. "
"[Source: Savarese et al., Anesthesiology 1989; reproduced from Miller's Anesthesia, 10e]",
CAP))
except Exception as e:
print(f"Image embed failed: {e}")
story.append(Spacer(1, 8))
story.append(Paragraph("4.4 Succinylcholine", H2))
story.append(Paragraph(
"The only depolarizing agent in clinical use. Causes slight histamine release (less than tubocurarine "
"unless given rapidly). In addition to histamine effects, succinylcholine stimulates both autonomic "
"ganglia and cardiac muscarinic receptors. It can cause bradycardia (especially with a second dose "
"given less than 5 minutes after the first), which can be attenuated by atropine or glycopyrrolate "
"or by pretreating with a small dose of a nondepolarizing relaxant.", BD))
story.append(Paragraph(
"<b>CAUTION - SUCCINYLCHOLINE CONTRAINDICATIONS:</b> Avoid in burns, spinal cord injury, "
"nerve/muscle disease, prolonged immobility, closed head injury (risk of severe hyperkalemia from "
"extrajunctional ACh receptor upregulation). Also a malignant hyperthermia trigger when combined with "
"volatile anesthetics.",
AMBER_BOX))
story.append(Spacer(1, 8))
# ── Section 5: Neurological impact ───────────────────────────────────────
story.append(Paragraph("5. Neuroanaesthetic Importance", H1))
story.append(Paragraph(
"Histamine-releasing muscle relaxants have particular relevance in neurosurgery and neurointensive care. "
"Histamine causes cerebral vasodilation, which simultaneously increases ICP (via increased cerebral blood volume) "
"and decreases MAP (via systemic vasodilation), resulting in a drop in cerebral perfusion pressure (CPP).", BD))
rows_neuro = [
["d-Tubocurarine", "Most potent releaser; marked increase in ICP; AVOID in neurosurgery"],
["Atracurium / Mivacurium", "Modest ICP increase possible; use limited doses; avoid in ICP-sensitive patients"],
["Cisatracurium", "No histamine release; no ICP effects; preferred for neurointensive care and ICU infusion"],
["Vecuronium / Rocuronium / Pancuronium", "No histamine release; no cerebrovascular effects; safe in neurosurgery"],
["Succinylcholine", "Modest ICP increase (~5 mmHg) via afferent activity from muscle spindle - NOT from histamine; can be attenuated by deep anesthesia or defasciculation"],
]
story.extend(build_table(
["Drug", "Neuroanesthetic Significance"],
rows_neuro,
[5.5*cm, 11*cm],
"Table 6. Muscle relaxants in neurosurgery - impact of histamine release on ICP and CPP"
))
story.append(Spacer(1, 8))
# ── Section 6: High-risk clinical scenarios ────────────────────────────
story.append(Paragraph("6. High-Risk Clinical Scenarios", H1))
rows_risk = [
["Asthma / Reactive Airway Disease",
"Thiopental, morphine, atracurium, mivacurium, dTc",
"Ketamine (induction), propofol, fentanyl/remifentanil, cisatracurium, vecuronium, rocuronium"],
["Hemodynamic Instability",
"Morphine, meperidine, dTc, mivacurium (large/rapid doses)",
"Etomidate (induction), fentanyl/sufentanil, vecuronium, rocuronium, cisatracurium"],
["Neurosurgery / Raised ICP",
"dTc, large-dose atracurium/mivacurium",
"Cisatracurium, vecuronium, rocuronium; propofol/fentanyl TIVA"],
["Carcinoid Syndrome",
"Any histamine-releasing drug; also succinylcholine, sympathomimetics",
"Avoid all histamine releasers; use H1+H2 blockers preoperatively; synthetic opioids; vecuronium"],
["Pregnancy / Obstetrics",
"Morphine, meperidine (placental transfer + histamine effects)",
"Fentanyl preferred; low-dose opioids for labor analgesia; rocuronium for RSI"],
["Renal / Hepatic Failure",
"Mivacurium (reduced pseudocholinesterase in liver disease); pancuronium/vecuronium (renal elimination)",
"Atracurium/cisatracurium (Hofmann elimination - organ-independent)"],
]
story.extend(build_table(
["Clinical Scenario", "Drugs to AVOID (Histamine Risk)", "Preferred Alternatives"],
rows_risk,
[4*cm, 5.5*cm, 7*cm],
"Table 7. Drug selection based on histamine risk in clinical scenarios"
))
story.append(Spacer(1, 8))
# ── Section 7: Prevention and Management ─────────────────────────────────
story.append(Paragraph("7. Prevention and Management", H1))
story.append(Paragraph("Prevention Strategies", H2))
bullets_prev = [
"Slow injection rate - most effective single intervention (reduces peak plasma concentration)",
"H1 + H2 antihistamine pretreatment (e.g., diphenhydramine 50 mg IV + ranitidine 50 mg IV or famotidine 20 mg IV) - combination more effective than either alone",
"Dilute the drug before administration",
"Use alternative drugs without histamine-releasing potential (cisatracurium, vecuronium, rocuronium for NMBDs; fentanyl for opioids; etomidate/ketamine/propofol for induction)",
"Avoid large rapid boluses, especially of morphine, mivacurium, or atracurium",
]
for b in bullets_prev:
story.append(Paragraph(f"• {b}", bullet_style()))
story.append(Spacer(1, 6))
story.append(Paragraph("Treatment of Histamine Release Reaction", H2))
rows_tx = [
["Hypotension", "IV fluid bolus; vasopressors (phenylephrine, ephedrine, or norepinephrine); Trendelenburg position"],
["Bronchospasm", "Inhaled bronchodilators (salbutamol/albuterol); IV ketamine; deepening anesthesia with volatile agent; IV magnesium sulfate"],
["Urticaria / Flushing", "H1 antihistamine (diphenhydramine 25-50 mg IV); usually self-limiting"],
["Severe Anaphylactoid / Anaphylaxis", "Epinephrine 0.01 mg/kg IV (1:10,000) or 0.3-0.5 mg IM (1:1,000); fluid resuscitation; corticosteroids; continue airway management"],
["General", "Discontinue offending agent; 100% O2; call for help; follow ACLS"],
]
story.extend(build_table(
["Symptom / Sign", "Treatment"],
rows_tx,
[5*cm, 11.5*cm],
"Table 8. Management of intraoperative histamine release reactions"
))
story.append(Spacer(1, 8))
# ── Section 8: Key exam points ────────────────────────────────────────────
story.append(Paragraph("8. Key Exam Points and Clinical Pearls", H1))
pearls = [
("Benzylisoquinoliniums release histamine; aminosteroids do not",
"This is the most frequently examined concept. dTc > atracurium = mivacurium >> cisatracurium in potency of histamine release."),
("Cisatracurium is preferred over atracurium",
"4x more potent, same Hofmann elimination, but NO histamine release and less laudanosine production. Stereospecificity of histamine release."),
("Synthetic opioids do not release histamine",
"Fentanyl, sufentanil, alfentanil, and remifentanil are devoid of histamine-releasing effects. Preferred in cardiac surgery, hemodynamic instability, and asthma."),
("Thiopental is contraindicated in asthma",
"Releases histamine from mast cells; causes bronchospasm. Ketamine (bronchodilator) or propofol is used instead."),
("Slow injection prevents histamine effects",
"Both atracurium-induced and mivacurium-induced hypotension are markedly attenuated by slow injection (30 seconds vs. rapid bolus)."),
("Histamine release is NOT IgE-mediated (in most cases)",
"It is a direct pharmacological action on mast cells. True anaphylaxis is far rarer and involves IgE. An estimated 1 in 6,500 patients has an allergic reaction to a muscle relaxant."),
("Tachyphylaxis",
"Subsequent doses of the same size after initial histamine release usually produce no further response - important characteristic of non-immunological histamine release."),
("dTc hypotension is also from ganglionic blockade",
"Unlike atracurium/mivacurium (pure histamine mechanism), tubocurarine also blocks autonomic ganglia, compounding the hypotension."),
]
for i, (title, text) in enumerate(pearls):
story.append(Paragraph(f"<b>Pearl {i+1}: {title}</b>", H3))
story.append(Paragraph(text, BD))
story.append(Spacer(1, 8))
# ── Sources ───────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=1, color=DEEP_BLUE, spaceAfter=6))
story.append(Paragraph("Sources", H2))
sources = [
"Morgan and Mikhail's Clinical Anesthesiology, 7th Edition - Chapters 10 (Opioids), 11 (Muscle Relaxants)",
"Miller's Anesthesia, 10th Edition - Chapters 7, 24 (Neuromuscular Blocking Drugs), 3",
"Goodman and Gilman's The Pharmacological Basis of Therapeutics - Chapters 4, 7",
"Katzung's Basic and Clinical Pharmacology, 16th Edition - Chapter 27",
"Barash, Cullen, and Stoelting's Clinical Anesthesia, 9th Edition - Chapter 14",
]
src_s = ParagraphStyle("Src", fontName="DejaVuSans", fontSize=9,
textColor=colors.HexColor("#333333"), leading=13, spaceAfter=3)
for s in sources:
story.append(Paragraph(f"• {s}", src_s))
return story
# ── Main ──────────────────────────────────────────────────────────────────────
if __name__ == "__main__":
doc = make_doc()
story = build_story()
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
print(f"PDF created: {OUTPUT_PATH}")
cd /home/daytona/workspace/histamine-anesthesia && python3 build_pdf.py
Histamine Releasing Drugs Anesthesia
PDF Document · PDF
You can use different colors for pdf rather than a single uniform colour throughout the pdf..save this
~/pdf_preferences.md
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/pdf_preferences.md'
#1a3a5c#0f6b6b#4a2a6b#1a5c2a#7a1a1a#0d2b5c#1a4a4a