Drug abuse and stress management, with Focus is target military personnel too much beer, and other drugs when they are stressed.. postgraduate style PowerPoint with light theme make it colorful
military personnel alcohol use stress
military personnel alcohol substance abuse stress statistics prevalence
alcohol effects on brain diagram

A multi-panel pathophysiology diagram summarizing the comparative effects of in utero alcohol exposure on the placenta (Section A) and fetal brain (Section B) in humans and mouse models. Section A illustrates the placenta, contrasting control and alcohol-exposed states. In the alcohol group, there is a decrease in placental growth factor (PLGF) and VEGF-R1 expression, no gestational increase in vessel or villous density, and impaired placental integrity evidenced by decreased ZO-1 and increased MCT-1 levels. Section B depicts the fetal brain, showing that alcohol exposure leads to decreased VEGF-R1 levels and a shift from radial to disorganized cortical vessel organization. Central to the diagram is the pathway demonstrating that recombinant human PLGF (hrPLGF) administered to the placenta can reach the fetal brain. Experimental results shown include Western blot (WB) and immunohistochemistry (IHC) data indicating that placental PGF repression mimics alcohol's effects on brain vasculature, while PGF overexpression can rescue these defects. The diagram highlights a positive correlation between vascular placental and brain defects in human alcohol-exposed groups, emphasizing the placenta's role in fetal alcohol spectrum disorders (FASD).

This composite educational graphic presents MALDI-MS (Matrix-Assisted Laser Desorption/Ionization Mass Spectrometry) imaging of murine coronal brain sections, focusing on sphingomyelin (SM) homeostasis in the nucleus accumbens (Nac). The panels (a, c, e) compare wild-type (WT) mice and those over-expressing acid sphingomyelinase (tgASM) under water or 16 vol% alcohol (EtOH) conditions. Visual data for three SM species—SM 18:1 18:0, SM 18:1 18:1, and SM 18:1 20:0—are displayed using a rainbow heat map scale (blue/low to red/high). Accompanying bar graphs (b, d, f) quantify the relative abundance, illustrating that alcohol consumption selectively restores SM levels in the Nac of tgASM mice, which otherwise show severe SM depletion compared to WT. Lower panels include a representative mass spectrogram (g) showing ion signals and a labeled anatomical diagram (h) identifying key brain regions including the Nac core/shell, caudate putamen (CPu), and motor cortex (MoC). The material demonstrates the pathophysiology of sphingolipid allostasis in neurobiology and the compensatory effects of chronic alcohol intake on ASM hyperfunction.

Anatomical diagram consisting of eight coronal rat brain schematics (a-h) illustrating stereotaxic injection sites across multiple neuroanatomical regions. Each panel represents a specific anterior-posterior coordinate relative to Bregma. Targeted regions are highlighted with blue shading and contain black dots indicating verified cannula or injection placements. (a) Ventral Tegmental Area (VTA) at -6.8; (b) Nucleus Accumbens Core (NAcC) at 1.7; (c) Nucleus Accumbens Shell (NAcS) at 1.7; (d) Basolateral Amygdala (BLA) at -2.76; (e) Dorsomedial Hippocampus (DMHipp) at -2.28; (f) Arcuate Nucleus (ArcN) at -2.3; (g) Paraventricular Nucleus (PVN) at 1.8; and (h) Lateral Hypothalamus (LH) at -2.8. The diagram demonstrates the precise anatomical localization used in preclinical research to study the effects of pharmacological agents, such as Exendin-4, on behavioral outcomes like alcohol consumption and reward-seeking. The bilateral distribution of dots across the schematics confirms consistent targeting within the limbic and hypothalamic reward circuitry.
stress response HPA axis cortisol diagram

This pathophysiology diagram illustrates the bidirectional communication between the brain and skin microbiota under chronic stress, focusing on the hypothalamic-pituitary-adrenal (HPA) axis and the 'top-down' modulation of itch. The visual depicts a sagittal view of the human brain highlighting the Hypothalamus, Pituitary Gland, Amygdala, Ventrolateral Periaqueductal Grey (VLPAG), and Rostral Ventromedial Medulla (RVM). A flowchart links chronic stress to HPA axis activation, showing CRH, ACTH, and Cortisol signaling. Cortisol is shown directly influencing skin microbiota and the amygdala, contributing to central sensitization. The diagram features a 'Descending facilitation of itch' pathway where attenuated top-down inhibition involves the VLPAG and RVM. Neurochemical mediators including Serotonin (5-HT), Norepinephrine (NE), and Acetylcholine (Ach) from the Sympathetic (SNS) and Parasympathetic (PNS) nervous systems are shown modulating the skin microbiota. Educational outcomes noted include increased microbial growth, biofilm formation, and augmented virulence in response to these hormonal and neural cues, illustrating the concept of the skin-brain axis in dermatological conditions like chronic itch.

This pathophysiology diagram illustrates the complex physiological pathways leading to stress-induced hyperglycaemia (SIH) following an acute ischaemic stroke. The flowchart details two primary neuroendocrine axes: the Hypothalamic-Pituitary-Adrenal (HPA) axis and the sympathoadrenal system. Originating from the paraventricular nucleus (PVN) in the brain, the HPA axis triggers the release of Corticotropin-Releasing Hormone (CRH), stimulating the pituitary gland to release Adrenocorticotropic Hormone (ACTH), which results in cortisol production. Simultaneously, the neural pathway via the Ventrolateral Medulla (VLM) and Intermediolateral nucleus (IML) leads to the release of norepinephrine and epinephrine. These hormones, along with glucagon (stimulated by cortisol and TNF-α from adipose tissue), act on the liver to promote hepatic gluconeogenesis and glycogenolysis. The resulting elevated blood glucose contributes to insulin resistance, characterized by decreased GLUT4 and increased GLUT1 and GLUT3 expression. The diagram highlights a 'vicious cycle' where hyperglycaemia and pro-inflammatory factors (IL-1, IL-6, FFA, MCP-1) further exacerbate the initial brain stress response. This resource is suitable for medical education regarding metabolic complications in critical care and neurology.

This pathophysiology diagram illustrates the hypothalamic-pituitary-adrenal (HPA) axis and its relationship with the hippocampus under chronic stress conditions. The left side depicts a sagittal section of the brain showing the 'Higher Functions' and the 'Hypothalamus' stimulating the 'Anterior Pituitary Gland' to release corticotropin-releasing hormone (CRH) and adrenocorticotropic hormone (ACTH). These hormones stimulate the 'Adrenal Gland' to secrete cortisol. A negative feedback loop is shown where cortisol inhibits further CRH and ACTH release. The right side of the diagram highlights the clinical impact of chronic cortisol elevation on the 'Hippocampus,' specifically illustrating hippocampal shrinkage and impaired memory. Color-coded arrows define functional relationships: green for stimulation, purple for release, red for inhibition, and blue for impairment. The illustration serves as an educational resource for understanding neuroendocrinology, the physiological stress response, and the long-term neurobiological effects of glucocorticoids on brain morphology and cognitive function.

This pathophysiology diagram illustrates the complex stress response pathways in individuals with Borderline Personality Disorder (BPD), organized into subjective, behavioral, neural, neuro-vegetative, and neuro-hormonal domains. The central anatomical illustration is a sagittal view of the human brain highlighting the limbic system, hypothalamus, and pituitary gland, connected to the adrenal gland (cortex and medulla). The pathway initiates with a 'Perceived Stimulus' impacting cortical association areas. Neural findings described include hyperactivation of the amygdala, hippocampus, and ventrolateral anterior cingulate cortex (vlACC) alongside hypoactivation of the dorsolateral prefrontal cortex (dlPFC). Two neurohormonal profiles are outlined: 'Post-traumatic' (characterized by lower basal cortisol and increased negative feedback) and 'Dysphoric' (normal basal cortisol and increased acute response). The diagram shows the dual activation of the Hypothalamic-Pituitary-Adrenal (HPA) axis releasing Cortisol, and the Sympathetic-Adrenal-Medullar axis releasing Epinephrine. Behavioral markers such as impulsivity and self-harm, and neuro-vegetative signs like low vagal tone, are integrated to show the comprehensive clinical manifestation of the 'Fight or Flight' response in BPD.
soldier military deployment combat stress
addiction cycle self-medication reward pathway dopamine diagram
mkdir -p /tmp/workspace/military-stress-deck/assets /tmp/workspace/military-stress-deck/output && ls -la /tmp/workspace/
cd /tmp/workspace/military-stress-deck && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_4521a8f1a7fba08f89ae4d4333fcfd01151a2cd699fa038faf1dd043fd80088b.jpg" > assets/hpa_fetch.json 2>&1; python -c " import json,base64 d=json.load(open('assets/hpa_fetch.json')) for img in d: if img['base64']: header,b64=img['base64'].split(',',1) if ',' in img['base64'] else ('',img['base64']) raw=base64.b64decode(b64) open('assets/hpa_axis.jpg','wb').write(raw) print('saved', len(raw)) else: print('error', img.get('error')) " ls -la assets/
~/military-stress-deck/build_deck.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from pptx.oxml.ns import qn
import copy
# ---------- palette (light + colorful, "postgraduate" academic feel) ----------
WHITE = RGBColor(0xFF,0xFF,0xFF)
BG_LIGHT = RGBColor(0xF7,0xF9,0xFC)
NAVY = RGBColor(0x0B,0x2E,0x59) # military navy
TEAL = RGBColor(0x0E,0x8A,0x7D)
ORANGE = RGBColor(0xE8,0x7A,0x1E)
GOLD = RGBColor(0xC9,0x9A,0x1E)
RED = RGBColor(0xC0,0x2F,0x3C)
PURPLE = RGBColor(0x6A,0x3E,0x9E)
BLUE = RGBColor(0x1F,0x6F,0xC1)
GREEN = RGBColor(0x2E,0x8B,0x57)
GREY_TXT = RGBColor(0x3A,0x3F,0x4B)
LIGHT_GREY = RGBColor(0xE9,0xED,0xF2)
ACCENTS = [TEAL, ORANGE, BLUE, PURPLE, GREEN, GOLD, RED]
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
SW, SH = prs.slide_width, prs.slide_height
BLANK = prs.slide_layouts[6]
def add_slide():
s = prs.slides.add_slide(BLANK)
bg = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, SW, SH)
bg.fill.solid(); bg.fill.fore_color.rgb = BG_LIGHT
bg.line.fill.background()
bg.shadow.inherit = False
s.shapes._spTree.remove(bg._element)
s.shapes._spTree.insert(2, bg._element)
return s
def no_line(shape):
shape.line.fill.background()
shape.shadow.inherit = False
def add_rect(s, x, y, w, h, color, line=False):
r = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, x, y, w, h)
r.fill.solid(); r.fill.fore_color.rgb = color
if not line: r.line.fill.background()
r.shadow.inherit = False
return r
def add_rounded(s, x, y, w, h, color):
r = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, x, y, w, h)
r.fill.solid(); r.fill.fore_color.rgb = color
r.line.fill.background(); r.shadow.inherit = False
try:
r.adjustments[0] = 0.08
except Exception:
pass
return r
def add_text(s, x, y, w, h, text, size=18, color=GREY_TXT, bold=False, italic=False,
align=PP_ALIGN.LEFT, font="Calibri", anchor=MSO_ANCHOR.TOP, line_spacing=1.0,
wrap=True):
tb = s.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = wrap
tf.vertical_anchor = anchor
tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0
p = tf.paragraphs[0]
p.alignment = align
p.line_spacing = line_spacing
r = p.add_run(); r.text = text
r.font.size = Pt(size); r.font.bold = bold; r.font.italic = italic
r.font.color.rgb = color; r.font.name = font
return tb
def add_bullets(s, x, y, w, h, items, size=15, color=GREY_TXT, font="Calibri",
space_after=10, line_spacing=1.08, bullet_color=None, bold_lead=True):
tb = s.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0
first = True
for item in items:
if isinstance(item, tuple):
lead, rest, acc = item[0], item[1], item[2] if len(item) > 2 else (bullet_color or TEAL)
else:
lead, rest, acc = None, item, (bullet_color or TEAL)
p = tf.paragraphs[0] if first else tf.add_paragraph()
first = False
p.space_after = Pt(space_after)
p.line_spacing = line_spacing
# bullet glyph
rb = p.add_run(); rb.text = " \u25AA "
rb.font.size = Pt(size); rb.font.color.rgb = acc; rb.font.bold = True; rb.font.name = font
if lead:
rl = p.add_run(); rl.text = lead + " "
rl.font.size = Pt(size); rl.font.bold = True; rl.font.color.rgb = NAVY; rl.font.name = font
rr = p.add_run(); rr.text = rest
rr.font.size = Pt(size); rr.font.color.rgb = color; rr.font.name = font
return tb
def add_kicker(s, text, color=TEAL):
add_rect(s, Inches(0.6), Inches(0.55), Inches(0.35), Inches(0.14), color)
add_text(s, Inches(1.05), Inches(0.42), Inches(6), Inches(0.35), text.upper(),
size=13, color=color, bold=True)
def add_footer(s, idx, total, tag="MILITARY BEHAVIORAL HEALTH"):
add_rect(s, 0, SH - Inches(0.32), SW, Inches(0.32), NAVY)
add_text(s, Inches(0.6), SH - Inches(0.30), Inches(6), Inches(0.28), tag,
size=9.5, color=WHITE, bold=True)
add_text(s, SW - Inches(1.6), SH - Inches(0.30), Inches(1.0), Inches(0.28),
f"{idx:02d} / {total:02d}", size=9.5, color=WHITE, bold=True, align=PP_ALIGN.RIGHT)
def title_block(s, title, subtitle=None, accent=TEAL, title_size=30):
add_rect(s, Inches(0.6), Inches(0.92), Inches(0.55), Inches(0.07), accent)
add_text(s, Inches(0.6), Inches(1.02), Inches(12.1), Inches(0.8), title,
size=title_size, color=NAVY, bold=True)
if subtitle:
add_text(s, Inches(0.6), Inches(1.55), Inches(12.1), Inches(0.4), subtitle,
size=14, color=GREY_TXT, italic=True)
TOTAL = 18
# ============================================================ SLIDE 1 - TITLE
s = add_slide()
add_rect(s, 0, 0, SW, Inches(7.5), NAVY)
add_rect(s, 0, Inches(6.55), SW, Inches(0.95), TEAL)
add_rect(s, 0, Inches(6.35), SW, Inches(0.20), ORANGE)
# decorative diagonal accent blocks
for i, c in enumerate([ORANGE, GOLD, RED, PURPLE]):
add_rect(s, SW - Inches(2.6) + Inches(i*0.0), Inches(0.0)+Inches(i*0), Emu(1),Emu(1), c) # placeholder no-op
# corner accent bars
add_rect(s, Inches(0), Inches(0), Inches(0.28), Inches(7.5), ORANGE)
add_rect(s, SW-Inches(0.28), Inches(0), Inches(0.28), Inches(7.5), GOLD)
add_text(s, Inches(0.9), Inches(0.85), Inches(8), Inches(0.4), "POSTGRADUATE MILITARY BEHAVIORAL HEALTH BRIEFING",
size=15, color=GOLD, bold=True)
add_text(s, Inches(0.9), Inches(1.9), Inches(11.2), Inches(1.6),
"Drug Abuse & Stress Management in Military Personnel", size=40, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(3.15), Inches(11), Inches(1.0),
"Alcohol Misuse, Substance Use, and Coping Under Operational Stress",
size=20, color=RGBColor(0xCF,0xE3,0xDF), italic=True)
add_rounded(s, Inches(0.9), Inches(4.3), Inches(11.3), Inches(1.55), RGBColor(0x12,0x3E,0x6E))
add_bullets(s, Inches(1.2), Inches(4.5), Inches(10.8), Inches(1.2), [
("Focus:", "excessive alcohol ('beer culture') and other substance use as maladaptive coping under combat, deployment, and reintegration stress", ORANGE),
("Audience:", "medical officers, unit leadership, mental health teams, and postgraduate trainees in military/occupational medicine", GOLD),
], size=14.5, color=WHITE)
add_text(s, Inches(0.9), Inches(6.75), Inches(8), Inches(0.5),
"Evidence-based review | Textbook & peer-reviewed literature synthesis", size=13, color=WHITE, bold=True)
add_text(s, SW-Inches(3.6), Inches(6.75), Inches(3.0), Inches(0.5), "Section 1 of 18",
size=13, color=WHITE, bold=True, align=PP_ALIGN.RIGHT)
# ============================================================ SLIDE 2 - LEARNING OBJECTIVES
s = add_slide(); idx=2
add_kicker(s, "Session Roadmap", TEAL)
title_block(s, "Learning Objectives")
objs = [
("01", "Describe the scale of alcohol and drug misuse among active-duty and veteran military personnel.", TEAL),
("02", "Explain the neurobiological and psychological links between operational stress, PTSD, and substance use.", ORANGE),
("03", "Identify military-specific risk factors: deployment, combat exposure, 'beer culture', and reintegration.", BLUE),
("04", "Apply validated screening tools (AUDIT-C, CAGE, DAST) in occupational health settings.", PURPLE),
("05", "Outline evidence-based treatment and unit-level prevention/stress-management programs.", GREEN),
("06", "Formulate leadership and policy recommendations to protect force readiness.", GOLD),
]
x0, y0 = Inches(0.6), Inches(2.05)
colw, rowh = Inches(6.0), Inches(1.65)
for i,(num, txt, col) in enumerate(objs):
col_i, row_i = i % 2, i // 2
x = x0 + col_i*Inches(6.35)
y = y0 + row_i*Inches(1.75)
card = add_rounded(s, x, y, colw, rowh, WHITE)
add_rect(s, x, y, Inches(0.12), rowh, col)
add_text(s, x+Inches(0.3), y+Inches(0.15), Inches(0.9), Inches(0.6), num, size=26, color=col, bold=True)
add_text(s, x+Inches(1.1), y+Inches(0.18), colw-Inches(1.4), Inches(1.3), txt, size=13.5, color=GREY_TXT, line_spacing=1.1)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 3 - WHY IT MATTERS
s = add_slide(); idx=3
add_kicker(s, "Introduction", ORANGE)
title_block(s, "Why This Matters for Force Readiness", accent=ORANGE)
add_bullets(s, Inches(0.6), Inches(2.1), Inches(7.0), Inches(4.5), [
("Operational stress is unavoidable:", "combat exposure, deployment separation, sleep loss, and reintegration create chronic and acute stress loads unique to military life.", ORANGE),
("Alcohol is normalized:", "unit socializing, off-duty 'beer culture', and easy access on/near base lower the threshold for heavy and binge drinking.", TEAL),
("Self-medication is common:", "service members frequently use alcohol and other drugs to blunt hyperarousal, insomnia, and intrusive memories rather than seeking care.", BLUE),
("Consequences extend beyond the individual:", "misconduct, disciplinary action, accidents, family breakdown, and elevated suicide risk are all linked to substance misuse.", RED),
], size=16, line_spacing=1.15, space_after=16)
card = add_rounded(s, Inches(8.0), Inches(2.1), Inches(4.75), Inches(4.5), NAVY)
add_text(s, Inches(8.35), Inches(2.35), Inches(4.1), Inches(0.4), "KEY FIGURES", size=14, color=GOLD, bold=True)
stats = [
("30%", "of active-duty personnel report past-month binge drinking", ORANGE),
("5.4%", "of military personnel are heavy drinkers (vs 6.7% general adults, HRBS)", GOLD),
("58%", "of AUD treatment-seekers also meet criteria for PTSD", TEAL),
("1.36x", "higher odds of alcohol use disorder after combat deployment vs non-deployed", RGBColor(0x8FD,0xC8,0xB6) if False else RGBColor(0x8F,0xD1,0xC0)),
]
yy = Inches(2.85)
for val, desc, col in stats:
add_text(s, Inches(8.35), yy, Inches(1.6), Inches(0.6), val, size=30, color=col, bold=True)
add_text(s, Inches(9.95), yy+Inches(0.05), Inches(2.55), Inches(0.85), desc, size=11.5, color=WHITE, line_spacing=1.05)
yy += Inches(0.9)
add_text(s, Inches(8.35), Inches(6.25), Inches(4.1), Inches(0.3), "Sources: NIDA; Hazelden Betty Ford; HRBS 2015", size=9.5, color=RGBColor(0xC9,0xD6,0xE6), italic=True)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 4 - EPIDEMIOLOGY
s = add_slide(); idx=4
add_kicker(s, "Epidemiology", BLUE)
title_block(s, "Scale of the Problem: Alcohol & Drug Use in Uniform", accent=BLUE)
rows = [
("Alcohol Use Disorder", "Most prevalent substance use disorder in military populations; heavy/binge drinking exceeds general-population rates among active-duty personnel.", TEAL),
("Post-Deployment Risk", "Personnel deployed to combat zones (Iraq/Afghanistan) show 1.36x higher odds of AUD and 1.14x higher odds of other drug use disorders vs non-deployed peers.", ORANGE),
("Prescription Drugs", "Opioid and sedative misuse linked to combat injury, chronic pain, and TBI; often under-recognized in garrison health screening.", PURPLE),
("PTSD-SUD Comorbidity", "Up to 63% of deployed veterans in AUD treatment meet full PTSD criteria; comorbidity worsens prognosis and complicates treatment.", RED),
("Under-Reporting", "Stigma, fear of career/security-clearance repercussions, and command climate suppress help-seeking and self-report accuracy.", GOLD),
]
y = Inches(2.05)
for label, desc, col in rows:
add_rect(s, Inches(0.6), y, Inches(3.1), Inches(0.82), col)
add_text(s, Inches(0.75), y+Inches(0.1), Inches(2.8), Inches(0.65), label, size=14, color=WHITE, bold=True, anchor=MSO_ANCHOR.MIDDLE)
add_rounded(s, Inches(3.85), y, Inches(8.9), Inches(0.82), WHITE)
add_text(s, Inches(4.05), y+Inches(0.08), Inches(8.5), Inches(0.68), desc, size=12.5, color=GREY_TXT, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.05)
y += Inches(0.95)
add_footer(s, idx, TOTAL)
prs.save("/tmp/workspace/military-stress-deck/output/deck_partial.pptx")
print("Part 1 saved, slides:", len(prs.slides.__iter__.__self__._sldIdLst))
~/military-stress-deck/build_deck.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/military-stress-deck/build_deck.py'
cd /tmp/workspace/military-stress-deck && python build_deck.py
Military Stress Substance Abuse
Presentation · PPTX
Now make me one for drug abuse and stress management overview with correlation to the military personnel
"chronic stress" AND "substance use disorder" risk
correlation between stress and drug abuse general population vs military personnel statistics
mkdir -p /tmp/workspace/drug-stress-overview-deck/assets /tmp/workspace/drug-stress-overview-deck/output cd /tmp/workspace/drug-stress-overview-deck python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_6e96bdddb7c9c98ea711e24df48756ee105e1dfd39511660951b937437d8bc5e.jpg" "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_4521a8f1a7fba08f89ae4d4333fcfd01151a2cd699fa038faf1dd043fd80088b.jpg" > assets/fetch.json 2>&1 python -c " import json, base64 d = json.load(open('assets/fetch.json')) names = ['reward_pathway.jpg', 'hpa_axis.jpg'] for img, name in zip(d, names): if img.get('base64'): b64 = img['base64'].split(',',1)[1] if ',' in img['base64'] else img['base64'] open('assets/'+name, 'wb').write(base64.b64decode(b64)) print('saved', name) else: print('error', name, img.get('error')) " ls -la assets/
~/drug-stress-overview-deck/build_deck.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
# ---------- palette (light + colorful, postgraduate academic feel) ----------
WHITE = RGBColor(0xFF,0xFF,0xFF)
BG_LIGHT = RGBColor(0xF7,0xF9,0xFC)
NAVY = RGBColor(0x10,0x2A,0x53)
TEAL = RGBColor(0x0E,0x8A,0x7D)
ORANGE = RGBColor(0xE8,0x7A,0x1E)
GOLD = RGBColor(0xC9,0x9A,0x1E)
RED = RGBColor(0xC0,0x2F,0x3C)
PURPLE = RGBColor(0x6A,0x3E,0x9E)
BLUE = RGBColor(0x1F,0x6F,0xC1)
GREEN = RGBColor(0x2E,0x8B,0x57)
GREY_TXT = RGBColor(0x3A,0x3F,0x4B)
LIGHT_GREY = RGBColor(0xE9,0xED,0xF2)
MAROON = RGBColor(0x8C,0x2D,0x52)
ACCENTS = [TEAL, ORANGE, BLUE, PURPLE, GREEN, GOLD, RED]
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
SW, SH = prs.slide_width, prs.slide_height
BLANK = prs.slide_layouts[6]
def add_slide():
s = prs.slides.add_slide(BLANK)
bg = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, SW, SH)
bg.fill.solid(); bg.fill.fore_color.rgb = BG_LIGHT
bg.line.fill.background(); bg.shadow.inherit = False
s.shapes._spTree.remove(bg._element)
s.shapes._spTree.insert(2, bg._element)
return s
def add_rect(s, x, y, w, h, color):
r = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, x, y, w, h)
r.fill.solid(); r.fill.fore_color.rgb = color
r.line.fill.background(); r.shadow.inherit = False
return r
def add_rounded(s, x, y, w, h, color, radius=0.08):
r = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, x, y, w, h)
r.fill.solid(); r.fill.fore_color.rgb = color
r.line.fill.background(); r.shadow.inherit = False
try: r.adjustments[0] = radius
except Exception: pass
return r
def add_text(s, x, y, w, h, text, size=18, color=GREY_TXT, bold=False, italic=False,
align=PP_ALIGN.LEFT, font="Calibri", anchor=MSO_ANCHOR.TOP, line_spacing=1.0, wrap=True):
tb = s.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = wrap
tf.vertical_anchor = anchor
tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0
p = tf.paragraphs[0]; p.alignment = align; p.line_spacing = line_spacing
r = p.add_run(); r.text = text
r.font.size = Pt(size); r.font.bold = bold; r.font.italic = italic
r.font.color.rgb = color; r.font.name = font
return tb
def add_bullets(s, x, y, w, h, items, size=15, color=GREY_TXT, font="Calibri",
space_after=10, line_spacing=1.08, bullet_color=None):
tb = s.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame; tf.word_wrap = True
tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0
first = True
for item in items:
if isinstance(item, tuple):
lead, rest, acc = item[0], item[1], item[2] if len(item) > 2 else (bullet_color or TEAL)
else:
lead, rest, acc = None, item, (bullet_color or TEAL)
p = tf.paragraphs[0] if first else tf.add_paragraph()
first = False
p.space_after = Pt(space_after); p.line_spacing = line_spacing
rb = p.add_run(); rb.text = " \u25AA "
rb.font.size = Pt(size); rb.font.color.rgb = acc; rb.font.bold = True; rb.font.name = font
if lead:
rl = p.add_run(); rl.text = lead + " "
rl.font.size = Pt(size); rl.font.bold = True; rl.font.color.rgb = NAVY; rl.font.name = font
rr = p.add_run(); rr.text = rest
rr.font.size = Pt(size); rr.font.color.rgb = color; rr.font.name = font
return tb
def add_kicker(s, text, color=TEAL):
add_rect(s, Inches(0.6), Inches(0.55), Inches(0.35), Inches(0.14), color)
add_text(s, Inches(1.05), Inches(0.42), Inches(8), Inches(0.35), text.upper(), size=13, color=color, bold=True)
def add_footer(s, idx, total, tag="DRUG ABUSE & STRESS MANAGEMENT OVERVIEW"):
add_rect(s, 0, SH - Inches(0.32), SW, Inches(0.32), NAVY)
add_text(s, Inches(0.6), SH - Inches(0.30), Inches(8), Inches(0.28), tag, size=9.5, color=WHITE, bold=True)
add_text(s, SW - Inches(1.6), SH - Inches(0.30), Inches(1.0), Inches(0.28), f"{idx:02d} / {total:02d}",
size=9.5, color=WHITE, bold=True, align=PP_ALIGN.RIGHT)
def title_block(s, title, subtitle=None, accent=TEAL, title_size=29):
add_rect(s, Inches(0.6), Inches(0.92), Inches(0.55), Inches(0.07), accent)
add_text(s, Inches(0.6), Inches(1.02), Inches(12.1), Inches(0.8), title, size=title_size, color=NAVY, bold=True)
if subtitle:
add_text(s, Inches(0.6), Inches(1.55), Inches(12.1), Inches(0.4), subtitle, size=14, color=GREY_TXT, italic=True)
TOTAL = 18
ASSETS = "/tmp/workspace/drug-stress-overview-deck/assets"
# ============================================================ SLIDE 1 - TITLE
s = add_slide()
add_rect(s, 0, 0, SW, SH, NAVY)
add_rect(s, 0, Inches(6.55), SW, Inches(0.95), TEAL)
add_rect(s, 0, Inches(6.35), SW, Inches(0.20), ORANGE)
add_rect(s, 0, 0, Inches(0.28), SH, GOLD)
add_rect(s, SW-Inches(0.28), 0, Inches(0.28), SH, RED)
add_text(s, Inches(0.9), Inches(0.8), Inches(9), Inches(0.4), "POSTGRADUATE OVERVIEW BRIEFING", size=15, color=GOLD, bold=True)
add_text(s, Inches(0.9), Inches(1.85), Inches(11.3), Inches(1.6),
"Drug Abuse & Stress Management", size=42, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(3.05), Inches(11.2), Inches(0.7),
"An Overview of the Stress-Substance Use Correlation", size=20, color=RGBColor(0xCF,0xE3,0xDF), italic=True)
add_text(s, Inches(0.9), Inches(3.55), Inches(11.2), Inches(0.6),
"With Applied Correlation to Military Personnel", size=18, color=ORANGE, bold=True)
add_rounded(s, Inches(0.9), Inches(4.4), Inches(11.3), Inches(1.5), RGBColor(0x16,0x3D,0x6E))
add_bullets(s, Inches(1.2), Inches(4.6), Inches(10.8), Inches(1.2), [
("General to specific:", "how psychological/physiological stress raises substance use risk across any population", ORANGE),
("Applied focus:", "why military personnel are a high-risk group, with direct civilian-vs-military comparative data", GOLD),
], size=14.5, color=WHITE)
add_text(s, Inches(0.9), Inches(6.75), Inches(8), Inches(0.5), "Evidence-based synthesis | Textbook & peer-reviewed literature", size=13, color=WHITE, bold=True)
add_text(s, SW-Inches(3.6), Inches(6.75), Inches(3.0), Inches(0.5), "Section 1 of 18", size=13, color=WHITE, bold=True, align=PP_ALIGN.RIGHT)
# ============================================================ SLIDE 2 - ROADMAP
s = add_slide(); idx=2
add_kicker(s, "Session Roadmap", TEAL)
title_block(s, "Overview & Learning Objectives")
objs = [
("01", "Define stress and substance use disorder along a clinical spectrum.", TEAL),
("02", "Explain theoretical models linking stress to drug/alcohol abuse (self-medication, allostasis).", ORANGE),
("03", "Describe the shared neurobiology: reward pathway and HPA axis.", BLUE),
("04", "Summarize core stress-management strategies applicable to any population.", PURPLE),
("05", "Compare stress-substance use correlation in civilians vs. military personnel using data.", GREEN),
("06", "Apply screening, treatment, and resilience-building frameworks to high-risk groups.", GOLD),
]
x0, y0 = Inches(0.6), Inches(2.05)
colw, rowh = Inches(6.0), Inches(1.65)
for i,(num, txt, col) in enumerate(objs):
col_i, row_i = i % 2, i // 2
x = x0 + col_i*Inches(6.35); y = y0 + row_i*Inches(1.75)
add_rounded(s, x, y, colw, rowh, WHITE)
add_rect(s, x, y, Inches(0.12), rowh, col)
add_text(s, x+Inches(0.3), y+Inches(0.15), Inches(0.9), Inches(0.6), num, size=26, color=col, bold=True)
add_text(s, x+Inches(1.1), y+Inches(0.18), colw-Inches(1.4), Inches(1.3), txt, size=13.5, color=GREY_TXT, line_spacing=1.1)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 3 - UNDERSTANDING STRESS
s = add_slide(); idx=3
add_kicker(s, "Foundations", ORANGE)
title_block(s, "Understanding Stress", accent=ORANGE)
add_bullets(s, Inches(0.6), Inches(2.1), Inches(6.8), Inches(4.5), [
("Definition:", "stress is the physiological and psychological response to any demand that exceeds perceived coping resources.", ORANGE),
("Eustress vs. distress:", "eustress (short-term, motivating) improves performance; distress (prolonged, overwhelming) impairs it and drives maladaptive coping.", TEAL),
("Acute vs. chronic:", "acute stress resolves once the stressor ends; chronic stress persists, keeping the body in sustained activation.", BLUE),
("Allostatic load:", "the cumulative physiological 'wear' from repeated or unrelieved stress, a key driver of long-term health and behavioral risk.", PURPLE),
("Universal relevance:", "every population experiences stress; what differs is exposure intensity, frequency, and available coping resources.", GREEN),
], size=14.5, line_spacing=1.15, space_after=13)
card = add_rounded(s, Inches(7.75), Inches(2.1), Inches(4.95), Inches(4.5), NAVY)
add_text(s, Inches(8.05), Inches(2.3), Inches(4.4), Inches(0.4), "STRESS RESPONSE PHASES", size=13.5, color=GOLD, bold=True)
phases = [("Alarm", "Immediate fight-or-flight activation via sympathetic nervous system", RED),
("Resistance", "Body attempts to adapt; cortisol sustains elevated readiness", ORANGE),
("Exhaustion", "Prolonged demand depletes resources; increased vulnerability to illness and maladaptive coping", GOLD)]
yy = Inches(2.85)
for t,d,c in phases:
add_rect(s, Inches(8.05), yy+Inches(0.05), Inches(0.22), Inches(0.22), c)
add_text(s, Inches(8.4), yy, Inches(4.1), Inches(0.35), t, size=13, color=WHITE, bold=True)
add_text(s, Inches(8.4), yy+Inches(0.38), Inches(4.1), Inches(0.7), d, size=11, color=RGBColor(0xD8,0xE3,0xF0), line_spacing=1.1)
yy += Inches(1.15)
add_text(s, Inches(8.05), Inches(6.3), Inches(4.4), Inches(0.3), "Based on Selye's General Adaptation Syndrome", size=9.5, color=RGBColor(0xC9,0xD6,0xE6), italic=True)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 4 - UNDERSTANDING DRUG ABUSE
s = add_slide(); idx=4
add_kicker(s, "Foundations", RED)
title_block(s, "Understanding Drug Abuse & Substance Use Disorder", accent=RED)
spectrum = [
("Use", "Occasional, controlled consumption without functional impairment", TEAL),
("Misuse", "Using a substance (incl. prescribed drugs) outside intended purpose or amount", BLUE),
("Abuse", "Repeated use despite recurrent social, occupational, or legal problems", ORANGE),
("Dependence", "Tolerance, withdrawal, and compulsive use; loss of control over consumption", RED),
]
x = Inches(0.6); w = Inches(2.95); gap = Inches(0.2); y = Inches(2.1); h = Inches(1.8)
for i,(t,d,c) in enumerate(spectrum):
add_rounded(s, x, y, w, h, c)
add_text(s, x+Inches(0.2), y+Inches(0.18), w-Inches(0.4), Inches(0.45), t, size=17, color=WHITE, bold=True)
add_text(s, x+Inches(0.2), y+Inches(0.68), w-Inches(0.4), Inches(1.0), d, size=11.5, color=WHITE, line_spacing=1.1)
if i < len(spectrum)-1:
arrow = s.shapes.add_shape(MSO_SHAPE.CHEVRON, x+w+Inches(0.02), y+Inches(0.7), Inches(0.28), Inches(0.4))
arrow.fill.solid(); arrow.fill.fore_color.rgb = NAVY; arrow.line.fill.background(); arrow.shadow.inherit=False
x += w + gap + Inches(0.3)
add_bullets(s, Inches(0.6), Inches(4.35), Inches(12.1), Inches(2.5), [
("DSM-5 core criteria:", "impaired control, social impairment, risky use, and pharmacological indicators (tolerance/withdrawal) across 11 possible criteria.", NAVY),
("Common categories:", "alcohol, opioids, sedative-hypnotics, stimulants (cocaine/amphetamines), cannabis, nicotine, and hallucinogens/novel psychoactive substances.", TEAL),
("Key point:", "substance use disorder is a chronic, relapsing brain disorder, not a moral failing; it responds to structured treatment like other medical conditions.", ORANGE),
], size=14, line_spacing=1.15, space_after=12)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 5 - THEORETICAL MODELS
s = add_slide(); idx=5
add_kicker(s, "Correlation Models", PURPLE)
title_block(s, "How Stress and Substance Use Correlate: Theoretical Models", accent=PURPLE)
models = [
("Self-Medication Hypothesis", "Individuals use substances to relieve specific distressing affect states (anxiety, hyperarousal, low mood) rather than for pleasure alone.", PURPLE),
("Tension-Reduction Theory", "Alcohol/drugs are reinforced because they produce short-term reduction in subjective tension, even though long-term stress worsens.", TEAL),
("Diathesis-Stress Model", "Genetic/biological vulnerability + environmental stress interact; stress 'triggers' latent risk for addiction in predisposed individuals.", ORANGE),
("Allostatic Load / Koob-Le Moal Model", "Repeated substance use progressively dysregulates stress and reward circuits, lowering the threshold for relapse under future stress.", RED),
]
y = Inches(2.1)
for t,d,c in models:
add_rounded(s, Inches(0.6), y, Inches(12.1), Inches(1.05), WHITE)
add_rect(s, Inches(0.6), y, Inches(0.12), Inches(1.05), c)
add_text(s, Inches(0.95), y+Inches(0.1), Inches(3.7), Inches(0.85), t, size=15, color=NAVY, bold=True, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.05)
add_text(s, Inches(4.75), y+Inches(0.1), Inches(7.7), Inches(0.85), d, size=12.5, color=GREY_TXT, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.1)
y += Inches(1.2)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 6 - NEUROBIOLOGY
s = add_slide(); idx=6
add_kicker(s, "Neurobiology", TEAL)
title_block(s, "Shared Circuitry: Reward Pathway & the HPA Axis", accent=TEAL)
add_bullets(s, Inches(0.6), Inches(2.1), Inches(5.4), Inches(4.5), [
("Reward pathway:", "the mesolimbic dopamine system (VTA \u2192 nucleus accumbens \u2192 prefrontal cortex) mediates reinforcement; drugs hijack this circuit for exaggerated dopamine release.", TEAL),
("HPA axis:", "the hypothalamic-pituitary-adrenal axis governs the cortisol stress response; chronic activation impairs prefrontal control and amygdala regulation.", ORANGE),
("The overlap:", "chronic stress sensitizes the same dopaminergic circuits recruited by drugs of abuse, and stress hormones directly modulate craving and relapse vulnerability.", BLUE),
("Clinical implication:", "someone under sustained stress has a neurobiologically lowered threshold for developing compulsive substance use.", PURPLE),
], size=13.5, line_spacing=1.15, space_after=12)
pic1 = add_rounded(s, Inches(6.2), Inches(2.05), Inches(6.55), Inches(2.15), WHITE)
try:
s.shapes.add_picture(ASSETS+"/reward_pathway.jpg", Inches(6.85), Inches(2.15), height=Inches(1.95))
except Exception: pass
add_text(s, Inches(6.4), Inches(4.25), Inches(6.15), Inches(0.28), "Mesolimbic dopamine reward pathway (educational diagram)", size=9, color=GREY_TXT, italic=True)
pic2 = add_rounded(s, Inches(6.2), Inches(4.65), Inches(6.55), Inches(1.95), WHITE)
try:
s.shapes.add_picture(ASSETS+"/hpa_axis.jpg", Inches(6.85), Inches(4.75), height=Inches(1.75))
except Exception: pass
add_text(s, Inches(6.4), Inches(6.42), Inches(6.15), Inches(0.28), "HPA axis and chronic cortisol effects (educational diagram)", size=9, color=GREY_TXT, italic=True)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 7 - SUBSTANCES ABUSED UNDER STRESS
s = add_slide(); idx=7
add_kicker(s, "General Population", BLUE)
title_block(s, "Substances Commonly Abused Under Stress", accent=BLUE)
rows2 = [
("Alcohol", "Most widely used stress-coping substance; GABAergic effect dampens anxiety short-term.", TEAL),
("Opioids", "Prescribed for pain, misused for emotional numbing; high overdose risk when combined with sedatives.", RED),
("Sedative-Hypnotics (benzodiazepines)", "Used for anxiety/insomnia relief; rapid tolerance and dangerous withdrawal profile.", ORANGE),
("Stimulants (cocaine, amphetamines)", "Used to combat fatigue or low mood; can worsen anxiety and precipitate psychosis with heavy use.", GOLD),
("Cannabis", "Perceived as relaxing; regular heavy use linked to amotivation, anxiety, and psychosis risk in vulnerable users.", GREEN),
("Nicotine/Tobacco", "Common stress-coping behavior; reinforces its own withdrawal-driven craving cycle.", PURPLE),
]
x0, y0 = Inches(0.6), Inches(2.05); cw, ch, gap = Inches(3.95), Inches(2.05), Inches(0.2)
for i,(t, d, c) in enumerate(rows2):
col_i, row_i = i % 3, i // 3
x = x0 + col_i*(cw+gap); y = y0 + row_i*(ch+gap)
add_rounded(s, x, y, cw, ch, WHITE)
add_rect(s, x, y, Inches(0.09), ch, c)
add_text(s, x+Inches(0.28), y+Inches(0.18), cw-Inches(0.5), Inches(0.6), t, size=13.5, color=NAVY, bold=True, line_spacing=1.0)
add_text(s, x+Inches(0.28), y+Inches(0.82), cw-Inches(0.5), Inches(1.15), d, size=11, color=GREY_TXT, line_spacing=1.1)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 8 - GENERAL POPULATION DATA
s = add_slide(); idx=8
add_kicker(s, "Evidence", GOLD)
title_block(s, "The Correlation in Numbers: General Population", accent=GOLD)
add_text(s, Inches(0.6), Inches(2.05), Inches(12.1), Inches(0.9),
"Population-level research consistently shows that higher perceived stress and trauma exposure track with higher rates of substance "
"use disorder, independent of the specific population studied.", size=15, color=GREY_TXT, line_spacing=1.2)
stats = [
("2-4x", "higher odds of substance use disorder in adults reporting high chronic stress vs. low stress", RED),
("~50%", "of individuals with a substance use disorder also have a co-occurring mental health condition (NIDA)", ORANGE),
("Childhood adversity", "(ACEs) is one of the strongest predictors of adult PTSD-SUD comorbidity (systematic review, 2025)", PURPLE),
("Stress sensitization", "documented via neuroimaging: chronic stress alters mesolimbic reward response to drug cues", TEAL),
]
x0, y0 = Inches(0.6), Inches(3.15); cw, ch, gap = Inches(5.95), Inches(1.55), Inches(0.2)
for i,(val, desc, c) in enumerate(stats):
col_i, row_i = i % 2, i // 2
x = x0 + col_i*(cw+gap); y = y0 + row_i*(ch+gap)
add_rounded(s, x, y, cw, ch, c)
add_text(s, x+Inches(0.25), y+Inches(0.18), cw-Inches(0.5), Inches(0.5), val, size=19, color=WHITE, bold=True)
add_text(s, x+Inches(0.25), y+Inches(0.72), cw-Inches(0.5), Inches(0.75), desc, size=11.5, color=WHITE, line_spacing=1.1)
add_text(s, Inches(0.6), Inches(6.65), Inches(12.1), Inches(0.3),
"Sources: NIDA; Sahani, Hurd & Bachi (2022) PMID 34971448; Patel et al. (2025) PMID 40317663", size=9.5, color=GREY_TXT, italic=True)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 9 - STRESS MANAGEMENT OVERVIEW
s = add_slide(); idx=9
add_kicker(s, "Prevention", GREEN)
title_block(s, "Stress Management: General Strategies", accent=GREEN)
skills = [
("Cognitive-Behavioral Skills", "Self-observation, cognitive restructuring, and problem-solving training reduce reliance on avoidance/substance coping.", TEAL),
("Relaxation & Mindfulness", "Diaphragmatic breathing, progressive muscle relaxation, and mindfulness meditation lower physiological arousal.", BLUE),
("Physical Activity & Sleep Hygiene", "Regular exercise and consistent sleep reduce cortisol reactivity and improve emotional regulation.", ORANGE),
("Social Support", "Strong social networks buffer stress appraisal and provide alternatives to substance-based coping.", PURPLE),
("Time Management", "Structuring workload and routine reduces chronic overload, a key driver of maladaptive coping.", GOLD),
]
y = Inches(2.1)
for i,(t, d, c) in enumerate(skills):
add_rect(s, Inches(0.6), y, Inches(0.5), Inches(0.8), c)
add_text(s, Inches(0.6), y, Inches(0.5), Inches(0.8), str(i+1), size=22, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
add_rounded(s, Inches(1.25), y, Inches(11.45), Inches(0.8), WHITE)
add_text(s, Inches(1.5), y+Inches(0.06), Inches(3.3), Inches(0.68), t, size=14, color=NAVY, bold=True, anchor=MSO_ANCHOR.MIDDLE)
add_text(s, Inches(4.9), y+Inches(0.06), Inches(7.65), Inches(0.68), d, size=11.5, color=GREY_TXT, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.05)
y += Inches(0.93)
add_text(s, Inches(0.6), Inches(6.85), Inches(11.5), Inches(0.35),
"These strategies apply across civilian and military settings; the next sections examine why the military needs an intensified version of this approach.",
size=11.5, color=GREY_TXT, italic=True)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 10 - SECTION DIVIDER
s = add_slide(); idx=10
add_rect(s, 0, 0, SW, SH, NAVY)
add_rect(s, 0, 0, SW, Inches(0.14), ORANGE)
add_rect(s, 0, SH-Inches(0.14), SW, Inches(0.14), GOLD)
add_text(s, Inches(0.9), Inches(2.5), Inches(11.5), Inches(0.5), "SECTION TWO", size=16, color=GOLD, bold=True)
add_text(s, Inches(0.9), Inches(3.0), Inches(11.5), Inches(1.5), "Applying the Correlation to Military Personnel", size=36, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(4.4), Inches(11.0), Inches(0.9),
"Why service members represent a concentrated, high-stakes case of the stress-substance abuse correlation reviewed above.",
size=16, color=RGBColor(0xCF,0xE3,0xDF), italic=True, line_spacing=1.2)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 11 - WHY MILITARY IS HIGH-RISK
s = add_slide(); idx=11
add_kicker(s, "Military Correlation", ORANGE)
title_block(s, "Why Military Personnel Are a High-Risk Population", accent=ORANGE)
cards = [
("Combat Exposure", "Direct threat to life and witnessing death/injury drive acute and chronic hyperarousal.", RED),
("Deployment & Separation", "Prolonged separation, disrupted sleep, and austere conditions raise baseline stress load.", ORANGE),
("Unit 'Beer Culture'", "Alcohol is embedded in unit bonding and off-duty rituals, socially reinforcing heavy drinking.", TEAL),
("Reintegration Stress", "Difficult transition home, role loss, and relationship strain after deployment.", BLUE),
("Chronic Pain / TBI", "Combat injury increases exposure to prescribed opioids and sedatives.", PURPLE),
("Stigma & Career Fear", "Fear of career or security-clearance consequences suppresses help-seeking.", GOLD),
]
x0, y0 = Inches(0.6), Inches(2.05); cw, ch, gap = Inches(3.95), Inches(2.05), Inches(0.2)
for i,(t, d, c) in enumerate(cards):
col_i, row_i = i % 3, i // 3
x = x0 + col_i*(cw+gap); y = y0 + row_i*(ch+gap)
add_rounded(s, x, y, cw, ch, WHITE)
add_rect(s, x, y, cw, Inches(0.09), c)
add_text(s, x+Inches(0.25), y+Inches(0.25), cw-Inches(0.5), Inches(0.5), t, size=14.5, color=NAVY, bold=True)
add_text(s, x+Inches(0.25), y+Inches(0.8), cw-Inches(0.5), Inches(1.15), d, size=11.5, color=GREY_TXT, line_spacing=1.1)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 12 - CIVILIAN VS MILITARY DATA TABLE
s = add_slide(); idx=12
add_kicker(s, "Comparative Evidence", RED)
title_block(s, "Civilian vs. Military: The Correlation in Comparative Data", accent=RED)
headers = ["Indicator", "General Population", "Military Personnel"]
rows = [
("PTSD prevalence", "6.8%", "~18% (post-deployment Army)"),
("Past-month binge drinking", "24.7%", "30%"),
("Heavy drinking (regular)", "6.7%", "5.4% (varies by service/era)"),
("Possible AUD (hazardous use)", "~13-15%", ">33% meet hazardous-use criteria"),
("AUD + PTSD comorbidity", "Lower baseline co-occurrence", "58-63% of AUD treatment-seekers also meet PTSD criteria"),
("Odds of AUD after trauma/combat exposure", "Baseline risk", "1.36x higher after combat deployment"),
]
tx, ty = Inches(0.6), Inches(2.05)
tw = Inches(12.1); col_w = [Inches(4.1), Inches(4.0), Inches(4.0)]
add_rect(s, tx, ty, tw, Inches(0.55), NAVY)
xx = tx
for i,h in enumerate(headers):
add_text(s, xx+Inches(0.15), ty+Inches(0.08), col_w[i]-Inches(0.3), Inches(0.4), h, size=13.5, color=WHITE, bold=True, anchor=MSO_ANCHOR.MIDDLE)
xx += col_w[i]
yy = ty + Inches(0.55)
for r_i, row in enumerate(rows):
rc = WHITE if r_i % 2 == 0 else LIGHT_GREY
add_rect(s, tx, yy, tw, Inches(0.68), rc)
xx = tx
for c_i, val in enumerate(row):
col_txt = NAVY if c_i == 0 else (TEAL if c_i==2 else GREY_TXT)
bold_txt = True if c_i == 0 or c_i == 2 else False
add_text(s, xx+Inches(0.15), yy+Inches(0.06), col_w[c_i]-Inches(0.3), Inches(0.56), val,
size=12, color=col_txt, bold=bold_txt, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.0)
xx += col_w[c_i]
yy += Inches(0.68)
add_text(s, tx, yy+Inches(0.1), tw, Inches(0.3),
"Sources: Hazelden Betty Ford; NIDA DrugFacts; HRBS 2015; Longbranch Recovery statistics review", size=9.5, color=GREY_TXT, italic=True)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 13 - PTSD-SUD COMORBIDITY MILITARY
s = add_slide(); idx=13
add_kicker(s, "Military Correlation", PURPLE)
title_block(s, "PTSD and Substance Use in the Military: A Reinforcing Loop", accent=PURPLE)
cyc = ["Combat/operational trauma exposure", "Hyperarousal, insomnia, intrusive memories",
"Alcohol or drug use for relief ('self-medication')", "Short-term relief reinforces the behavior",
"Tolerance, withdrawal, worsening sleep and mood", "Symptom escalation increases relapse risk and trauma sensitivity"]
add_rounded(s, Inches(0.6), Inches(2.1), Inches(6.6), Inches(4.5), RGBColor(0xEF,0xE7,0xF7))
add_rect(s, Inches(0.6), Inches(2.1), Inches(6.6), Inches(0.09), PURPLE)
add_text(s, Inches(0.9), Inches(2.35), Inches(6.0), Inches(0.4), "THE REINFORCING LOOP", size=14, color=PURPLE, bold=True)
yy = Inches(2.9)
for i, txt in enumerate(cyc):
add_rect(s, Inches(0.9), yy+Inches(0.06), Inches(0.32), Inches(0.32), ACCENTS[i % len(ACCENTS)])
add_text(s, Inches(0.9), yy+Inches(0.06), Inches(0.32), Inches(0.32), str(i+1), size=13, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
add_text(s, Inches(1.35), yy, Inches(5.65), Inches(0.55), txt, size=12.5, color=GREY_TXT, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.05)
yy += Inches(0.6)
add_bullets(s, Inches(7.55), Inches(2.1), Inches(5.15), Inches(4.5), [
("Prevalence:", "up to 63% of deployed veterans in AUD treatment meet PTSD criteria, far exceeding civilian co-occurrence rates.", PURPLE),
("Pharmacology:", "prazosin can target PTSD-related nightmares/hyperarousal; naltrexone/acamprosate remain first-line for AUD.", TEAL),
("Sleep as trigger:", "nightmares and insomnia are a common, modifiable trigger for self-medicating with alcohol or sedatives.", ORANGE),
("Treatment implication:", "comorbid presentations need integrated trauma-focused and addiction care, not sequential/siloed treatment.", BLUE),
], size=13, line_spacing=1.15, space_after=13)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 14 - SCREENING
s = add_slide(); idx=14
add_kicker(s, "Early Identification", BLUE)
title_block(s, "Screening Tools Across Both Populations", accent=BLUE)
tools = [
("AUDIT / AUDIT-C", "WHO-validated alcohol misuse screen; widely used in both civilian primary care and military occupational health.", TEAL),
("CAGE Questionnaire", "4-item quick screen (Cut down, Annoyed, Guilty, Eye-opener); \u22652 positive flags further evaluation.", ORANGE),
("DAST-10", "Drug Abuse Screening Test for non-alcohol substances; complements AUDIT in any setting.", PURPLE),
("PCL-5 / PC-PTSD-5", "Screens for PTSD symptoms that frequently underlie self-medicating behavior.", GOLD),
("Periodic Health/Wellness Exams", "Routine, confidential screening in annual exams (civilian) or pre/post-deployment exams (military).", GREEN),
("Behavioral / Performance Indicators", "Absenteeism, disciplinary incidents, and performance decline as adjunct 'soft' signals in either setting.", BLUE),
]
x0, y0 = Inches(0.6), Inches(2.05); cw, ch, gap = Inches(3.95), Inches(2.05), Inches(0.2)
for i,(t, d, c) in enumerate(tools):
col_i, row_i = i % 3, i // 3
x = x0 + col_i*(cw+gap); y = y0 + row_i*(ch+gap)
add_rounded(s, x, y, cw, ch, WHITE)
add_rect(s, x, y, cw, Inches(0.09), c)
add_text(s, x+Inches(0.25), y+Inches(0.25), cw-Inches(0.5), Inches(0.5), t, size=14, color=NAVY, bold=True)
add_text(s, x+Inches(0.25), y+Inches(0.8), cw-Inches(0.5), Inches(1.15), d, size=11, color=GREY_TXT, line_spacing=1.1)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 15 - TREATMENT & PREVENTION
s = add_slide(); idx=15
add_kicker(s, "Treatment & Prevention", GREEN)
title_block(s, "Treatment & Prevention: General Principles, Military Application", accent=GREEN)
add_text(s, Inches(0.6), Inches(2.05), Inches(12.1), Inches(0.35), "GENERAL PRINCIPLES", size=14.5, color=GREEN, bold=True)
add_bullets(s, Inches(0.6), Inches(2.42), Inches(12.1), Inches(1.4), [
"Motivational interviewing and CBT to address both the substance behavior and the underlying stress/trauma driver.",
"Pharmacotherapy where indicated: naltrexone/acamprosate for AUD; prazosin for PTSD-related hyperarousal.",
"Integrated, confidential, non-punitive access to care improves engagement in any population.",
], size=12.5, color=GREY_TXT, bullet_color=GREEN, space_after=6)
add_text(s, Inches(0.6), Inches(4.0), Inches(12.1), Inches(0.35), "MILITARY-SPECIFIC ADAPTATIONS", size=14.5, color=ORANGE, bold=True)
add_bullets(s, Inches(0.6), Inches(4.37), Inches(12.1), Inches(2.7), [
"Command/leadership engagement: leaders modeling moderate drinking and enforcing consistent, fair policy shifts unit norms.",
"Brief interventions after alcohol-related incidents (e.g., DUI) shown effective in workplace-based RCTs with service members.",
"Peer support programs trained to identify at-risk personnel earlier and reduce stigma-driven avoidance of care.",
"Structured reintegration and deployment-cycle support targeting the highest-risk transition windows.",
"Access restriction and social-norm change around on-base alcohol availability.",
], size=12.5, color=GREY_TXT, bullet_color=ORANGE, space_after=7)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 16 - RESILIENCE LAYERS
s = add_slide(); idx=16
add_kicker(s, "Building Resilience", GREEN)
title_block(s, "A Layered Resilience Model (Civilian and Military)", accent=GREEN)
layers = [
("Individual", "Stress-management skills, sleep hygiene, physical fitness, help-seeking self-efficacy", TEAL),
("Peer / Social", "Peer support, healthy social norms, buddy systems, family support networks", ORANGE),
("Clinical System", "Confidential screening, brief intervention, integrated behavioral health, pharmacotherapy", BLUE),
("Organizational / Policy", "Access restriction, non-punitive referral pathways, leadership modeling, continuity of care", PURPLE),
]
y = Inches(2.15)
for i,(t,d,c) in enumerate(layers):
w = Inches(11.9) - Inches(i*0.55); x = Inches(0.6) + Inches(i*0.275)
add_rounded(s, x, y, w, Inches(0.95), c)
add_text(s, x+Inches(0.3), y+Inches(0.12), Inches(2.6), Inches(0.35), t, size=15, color=WHITE, bold=True)
add_text(s, x+Inches(0.3), y+Inches(0.48), w-Inches(0.6), Inches(0.4), d, size=11.5, color=WHITE)
y += Inches(1.08)
add_text(s, Inches(0.6), Inches(6.55), Inches(11.9), Inches(0.6),
"The correlation between stress and substance abuse is consistent across settings; only the intensity of exposure and the resourcing of each layer differ between civilian and military contexts.",
size=12.5, color=GREY_TXT, italic=True, line_spacing=1.15)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 17 - KEY TAKEAWAYS
s = add_slide(); idx=17
add_rect(s, 0, 0, SW, SH, NAVY)
add_rect(s, 0, 0, Inches(0.28), SH, TEAL)
add_rect(s, SW-Inches(0.28), 0, Inches(0.28), SH, ORANGE)
add_text(s, Inches(0.9), Inches(0.6), Inches(10), Inches(0.6), "KEY TAKEAWAYS", size=16, color=GOLD, bold=True)
add_text(s, Inches(0.9), Inches(1.05), Inches(11), Inches(0.9), "Stress and Substance Abuse Are Causally Linked, Not Coincidental",
size=27, color=WHITE, bold=True)
take = [
("The correlation is universal:", "chronic stress raises substance abuse risk in any population through shared reward-circuit and HPA-axis neurobiology.", ORANGE),
("Military personnel show an amplified version:", "combat exposure, deployment, and 'beer culture' push the same correlation to higher, measurable rates (PTSD, binge drinking, AUD-PTSD comorbidity).", TEAL),
("Screen routinely, treat the whole picture:", "AUDIT-C/CAGE/PCL-5 plus integrated psychosocial and pharmacologic treatment address both the substance use and its stress/trauma driver.", BLUE),
("Resilience is layered:", "individual skills, peer support, clinical access, and organizational policy must work together in either setting.", GOLD),
("Leadership and culture matter most in high-exposure groups:", "non-punitive referral pathways and modeling are as important as any single treatment for military populations.", PURPLE),
]
y = Inches(2.15)
for lead, rest, c in take:
add_rect(s, Inches(0.9), y+Inches(0.05), Inches(0.35), Inches(0.35), c)
tb = s.shapes.add_textbox(Inches(1.5), y, Inches(10.8), Inches(0.9))
tf = tb.text_frame; tf.word_wrap = True
p = tf.paragraphs[0]; p.line_spacing = 1.12
r1 = p.add_run(); r1.text = lead + " "; r1.font.bold = True; r1.font.size = Pt(14); r1.font.color.rgb = GOLD
r2 = p.add_run(); r2.text = rest; r2.font.size = Pt(14); r2.font.color.rgb = WHITE
y += Inches(0.98)
add_footer(s, idx, TOTAL)
# ============================================================ SLIDE 18 - REFERENCES
s = add_slide(); idx=18
add_kicker(s, "References", GREY_TXT)
title_block(s, "Selected References", accent=NAVY, title_size=26)
refs = [
"Sahani V, Hurd YL, Bachi K. Neural Underpinnings of Social Stress in Substance Use Disorders. Curr Top Behav Neurosci. 2022. PMID: 34971448.",
"Patel H, Easterbrook B, Ralston FA, et al. Increased Prevalence of Childhood Complex Trauma in Comorbid PTSD and SUD: A Systematic Review. Early Interv Psychiatry. 2025. PMID: 40317663.",
"Osborne AK, Wilson-Menzfeld G, McGill G. Military service and alcohol use: a systematic narrative review. Occup Med. 2022. PMID: 35674143.",
"Watterson JR, Gabbe B, Rosenfeld JV. Workplace intervention programmes for decreasing alcohol use in military personnel. BMJ Mil Health. 2021. PMID: 33361438.",
"National Institute on Drug Abuse (NIDA). Substance Use and Military Life DrugFacts.",
"Hazelden Betty Ford Foundation. Substance Abuse in the Military: Statistics.",
"Kaplan & Sadock's Comprehensive Textbook of Psychiatry - Alcohol Use Disorders; Stress Management Training chapters.",
"Harrison's Principles of Internal Medicine, 22nd Ed. - Alcohol Use Disorder and psychiatric comorbidity.",
"Selye H. General Adaptation Syndrome - foundational stress physiology model.",
]
add_bullets(s, Inches(0.6), Inches(2.05), Inches(12.1), Inches(4.9), refs, size=12.5, color=GREY_TXT,
bullet_color=TEAL, space_after=12, line_spacing=1.1)
add_footer(s, idx, TOTAL)
prs.save("/tmp/workspace/drug-stress-overview-deck/output/Drug_Abuse_Stress_Management_Overview.pptx")
print("Saved. Slide count:", len(prs.slides._sldIdLst))
cd /tmp/workspace/drug-stress-overview-deck && python build_deck.py
Drug Abuse Stress Management Overview
Presentation · PPTX
Make Internal medicine Postgraduate PowerPoint presentation on Clinical disorders: acromegaly, hypopituitarism and diabetes insipidus… make it detailed and add relevant clinical trials and evidence based treatment, use a different format than you normally use
acromegaly treatment
hypopituitarism growth hormone replacement adults
diabetes insipidus copeptin diagnosis
2022 consensus statement renaming diabetes insipidus arginine vasopressin deficiency resistance
pasireotide acromegaly PAOLA trial
Endocrine Society acromegaly guideline Katznelson
acromegaly facial features enlarged hands photograph
pituitary adenoma MRI sagittal

This diagnostic image provides a comparison of pre-operative and post-operative MRI scans showing a TSH-secreting pituitary adenoma. Panels A (sagittal) and C (coronal) display a well-defined, hyperintense oval mass within the sella turcica. The adenoma demonstrates significant suprasellar extension, causing superior displacement of the optic chiasm and narrowing the suprasellar cistern. Panels B (sagittal) and D (coronal) show the same anatomical regions following surgical intervention. These images demonstrate a gross total resection of the adenoma, characterized by the absence of the previously seen hyperintense mass and the restoration of normal anatomical contours in the pituitary region. Visible landmarks include the sphenoid sinus, brainstem, and ventricles. This comparison serves as an educational tool for identifying pituitary macroadenomas and assessing surgical outcomes in neuroendocrinology. Target audience: medical students and neurology residents.

This diagnostic image provides a comparison of (a) coronal and (b) sagittal views of a brain MRI, demonstrating a 2 cm pituitary adenoma. The lesion is identified by yellow arrows in both views. In the coronal section, the mass is centrally located within the sella turcica, exhibiting a rounded morphology with signal intensity largely isointense to brain parenchyma. In the sagittal section, the relationship between the adenoma and the skull base is visible, showing the mass arising from the sellar region and extending superiorly toward the suprasellar cistern. This image illustrates key neuroanatomical landmarks, including the pituitary gland, the sella turcica, and the relative proximity to the optic chiasm and hypothalamus. It serves as an educational resource for identifying sellar masses and understanding the radiological presentation of a pituitary adenoma in different anatomical planes.

**Imaging Modality:** Sagittal Magnetic Resonance Imaging (MRI), likely T1-weighted sequence.

**Imaging Modality:** Magnetic Resonance Imaging (MRI), T1-weighted sagittal view with contrast enhancement.
desmopressin central diabetes insipidus treatment
mkdir -p /tmp/workspace/im-pituitary-deck/assets /tmp/workspace/im-pituitary-deck/output cd /tmp/workspace/im-pituitary-deck python /tmp/skills/shared/scripts/fetch_images.py \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_3ffa0ee2cc42edc89f992174742a9296e11b9ee20ccc1757641a6ad3f5840951.jpg" \ "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_5ddb32dc998388ee523eedacd87f6439db01de978375cd07b06c8735fb368653.jpg" \ > assets/fetch.json 2>&1 python -c " import json, base64 d = json.load(open('assets/fetch.json')) names = ['pituitary_adenoma_mri.jpg', 'pituitary_prepostop_mri.jpg'] for img, name in zip(d, names): if img.get('base64'): b64 = img['base64'].split(',',1)[1] if ',' in img['base64'] else img['base64'] open('assets/'+name, 'wb').write(base64.b64decode(b64)) print('saved', name) else: print('error', name, img.get('error')) " ls -la assets/
~/im-pituitary-deck/build_deck.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from pptx.oxml.ns import qn
# ---------- palette ----------
WHITE = RGBColor(0xFF,0xFF,0xFF)
BG_LIGHT = RGBColor(0xF6,0xF8,0xFB)
INK = RGBColor(0x1B,0x22,0x2E)
NAVY = RGBColor(0x0D,0x1F,0x3C)
SIDEBAR = RGBColor(0x0D,0x1F,0x3C)
GREY_TXT = RGBColor(0x3A,0x3F,0x4B)
LIGHT_GREY = RGBColor(0xE7,0xEB,0xF1)
MED_GREY = RGBColor(0xB9,0xC1,0xCE)
ORANGE = RGBColor(0xE0,0x6A,0x1C) # Acromegaly
BLUE = RGBColor(0x1F,0x6F,0xC1) # Hypopituitarism
TEAL = RGBColor(0x0E,0x8A,0x7D) # Diabetes insipidus
GOLD = RGBColor(0xC9,0x9A,0x1E)
RED = RGBColor(0xC0,0x2F,0x3C)
PURPLE = RGBColor(0x6A,0x3E,0x9E)
GREEN = RGBColor(0x2E,0x8B,0x57)
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
SW, SH = prs.slide_width, prs.slide_height
BLANK = prs.slide_layouts[6]
SIDEBAR_W = Inches(2.15)
CONTENT_X = SIDEBAR_W + Inches(0.45)
CONTENT_W = SW - CONTENT_X - Inches(0.5)
ASSETS = "/tmp/workspace/im-pituitary-deck/assets"
TOTAL = 26
def set_no_line(shape):
shape.line.fill.background(); shape.shadow.inherit = False
def add_rect(s, x, y, w, h, color):
r = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, x, y, w, h)
r.fill.solid(); r.fill.fore_color.rgb = color; set_no_line(r)
return r
def add_rounded(s, x, y, w, h, color, radius=0.06):
r = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, x, y, w, h)
r.fill.solid(); r.fill.fore_color.rgb = color; set_no_line(r)
try: r.adjustments[0] = radius
except Exception: pass
return r
def add_text(s, x, y, w, h, text, size=16, color=GREY_TXT, bold=False, italic=False,
align=PP_ALIGN.LEFT, font="Calibri", anchor=MSO_ANCHOR.TOP, line_spacing=1.0, wrap=True):
tb = s.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame; tf.word_wrap = wrap; tf.vertical_anchor = anchor
tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0
p = tf.paragraphs[0]; p.alignment = align; p.line_spacing = line_spacing
r = p.add_run(); r.text = text
r.font.size = Pt(size); r.font.bold = bold; r.font.italic = italic
r.font.color.rgb = color; r.font.name = font
return tb
def add_bullets(s, x, y, w, h, items, size=14, color=GREY_TXT, font="Calibri",
space_after=8, line_spacing=1.08, bullet_color=None):
tb = s.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame; tf.word_wrap = True
tf.margin_left = 0; tf.margin_right = 0; tf.margin_top = 0; tf.margin_bottom = 0
first = True
for item in items:
if isinstance(item, tuple):
lead, rest, acc = item[0], item[1], item[2] if len(item) > 2 else (bullet_color or NAVY)
else:
lead, rest, acc = None, item, (bullet_color or NAVY)
p = tf.paragraphs[0] if first else tf.add_paragraph()
first = False
p.space_after = Pt(space_after); p.line_spacing = line_spacing
rb = p.add_run(); rb.text = " \u2014 "
rb.font.size = Pt(size); rb.font.color.rgb = acc; rb.font.bold = True; rb.font.name = font
if lead:
rl = p.add_run(); rl.text = lead + " "
rl.font.size = Pt(size); rl.font.bold = True; rl.font.color.rgb = INK; rl.font.name = font
rr = p.add_run(); rr.text = rest
rr.font.size = Pt(size); rr.font.color.rgb = color; rr.font.name = font
return tb
def base_slide(section_color=NAVY):
s = prs.slides.add_slide(BLANK)
bg = add_rect(s, 0, 0, SW, SH, BG_LIGHT)
s.shapes._spTree.remove(bg._element); s.shapes._spTree.insert(2, bg._element)
add_rect(s, 0, 0, SIDEBAR_W, SH, SIDEBAR)
add_rect(s, SIDEBAR_W, 0, Inches(0.07), SH, section_color)
return s
def sidebar(s, idx, section_label, topic_label, section_color=NAVY):
add_rect(s, Inches(0.35), Inches(0.5), Inches(0.4), Inches(0.08), section_color)
add_text(s, Inches(0.35), Inches(0.68), Inches(1.6), Inches(0.6), section_label.upper(),
size=11.5, color=section_color, bold=True, line_spacing=1.1)
add_text(s, Inches(0.35), Inches(1.35), Inches(1.6), Inches(1.6), topic_label,
size=15, color=WHITE, bold=True, line_spacing=1.15)
add_rect(s, Inches(0.35), Inches(6.55), Inches(1.5), Inches(0.02), RGBColor(0x3A,0x4C,0x6E))
add_text(s, Inches(0.35), Inches(6.65), Inches(1.5), Inches(0.35), f"{idx:02d}", size=26, color=WHITE, bold=True)
add_text(s, Inches(0.35), Inches(7.08), Inches(1.5), Inches(0.3), f"of {TOTAL:02d}", size=11, color=MED_GREY)
def content_header(s, breadcrumb, title, accent=NAVY, title_size=25):
add_text(s, CONTENT_X, Inches(0.42), CONTENT_W, Inches(0.3), breadcrumb.upper(), size=11.5, color=accent, bold=True)
add_rect(s, CONTENT_X, Inches(0.78), Inches(0.5), Inches(0.055), accent)
add_text(s, CONTENT_X, Inches(0.88), CONTENT_W, Inches(0.65), title, size=title_size, color=INK, bold=True)
def style_table(tbl, header_color=NAVY, header_text=WHITE, font_size=11.5, first_col_bold=False):
for r_i, row in enumerate(tbl.rows):
for c_i, cell in enumerate(row.cells):
cell.margin_left = Inches(0.08); cell.margin_right = Inches(0.08)
cell.margin_top = Inches(0.04); cell.margin_bottom = Inches(0.04)
cell.vertical_anchor = MSO_ANCHOR.MIDDLE
if r_i == 0:
cell.fill.solid(); cell.fill.fore_color.rgb = header_color
else:
cell.fill.solid(); cell.fill.fore_color.rgb = WHITE if r_i % 2 == 1 else LIGHT_GREY
for p in cell.text_frame.paragraphs:
p.line_spacing = 1.0
for run in p.runs:
run.font.size = Pt(font_size)
run.font.name = "Calibri"
if r_i == 0:
run.font.color.rgb = header_text; run.font.bold = True
else:
run.font.color.rgb = GREY_TXT
if c_i == 0 and first_col_bold:
run.font.bold = True; run.font.color.rgb = INK
def add_table(s, x, y, w, h, headers, rows, col_widths=None, header_color=NAVY, font_size=11.5, first_col_bold=True):
n_rows = len(rows) + 1
n_cols = len(headers)
gframe = s.shapes.add_table(n_rows, n_cols, x, y, w, h)
tbl = gframe.table
if col_widths:
for i, cw in enumerate(col_widths):
tbl.columns[i].width = cw
for c_i, htext in enumerate(headers):
tbl.cell(0, c_i).text = htext
for r_i, row in enumerate(rows):
for c_i, val in enumerate(row):
tbl.cell(r_i+1, c_i).text = str(val)
style_table(tbl, header_color=header_color, font_size=font_size, first_col_bold=first_col_bold)
return tbl
def evidence_card(s, x, y, w, h, tag, title, finding, color=NAVY):
add_rounded(s, x, y, w, h, WHITE, radius=0.05)
add_rect(s, x, y, Inches(0.09), h, color)
pill = add_rounded(s, x+Inches(0.25), y+Inches(0.15), Inches(1.5), Inches(0.32), color, radius=0.5)
add_text(s, x+Inches(0.25), y+Inches(0.15), Inches(1.5), Inches(0.32), tag, size=10.5, color=WHITE, bold=True,
align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
add_text(s, x+Inches(0.25), y+Inches(0.55), w-Inches(0.5), Inches(0.4), title, size=12.5, color=INK, bold=True, line_spacing=1.05)
add_text(s, x+Inches(0.25), y+Inches(0.98), w-Inches(0.5), h-Inches(1.1), finding, size=10.8, color=GREY_TXT, line_spacing=1.12)
return
def footer_note(s, text, accent=NAVY):
add_text(s, CONTENT_X, SH-Inches(0.42), CONTENT_W, Inches(0.3), text, size=9.5, color=MED_GREY, italic=True)
# ======================================================================= SLIDE 1 - TITLE
s = prs.slides.add_slide(BLANK)
add_rect(s, 0, 0, SW, SH, NAVY)
add_rect(s, 0, 0, SW, Inches(0.12), ORANGE)
add_rect(s, 0, Inches(0.12), SW, Inches(0.06), BLUE)
add_rect(s, 0, Inches(0.18), SW, Inches(0.06), TEAL)
add_text(s, Inches(0.9), Inches(1.1), Inches(10), Inches(0.4), "INTERNAL MEDICINE \u2014 POSTGRADUATE GRAND ROUNDS", size=15, color=GOLD, bold=True)
add_text(s, Inches(0.9), Inches(1.65), Inches(11.5), Inches(1.9),
"Disorders of the Pituitary Axis", size=44, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(2.95), Inches(11.2), Inches(0.6),
"Acromegaly \u00b7 Hypopituitarism \u00b7 Diabetes Insipidus (AVP-D / AVP-R)", size=20, color=RGBColor(0xCF,0xE3,0xDF), italic=True)
cols = [("ACROMEGALY", "GH / IGF-1 excess", ORANGE), ("HYPOPITUITARISM", "Multi-axis hormone deficiency", BLUE), ("DIABETES INSIPIDUS", "AVP deficiency / resistance", TEAL)]
x = Inches(0.9); w = Inches(3.75); gap = Inches(0.25)
for name, sub, c in cols:
add_rounded(s, x, Inches(3.9), w, Inches(1.5), RGBColor(0x14,0x2C,0x52))
add_rect(s, x, Inches(3.9), w, Inches(0.09), c)
add_text(s, x+Inches(0.25), Inches(4.15), w-Inches(0.5), Inches(0.5), name, size=15, color=WHITE, bold=True)
add_text(s, x+Inches(0.25), Inches(4.7), w-Inches(0.5), Inches(0.6), sub, size=12.5, color=c, italic=True, line_spacing=1.1)
x += w + gap
add_text(s, Inches(0.9), Inches(5.85), Inches(9), Inches(0.5),
"Pathophysiology \u00b7 Diagnosis \u00b7 Evidence-Based Treatment \u00b7 Clinical Trials", size=14, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(6.9), Inches(8), Inches(0.4), "Textbook synthesis + peer-reviewed trial evidence", size=12, color=MED_GREY, italic=True)
add_text(s, Inches(10.2), Inches(6.9), Inches(2.3), Inches(0.4), "26 sections", size=12, color=MED_GREY, align=PP_ALIGN.RIGHT)
# ======================================================================= SLIDE 2 - ROADMAP
s = base_slide(NAVY); sidebar(s, 2, "Overview", "Session\nRoadmap", NAVY)
content_header(s, "Introduction", "How This Session Is Organized", accent=NAVY)
sections = [
("A", "Acromegaly", "GH-secreting adenoma \u2192 clinical features \u2192 diagnosis \u2192 treatment \u2192 trial evidence", ORANGE),
("B", "Hypopituitarism", "Causes by axis \u2192 dynamic testing \u2192 replacement therapy \u2192 trial evidence", BLUE),
("C", "Diabetes Insipidus (AVP-D/AVP-R)", "Central vs nephrogenic \u2192 copeptin-based diagnosis \u2192 desmopressin & alternatives", TEAL),
("D", "Synthesis", "Comparative table, integrated diagnostic algorithm, key pearls", GOLD),
]
y = Inches(1.75)
for letter, t, d, c in sections:
add_rounded(s, CONTENT_X, y, CONTENT_W, Inches(1.15), WHITE)
add_rect(s, CONTENT_X, y, Inches(0.85), Inches(1.15), c)
add_text(s, CONTENT_X, y, Inches(0.85), Inches(1.15), letter, size=32, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
add_text(s, CONTENT_X+Inches(1.05), y+Inches(0.12), CONTENT_W-Inches(1.3), Inches(0.4), t, size=16, color=INK, bold=True)
add_text(s, CONTENT_X+Inches(1.05), y+Inches(0.55), CONTENT_W-Inches(1.3), Inches(0.55), d, size=12, color=GREY_TXT, line_spacing=1.1)
y += Inches(1.3)
footer_note(s, "All three disorders originate from disruption of the hypothalamic-pituitary axis \u2014 either hormone excess, deficiency, or dysregulated water balance.")
# ======================================================================= SLIDE 3 - SHARED FOUNDATION
s = base_slide(NAVY); sidebar(s, 3, "Overview", "Pituitary\nAxis Map", NAVY)
content_header(s, "Foundations", "The Hypothalamic-Pituitary Axis at a Glance", accent=NAVY)
headers = ["Gland / Region", "Hormone(s)", "Target / Effect", "Relevant Disorder"]
rows = [
["Anterior pituitary \u2013 somatotrophs", "Growth hormone (GH)", "Liver IGF-1, growth, metabolism", "Acromegaly (excess) / GH deficiency (hypopituitarism)"],
["Anterior pituitary \u2013 corticotrophs", "ACTH", "Adrenal cortisol", "Secondary adrenal insufficiency (hypopituitarism)"],
["Anterior pituitary \u2013 thyrotrophs", "TSH", "Thyroid T4/T3", "Central hypothyroidism (hypopituitarism)"],
["Anterior pituitary \u2013 gonadotrophs", "LH, FSH", "Gonadal sex steroids", "Hypogonadotropic hypogonadism"],
["Anterior pituitary \u2013 lactotrophs", "Prolactin", "Lactation", "Hyperprolactinemia (mass effect / stalk)"],
["Posterior pituitary (hypothalamic synthesis)", "Arginine vasopressin (AVP/ADH)", "Renal collecting duct water reabsorption", "Diabetes insipidus (AVP-D / AVP-R)"],
]
add_table(s, CONTENT_X, Inches(1.65), CONTENT_W, Inches(4.6), headers, rows,
col_widths=[Inches(2.9), Inches(2.0), Inches(2.6), Inches(2.85)], font_size=11)
footer_note(s, "Source: Harrison's Principles of Internal Medicine, 22nd Ed.; Goldman-Cecil Medicine, Ch. 205")
# ======================================================================= SECTION A DIVIDER
s = prs.slides.add_slide(BLANK)
add_rect(s, 0, 0, SW, SH, ORANGE)
add_text(s, Inches(0.9), Inches(2.7), Inches(10), Inches(0.5), "SECTION A", size=16, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(3.2), Inches(11), Inches(1.3), "Acromegaly", size=46, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(4.35), Inches(10.5), Inches(0.8),
"Growth hormone / IGF-1 excess from a somatotroph pituitary adenoma", size=18, color=RGBColor(0xFF,0xE8,0xD5), italic=True)
# ======================================================================= SLIDE 4 - ACROMEGALY DEFINITION/EPIDEMIOLOGY
s = base_slide(ORANGE); sidebar(s, 4, "Section A \u00b7 Acromegaly", "Definition &\nEpidemiology", ORANGE)
content_header(s, "Acromegaly", "Definition & Epidemiology", accent=ORANGE)
add_bullets(s, CONTENT_X, Inches(1.75), CONTENT_W*0.58, Inches(4.5), [
("Definition:", "chronic excess of growth hormone (GH) and consequently IGF-1, almost always due to a GH-secreting pituitary adenoma (somatotroph adenoma).", ORANGE),
("Onset before epiphyseal fusion:", "produces gigantism; after fusion, produces acromegaly with soft-tissue and bony overgrowth.", BLUE),
("Incidence:", "approximately 3-4 cases per million per year; prevalence roughly 60 per million.", TEAL),
("Diagnostic delay:", "average delay from symptom onset to diagnosis is 7-10 years due to insidious, slowly progressive features.", GOLD),
("Mortality:", "untreated disease approximately doubles standardized mortality, mainly from cardiovascular and cerebrovascular disease; biochemical control normalizes mortality.", RED),
], size=13.5, line_spacing=1.15, space_after=13)
evidence_card(s, CONTENT_X+CONTENT_W*0.61, Inches(1.75), CONTENT_W*0.39, Inches(2.1), "ETIOLOGY", "Source of Excess GH",
"> 95% pituitary somatotroph adenoma (macroadenoma in ~70%). Rare: ectopic GHRH/GH secretion, McCune-Albright syndrome, familial isolated pituitary adenoma, MEN1, X-LAG.", color=ORANGE)
evidence_card(s, CONTENT_X+CONTENT_W*0.61, Inches(4.0), CONTENT_W*0.39, Inches(2.2), "KEY FACT", "Cardiovascular Risk",
"Cardiomyopathy, hypertension, and sleep apnea are the leading drivers of excess mortality; biochemical remission is associated with normalization of life expectancy.", color=RED)
footer_note(s, "Source: Harrison's Principles of Internal Medicine 22E; Katznelson et al. J Clin Endocrinol Metab 2014 (PMID 25356808)")
# ======================================================================= SLIDE 5 - PATHOPHYSIOLOGY
s = base_slide(ORANGE); sidebar(s, 5, "Section A \u00b7 Acromegaly", "Pathophysiology", ORANGE)
content_header(s, "Acromegaly", "Pathophysiology: The GH-IGF-1 Axis", accent=ORANGE)
steps = ["Somatotroph adenoma secretes GH autonomously, escaping normal hypothalamic negative feedback",
"Pulsatile GH hypersecretion drives hepatic IGF-1 production, the main mediator of tissue effects",
"IGF-1 promotes soft tissue, cartilage, and bone overgrowth; GH itself is diabetogenic and lipolytic",
"Sustained excess causes cardiomyopathy, sleep apnea, insulin resistance/diabetes, colon polyps, and arthropathy"]
y = Inches(1.8)
for i, txt in enumerate(steps):
c = [ORANGE, GOLD, TEAL, RED][i]
add_rect(s, CONTENT_X, y, Inches(0.4), Inches(0.4), c)
add_text(s, CONTENT_X, y, Inches(0.4), Inches(0.4), str(i+1), size=17, color=WHITE, bold=True, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
add_rounded(s, CONTENT_X+Inches(0.55), y, CONTENT_W-Inches(0.55), Inches(0.75), WHITE)
add_text(s, CONTENT_X+Inches(0.8), y+Inches(0.08), CONTENT_W-Inches(1.1), Inches(0.6), txt, size=12.5, color=GREY_TXT, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.05)
y += Inches(0.95)
headers = ["Feature", "Mechanism"]
rows = [
["Acral enlargement", "IGF-1-driven soft tissue and cartilage growth (hands, feet, jaw)"],
["Insulin resistance / diabetes", "GH directly antagonizes insulin action on glucose uptake"],
["Cardiomyopathy", "Direct GH/IGF-1 trophic effect on myocardium \u2192 hypertrophy, diastolic dysfunction"],
["Colonic polyps", "IGF-1 mitogenic effect on colonic mucosa"],
]
add_table(s, CONTENT_X, y+Inches(0.1), CONTENT_W, Inches(1.7), headers, rows, col_widths=[Inches(3.2), CONTENT_W-Inches(3.2)], font_size=11.5)
footer_note(s, "Source: Guyton & Hall Textbook of Medical Physiology; Goodman & Gilman's Pharmacological Basis of Therapeutics")
# ======================================================================= SLIDE 6 - CLINICAL FEATURES
s = base_slide(ORANGE); sidebar(s, 6, "Section A \u00b7 Acromegaly", "Clinical\nFeatures", ORANGE)
content_header(s, "Acromegaly", "Clinical Features by System", accent=ORANGE)
headers = ["System", "Manifestations"]
rows = [
["Soft tissue / skin", "Coarsened facial features, macroglossia, enlarged hands/feet (ring/shoe size change), skin thickening, hyperhidrosis"],
["Skeletal", "Prognathism, frontal bossing, wide dental spacing, osteoarthropathy, vertebral fractures"],
["Cardiovascular", "Hypertension, biventricular hypertrophy, diastolic dysfunction, arrhythmia"],
["Respiratory", "Obstructive sleep apnea (>50% of patients), macroglossia-related airway narrowing"],
["Metabolic", "Insulin resistance, impaired glucose tolerance, overt diabetes mellitus"],
["Gastrointestinal", "Increased risk of colonic polyps and colorectal cancer \u2013 warrants earlier screening colonoscopy"],
["Neurologic / mass effect", "Headache, bitemporal hemianopia (chiasmal compression), carpal tunnel syndrome"],
["Reproductive", "Menstrual irregularity, erectile dysfunction, galactorrhea if co-secreting prolactin"],
]
add_table(s, CONTENT_X, Inches(1.7), CONTENT_W, Inches(5.1), headers, rows, col_widths=[Inches(2.6), CONTENT_W-Inches(2.6)], font_size=11)
footer_note(s, "Source: Fitzpatrick's Dermatology; Andrews' Diseases of the Skin; Harrison's Principles of Internal Medicine 22E")
# ======================================================================= SLIDE 7 - DIAGNOSIS
s = base_slide(ORANGE); sidebar(s, 7, "Section A \u00b7 Acromegaly", "Diagnosis", ORANGE)
content_header(s, "Acromegaly", "Diagnostic Work-up", accent=ORANGE)
headers = ["Step", "Test", "Interpretation"]
rows = [
["1. Screen", "Serum IGF-1 (age/sex-matched)", "Elevated IGF-1 supports the diagnosis; normal IGF-1 makes active acromegaly unlikely"],
["2. Confirm", "Oral glucose tolerance test with GH", "Failure of GH to suppress <1 ng/mL (some assays <0.4) after 75g glucose confirms diagnosis"],
["3. Localize", "Pituitary MRI with contrast", "Identifies micro- vs macroadenoma, extension, chiasmal compression"],
["4. Assess extent", "Visual fields, cardiac echo, sleep study, colonoscopy, glucose/HbA1c", "Defines comorbidity burden that guides urgency of treatment"],
]
add_table(s, CONTENT_X, Inches(1.7), CONTENT_W*0.62, Inches(3.0), headers, rows,
col_widths=[Inches(1.3), Inches(2.6), CONTENT_W*0.62-Inches(3.9)], font_size=10.8)
try:
s.shapes.add_picture(ASSETS+"/pituitary_adenoma_mri.jpg", CONTENT_X+CONTENT_W*0.66, Inches(1.7), width=CONTENT_W*0.34)
except Exception: pass
add_text(s, CONTENT_X+CONTENT_W*0.66, Inches(3.85), CONTENT_W*0.34, Inches(0.5),
"Coronal/sagittal MRI \u2014 pituitary macroadenoma (arrows)", size=9.5, color=GREY_TXT, italic=True, line_spacing=1.05)
add_bullets(s, CONTENT_X, Inches(5.0), CONTENT_W, Inches(1.9), [
("Pitfall:", "random GH levels are unreliable due to pulsatile secretion; never diagnose or exclude acromegaly on a single GH value.", RED),
("Pitfall:", "pregnancy, poorly controlled diabetes, and puberty can cause false-positive OGTT-GH results.", GOLD),
("Genetic/ectopic causes:", "consider AIP mutation, MEN1, or ectopic GHRH if young age, family history, or atypical imaging.", BLUE),
], size=12.5, line_spacing=1.1, space_after=8)
footer_note(s, "Source: Katznelson et al. Endocrine Society Guideline, JCEM 2014 (PMID 25356808)")
# ======================================================================= SLIDE 8 - TREATMENT ALGORITHM
s = base_slide(ORANGE); sidebar(s, 8, "Section A \u00b7 Acromegaly", "Evidence-Based\nTreatment", ORANGE)
content_header(s, "Acromegaly", "Evidence-Based Treatment Algorithm", accent=ORANGE)
tiers = [
("1st line", "Transsphenoidal surgery", "Curative for most microadenomas; debulks macroadenomas even when cure unlikely. First-line per Endocrine Society & Pituitary Society guidelines.", ORANGE),
("2nd line", "Somatostatin receptor ligands (SRLs)", "Octreotide LAR / lanreotide autogel for persistent disease post-op or as primary therapy when surgery is declined/contraindicated.", TEAL),
("3rd line / add-on", "Pegvisomant (GH receptor antagonist)", "For SRL-resistant disease; normalizes IGF-1 in the majority of patients; does not reliably shrink tumor \u2014 monitor imaging.", BLUE),
("Adjunct", "Cabergoline (dopamine agonist)", "Modest efficacy alone; useful add-on especially with co-secreted prolactin or mild IGF-1 elevation.", PURPLE),
("Selected cases", "Pasireotide LAR (multireceptor SRL)", "For SRL-resistant disease; superior biochemical control vs octreotide/lanreotide in PAOLA trial; watch for hyperglycemia.", GOLD),
("Adjunct", "Stereotactic / conventional radiotherapy", "Reserved for residual/recurrent tumor not controlled by surgery or medical therapy; slow onset of effect over years.", RED),
]
y = Inches(1.68)
for tag, name, desc, c in tiers:
add_rounded(s, CONTENT_X, y, CONTENT_W, Inches(0.82), WHITE)
add_rect(s, CONTENT_X, y, Inches(1.15), Inches(0.82), c)
add_text(s, CONTENT_X, y+Inches(0.22), Inches(1.15), Inches(0.4), tag, size=10.5, color=WHITE, bold=True, align=PP_ALIGN.CENTER)
add_text(s, CONTENT_X+Inches(1.3), y+Inches(0.06), Inches(2.9), Inches(0.7), name, size=12.5, color=INK, bold=True, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.0)
add_text(s, CONTENT_X+Inches(4.35), y+Inches(0.06), CONTENT_W-Inches(4.5), Inches(0.7), desc, size=10.3, color=GREY_TXT, anchor=MSO_ANCHOR.MIDDLE, line_spacing=1.02)
y += Inches(0.9)
footer_note(s, "Source: Katznelson et al. JCEM 2014 (PMID 25356808); Fleseriu et al. Pituitary Society Update, Pituitary 2021 (PMID 33079318)")
# ======================================================================= SLIDE 9 - CLINICAL TRIALS EVIDENCE
s = base_slide(ORANGE); sidebar(s, 9, "Section A \u00b7 Acromegaly", "Clinical Trial\nEvidence", ORANGE)
content_header(s, "Acromegaly", "Landmark Clinical Trial Evidence", accent=ORANGE)
evidence_card(s, CONTENT_X, Inches(1.68), CONTENT_W*0.485, Inches(1.75), "PMID 10770982", "Pegvisomant Phase III RCT (NEJM, 2000)",
"Trainer et al. Pegvisomant normalized IGF-1 in 89-97% of patients across dose groups at 12 weeks, establishing GH receptor blockade as an effective option for SRL-resistant acromegaly.", color=ORANGE)
evidence_card(s, CONTENT_X+CONTENT_W*0.515, Inches(1.68), CONTENT_W*0.485, Inches(1.75), "PMID 25260838", "PAOLA Trial (Lancet Diabetes Endocrinol, 2014)",
"Gadelha et al. Pasireotide LAR achieved biochemical control in 15-20% of SRL-resistant patients vs 0% continuing octreotide/lanreotide (RCT, phase 3).", color=GOLD)
evidence_card(s, CONTENT_X, Inches(3.6), CONTENT_W*0.485, Inches(1.75), "PMID 32217809", "PAOLA Extension (Eur J Endocrinol, 2020)",
"Colao et al. Long-term follow-up confirmed sustained biochemical control and tumor volume reduction with pasireotide, with hyperglycemia as the main adverse effect requiring monitoring.", color=TEAL)
evidence_card(s, CONTENT_X+CONTENT_W*0.515, Inches(3.6), CONTENT_W*0.485, Inches(1.75), "PMID 1416572 / 24866574", "Octreotide RCTs (Ann Intern Med 1992; Eur J Endocrinol 2014)",
"Ezzat et al. and Fougner et al. established octreotide's efficacy in lowering GH/IGF-1 and demonstrated benefit of preoperative octreotide on surgical outcomes.", color=BLUE)
add_rounded(s, CONTENT_X, Inches(5.55), CONTENT_W, Inches(1.1), RGBColor(0xFD,0xEE,0xDD))
add_text(s, CONTENT_X+Inches(0.25), Inches(5.7), CONTENT_W-Inches(0.5), Inches(0.8),
"Evidence pattern: surgery remains first-line based on consistent cohort and guideline-level evidence; SRLs, pegvisomant, and pasireotide "
"are supported by multiple phase 3 RCTs, giving acromegaly one of the strongest medical-therapy evidence bases among pituitary disorders.",
size=12, color=INK, line_spacing=1.15)
footer_note(s, "PubMed-indexed randomized controlled trials, evidence tier 1-3")
# ======================================================================= SLIDE 10 - GUIDELINES & MONITORING
s = base_slide(ORANGE); sidebar(s, 10, "Section A \u00b7 Acromegaly", "Guidelines &\nMonitoring", ORANGE)
content_header(s, "Acromegaly", "Guideline-Based Monitoring & Remission Criteria", accent=ORANGE)
headers = ["Parameter", "Remission / Control Target", "Monitoring Interval"]
rows = [
["IGF-1", "Normal for age and sex", "3 months post-op; then every 6-12 months"],
["GH (random or OGTT)", "Random GH <1.0 ng/mL or normal OGTT suppression", "At diagnosis and after each treatment change"],
["Pituitary MRI", "Stable or reduced tumor volume", "3-6 months post-op, then annually or per residual disease"],
["Glucose metabolism", "HbA1c at target; watch for SRL/pasireotide-induced hyperglycemia", "Every visit while on medical therapy"],
["Cardiac / sleep apnea", "Improved LV function; resolved or controlled OSA", "Echocardiogram and sleep study at baseline and with symptoms"],
["Colonoscopy", "Age-adjusted polyp surveillance", "Baseline at diagnosis, then per polyp findings (more frequent than average risk)"],
]
add_table(s, CONTENT_X, Inches(1.7), CONTENT_W, Inches(5.0), headers, rows,
col_widths=[Inches(2.6), Inches(4.2), CONTENT_W-Inches(6.8)], font_size=10.8)
footer_note(s, "Source: Katznelson et al. Endocrine Society Guideline, JCEM 2014 (PMID 25356808)")
# ======================================================================= SECTION B DIVIDER
s = prs.slides.add_slide(BLANK)
add_rect(s, 0, 0, SW, SH, BLUE)
add_text(s, Inches(0.9), Inches(2.7), Inches(10), Inches(0.5), "SECTION B", size=16, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(3.2), Inches(11), Inches(1.3), "Hypopituitarism", size=46, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(4.35), Inches(10.5), Inches(0.8),
"Partial or complete loss of anterior and/or posterior pituitary hormone secretion", size=18, color=RGBColor(0xDC,0xEA,0xFB), italic=True)
# ======================================================================= SLIDE 11 - CAUSES
s = base_slide(BLUE); sidebar(s, 11, "Section B \u00b7 Hypopituitarism", "Definition &\nCauses", BLUE)
content_header(s, "Hypopituitarism", "Definition & Etiology", accent=BLUE)
headers = ["Category", "Examples"]
rows = [
["Mass lesions", "Non-functioning or functioning pituitary adenoma, craniopharyngioma, meningioma, metastasis, Rathke cleft cyst"],
["Iatrogenic", "Transsphenoidal surgery, pituitary/cranial radiotherapy"],
["Vascular", "Sheehan syndrome (postpartum hemorrhage-related pituitary infarction), pituitary apoplexy"],
["Infiltrative / inflammatory", "Lymphocytic hypophysitis (autoimmune, often peripartum), sarcoidosis, hemochromatosis, Langerhans cell histiocytosis, IgG4-related disease"],
["Traumatic", "Traumatic brain injury (including contact sports, blast injury, motor vehicle collisions) \u2013 increasingly recognized cause"],
["Infectious", "Tuberculosis, fungal infection of the sella, pituitary abscess"],
["Genetic / congenital", "PROP1, PIT1, HESX1 mutations; septo-optic dysplasia; empty sella syndrome"],
["Functional", "Critical illness, severe malnutrition, opioid-induced (gonadotropin/ACTH suppression)"],
]
add_table(s, CONTENT_X, Inches(1.68), CONTENT_W, Inches(5.15), headers, rows, col_widths=[Inches(2.7), CONTENT_W-Inches(2.7)], font_size=10.8)
footer_note(s, "Source: Goldman-Cecil Medicine Table 205-1; Harrison's Principles of Internal Medicine 22E, Acquired Hypopituitarism")
# ======================================================================= SLIDE 12 - CLINICAL FEATURES BY AXIS
s = base_slide(BLUE); sidebar(s, 12, "Section B \u00b7 Hypopituitarism", "Clinical\nFeatures", BLUE)
content_header(s, "Hypopituitarism", "Clinical Features by Hormone Axis", accent=BLUE)
headers = ["Axis Deficient", "Clinical Features", "Urgency"]
rows = [
["ACTH (secondary adrenal insufficiency)", "Fatigue, hypotension, hyponatremia, hypoglycemia; NO hyperpigmentation (unlike primary)", "High \u2014 can be life-threatening (adrenal crisis)"],
["TSH (central hypothyroidism)", "Fatigue, cold intolerance, weight gain, bradycardia; TSH often 'inappropriately normal'", "Moderate"],
["Gonadotropins (LH/FSH)", "Amenorrhea/oligomenorrhea, infertility, decreased libido, erectile dysfunction, loss of secondary sexual hair", "Moderate (quality of life, fertility, bone health)"],
["Growth hormone (adult GHD)", "Decreased lean mass, increased visceral fat, reduced exercise capacity, impaired quality of life, dyslipidemia", "Low-moderate"],
["ADH/AVP (posterior pituitary)", "Polyuria, polydipsia \u2014 see Diabetes Insipidus section", "Variable"],
["Prolactin (rare, isolated)", "Failure of lactation postpartum (classic early sign of Sheehan syndrome)", "Low, but diagnostic clue"],
]
add_table(s, CONTENT_X, Inches(1.68), CONTENT_W, Inches(5.15), headers, rows,
col_widths=[Inches(2.9), Inches(5.3), CONTENT_W-Inches(8.2)], font_size=10.5)
footer_note(s, "Source: Textbook of Family Medicine 9E; Scott-Brown's Otorhinolaryngology, Pituitary chapter")
# ======================================================================= SLIDE 13 - DIAGNOSIS / DYNAMIC TESTING
s = base_slide(BLUE); sidebar(s, 13, "Section B \u00b7 Hypopituitarism", "Diagnosis", BLUE)
content_header(s, "Hypopituitarism", "Diagnosis: Basal & Dynamic Testing", accent=BLUE)
add_text(s, CONTENT_X, Inches(1.6), CONTENT_W, Inches(0.35), "STEP 1 \u2014 BASAL HORMONE PANEL (fasting, AM)", size=13, color=BLUE, bold=True)
add_bullets(s, CONTENT_X, Inches(1.98), CONTENT_W, Inches(0.6),
["Morning cortisol, ACTH, free T4, TSH, LH, FSH, testosterone/estradiol, IGF-1, prolactin \u2014 obtained simultaneously as first-line screen."],
size=12, color=GREY_TXT, bullet_color=BLUE)
add_text(s, CONTENT_X, Inches(2.65), CONTENT_W, Inches(0.35), "STEP 2 \u2014 DYNAMIC (STIMULATION) TESTING WHEN BASAL RESULTS EQUIVOCAL", size=13, color=BLUE, bold=True)
headers = ["Test", "Axis Tested", "Interpretation"]
rows = [
["Insulin tolerance test (ITT)", "ACTH/cortisol and GH", "Gold standard; induced hypoglycemia should raise cortisol and GH \u2014 requires supervision (risk of severe hypoglycemia)"],
["Cosyntropin (ACTH) stimulation test", "Adrenal reserve (indirect ACTH axis)", "Peak cortisol <18 mcg/dL suggests adrenal insufficiency (may be normal early after acute pituitary injury)"],
["Glucagon stimulation test", "ACTH/cortisol and GH", "Safer alternative to ITT, especially in patients with seizure/cardiac risk"],
["GnRH stimulation test", "LH/FSH", "Assesses gonadotroph reserve, mainly used in select diagnostic dilemmas"],
["Insulin-like growth factor-1 + GH provocation (ITT, glucagon, GHRH-arginine)", "GH axis", "Needed for adult GHD diagnosis as isolated IGF-1 lacks sensitivity/specificity"],
]
add_table(s, CONTENT_X, Inches(3.05), CONTENT_W, Inches(3.6), headers, rows,
col_widths=[Inches(2.6), Inches(2.1), CONTENT_W-Inches(4.7)], font_size=10.3)
footer_note(s, "Source: Scott-Brown's Otorhinolaryngology, Investigations; Goldman-Cecil Medicine, Diagnosis of Hypopituitarism")
# ======================================================================= SLIDE 14 - HORMONE REPLACEMENT
s = base_slide(BLUE); sidebar(s, 14, "Section B \u00b7 Hypopituitarism", "Evidence-Based\nTreatment", BLUE)
content_header(s, "Hypopituitarism", "Evidence-Based Hormone Replacement", accent=BLUE)
headers = ["Axis", "Replacement", "Key Practice Point"]
rows = [
["Glucocorticoid (ACTH)", "Hydrocortisone 15-25 mg/day in 2-3 divided doses (or equivalent)", "Replace FIRST if multi-axis deficiency \u2014 treating thyroid first can precipitate adrenal crisis. Educate on sick-day stress dosing."],
["Thyroid (TSH)", "Levothyroxine, titrated to free T4 (NOT TSH, which is unreliable centrally)", "Start after glucocorticoid replacement is established"],
["Gonadal (LH/FSH)", "Testosterone (men); estrogen \u00b1 progestin (women); gonadotropins or pulsatile GnRH if fertility desired", "Assess cardiovascular/thromboembolic risk before starting sex steroids"],
["Growth hormone (adults)", "Recombinant human GH, titrated to IGF-1 and clinical response", "Improves body composition and quality of life; evidence for hard cardiovascular/mortality benefit is less consistent (see trial evidence)"],
["Vasopressin (posterior pituitary)", "Desmopressin (DDAVP) if diabetes insipidus coexists", "See Section C for full dosing and monitoring"],
]
add_table(s, CONTENT_X, Inches(1.68), CONTENT_W, Inches(4.6), headers, rows,
col_widths=[Inches(1.9), Inches(4.3), CONTENT_W-Inches(6.2)], font_size=10.3)
add_rounded(s, CONTENT_X, Inches(6.4), CONTENT_W, Inches(0.75), RGBColor(0xDC,0xEA,0xFB))
add_text(s, CONTENT_X+Inches(0.2), Inches(6.5), CONTENT_W-Inches(0.4), Inches(0.55),
"Guideline reference: Fleseriu et al., Endocrine Society Clinical Practice Guideline, JCEM 2016 (PMID 27736313)",
size=11.5, color=INK, bold=True)
# ======================================================================= SLIDE 15 - GH REPLACEMENT TRIAL EVIDENCE
s = base_slide(BLUE); sidebar(s, 15, "Section B \u00b7 Hypopituitarism", "Clinical Trial\nEvidence", BLUE)
content_header(s, "Hypopituitarism", "GH Replacement: What the Trials Show", accent=BLUE)
evidence_card(s, CONTENT_X, Inches(1.68), CONTENT_W*0.485, Inches(1.65), "PMID 8180671", "Cardiovascular Effects RCT (Eur J Endocrinol, 1994)",
"Beshyah et al. Double-blind RCT showed GH replacement improved cardiac structural/functional parameters in hypopituitary adults.", color=BLUE)
evidence_card(s, CONTENT_X+CONTENT_W*0.515, Inches(1.68), CONTENT_W*0.485, Inches(1.65), "PMID 8187303", "Bone & Calcium Metabolism RCT (Clin Endocrinol, 1994)",
"Beshyah et al. Demonstrated favorable effects of GH replacement on bone turnover markers and calcium metabolism.", color=TEAL)
evidence_card(s, CONTENT_X, Inches(3.5), CONTENT_W*0.485, Inches(1.65), "PMID 9618752", "Psychological Well-being Crossover RCT (Psychoneuroendocrinology, 1998)",
"Florkowski et al. Found GH replacement did NOT significantly improve psychological well-being in a randomized crossover design \u2014 an important negative/nuanced result.", color=RED)
evidence_card(s, CONTENT_X+CONTENT_W*0.515, Inches(3.5), CONTENT_W*0.485, Inches(1.65), "PMID 15177699", "Cognitive Performance RCT (Psychoneuroendocrinology, 2004)",
"Oertel et al. Showed measurable improvement in specific cognitive domains with GH substitution in hypopituitary adults.", color=GOLD)
add_rounded(s, CONTENT_X, Inches(5.35), CONTENT_W, Inches(1.3), RGBColor(0xDC,0xEA,0xFB))
add_text(s, CONTENT_X+Inches(0.25), Inches(5.5), CONTENT_W-Inches(0.5), Inches(1.05),
"Evidence synthesis: multiple double-blind RCTs (1994-2004) consistently show GH replacement improves body composition, "
"bone density, and some cardiovascular parameters, but effects on psychological well-being and hard cardiovascular outcomes "
"are inconsistent \u2014 reinforcing an individualized, quality-of-life-driven approach per the 2016 Endocrine Society guideline (PMID 27736313).",
size=11.5, color=INK, line_spacing=1.15)
# ======================================================================= SLIDE 16 - SPECIAL CONSIDERATIONS
s = base_slide(BLUE); sidebar(s, 16, "Section B \u00b7 Hypopituitarism", "Special\nConsiderations", BLUE)
content_header(s, "Hypopituitarism", "Special Clinical Considerations", accent=BLUE)
cards = [
("Sheehan Syndrome", "Postpartum pituitary infarction after severe obstetric hemorrhage; classic clue is failure of lactation \u00b1 amenorrhea after delivery.", RED),
("Sick-Day / Stress Dosing", "Patients on glucocorticoid replacement need 2-3x home dose during illness/surgery and IM/IV hydrocortisone for vomiting or major stress to prevent adrenal crisis.", ORANGE),
("Lymphocytic Hypophysitis", "Autoimmune, seen almost exclusively in women, often peri/postpartum; may mimic a pituitary mass on MRI.", PURPLE),
("Pituitary Apoplexy", "Acute hemorrhage/infarction of an adenoma \u2014 sudden headache, visual loss, ophthalmoplegia; medical emergency requiring urgent glucocorticoids \u00b1 surgical decompression.", GOLD),
("Combined Hormone Deficiency Sequencing", "Always secure glucocorticoid replacement before thyroid hormone to avoid precipitating adrenal crisis.", TEAL),
("Critical Illness / TBI", "Post-traumatic brain injury hypopituitarism is under-recognized; screen survivors of moderate-severe TBI for anterior pituitary dysfunction.", BLUE),
]
x0, y0 = CONTENT_X, Inches(1.68)
cw = (CONTENT_W - Inches(0.3))/2; ch = Inches(1.65); gapx = Inches(0.3); gapy = Inches(0.15)
for i,(t,d,c) in enumerate(cards):
col_i, row_i = i % 2, i // 2
x = x0 + col_i*(cw+gapx); y = y0 + row_i*(ch+gapy)
add_rounded(s, x, y, cw, ch, WHITE)
add_rect(s, x, y, cw, Inches(0.08), c)
add_text(s, x+Inches(0.2), y+Inches(0.18), cw-Inches(0.4), Inches(0.4), t, size=13, color=INK, bold=True)
add_text(s, x+Inches(0.2), y+Inches(0.58), cw-Inches(0.4), Inches(1.0), d, size=10.8, color=GREY_TXT, line_spacing=1.1)
# ======================================================================= SECTION C DIVIDER
s = prs.slides.add_slide(BLANK)
add_rect(s, 0, 0, SW, SH, TEAL)
add_text(s, Inches(0.9), Inches(2.7), Inches(10), Inches(0.5), "SECTION C", size=16, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(3.2), Inches(11), Inches(1.3), "Diabetes Insipidus", size=46, color=WHITE, bold=True)
add_text(s, Inches(0.9), Inches(4.35), Inches(10.5), Inches(0.8),
"Now renamed Arginine Vasopressin Deficiency (AVP-D) / Resistance (AVP-R) \u2014 2022 international consensus", size=17, color=RGBColor(0xD8,0xF3,0xEE), italic=True)
# ======================================================================= SLIDE 17 - DEFINITION / NOMENCLATURE
s = base_slide(TEAL); sidebar(s, 17, "Section C \u00b7 Diabetes Insipidus", "Definition &\nNew Nomenclature", TEAL)
content_header(s, "Diabetes Insipidus", "Definition & the 2022 Renaming", accent=TEAL)
add_bullets(s, CONTENT_X, Inches(1.7), CONTENT_W, Inches(1.6), [
("Definition:", "a syndrome of polyuria and polydipsia caused by deficient secretion of arginine vasopressin (AVP, central) or renal resistance to its action (nephrogenic).", TEAL),
("Why the name changed:", "confusion with diabetes mellitus led to dosing errors and patient harm; the 2022 international Working Group renamed the disorder to reflect actual pathophysiology.", ORANGE),
], size=13.5, line_spacing=1.15, space_after=10)
headers = ["Old Term", "New Term", "Mechanism"]
rows = [
["Central diabetes insipidus", "Arginine Vasopressin Deficiency (AVP-D)", "Insufficient hypothalamic/posterior pituitary AVP secretion"],
["Nephrogenic diabetes insipidus", "Arginine Vasopressin Resistance (AVP-R)", "Renal collecting duct unresponsiveness to AVP (V2 receptor / aquaporin-2 defect)"],
]
add_table(s, CONTENT_X, Inches(3.5), CONTENT_W, Inches(1.4), headers, rows,
col_widths=[Inches(3.2), Inches(3.6), CONTENT_W-Inches(6.8)], font_size=11.5, header_color=TEAL)
evidence_card(s, CONTENT_X, Inches(5.15), CONTENT_W, Inches(1.5), "PMID 36130350", "Arima et al., JCEM 2022 \u2014 Position Statement",
"\"Changing the Name of Diabetes Insipidus\": working group representing global endocrine societies formally proposed AVP-D/AVP-R terminology; now endorsed by Endocrine Society, ESE, Pituitary Society, and reflected in BMJ Best Practice.", color=TEAL)
# ======================================================================= SLIDE 18 - CAUSES / PATHOPHYSIOLOGY
s = base_slide(TEAL); sidebar(s, 18, "Section C \u00b7 Diabetes Insipidus", "Causes &\nPathophysiology", TEAL)
content_header(s, "Diabetes Insipidus", "Causes & Pathophysiology: Central vs Nephrogenic", accent=TEAL)
headers = ["", "AVP-D (Central)", "AVP-R (Nephrogenic)"]
rows = [
["Mechanism", "Deficient AVP synthesis/release from hypothalamus/posterior pituitary", "Renal V2-receptor or aquaporin-2 unresponsiveness to normal/high AVP"],
["Common causes", "Idiopathic (autoimmune), traumatic brain injury, pituitary/hypothalamic surgery, tumors, histiocytosis, sarcoidosis", "Lithium therapy (most common acquired cause), hypercalcemia, hypokalemia, congenital AVPR2/AQP2 mutations, chronic kidney disease"],
["AVP level", "Low / inappropriately low for plasma osmolality", "Normal to high (appropriate physiologic response, but ineffective)"],
["Response to desmopressin", "Marked reduction in urine output, rise in urine osmolality", "Minimal to no response (or only partial in incomplete forms)"],
]
add_table(s, CONTENT_X, Inches(1.68), CONTENT_W, Inches(4.3), headers, rows,
col_widths=[Inches(1.6), CONTENT_W*0.51, CONTENT_W-Inches(1.6)-CONTENT_W*0.51], font_size=10.6, header_color=TEAL)
footer_note(s, "Source: Brenner and Rector's The Kidney; Goldman-Cecil Medicine, Nephrogenic Diabetes Insipidus; Guyton & Hall Physiology")
# ======================================================================= SLIDE 19 - CLINICAL FEATURES / DIFFERENTIAL
s = base_slide(TEAL); sidebar(s, 19, "Section C \u00b7 Diabetes Insipidus", "Clinical Features\n& Differential", TEAL)
content_header(s, "Diabetes Insipidus", "Clinical Presentation & Key Differential", accent=TEAL)
add_bullets(s, CONTENT_X, Inches(1.68), CONTENT_W, Inches(1.9), [
("Cardinal features:", "polyuria (often >3 L/day, dilute urine), polydipsia (compensatory), nocturia; can progress to hypernatremic dehydration if water access is restricted.", TEAL),
("Onset:", "central DI classically abrupt in onset; nephrogenic (acquired) DI often more gradual, tied to the causative drug/metabolic disturbance.", ORANGE),
], size=13, line_spacing=1.15, space_after=10)
headers = ["Feature", "Diabetes Insipidus (AVP-D/AVP-R)", "Primary Polydipsia"]
rows = [
["Serum sodium", "High-normal or elevated", "Low-normal or low"],
["Basal plasma AVP/copeptin", "Low (AVP-D) or high (AVP-R)", "Appropriately suppressed"],
["Response to water deprivation", "Fails to concentrate urine appropriately", "Concentrates urine (may be blunted if chronic)"],
["Response to desmopressin (if abnormal WDT)", "Marked rise in urine osmolality (central); minimal rise (nephrogenic)", "Not indicated once diagnosis clear"],
]
add_table(s, CONTENT_X, Inches(3.75), CONTENT_W, Inches(2.2), headers, rows,
col_widths=[Inches(3.0), CONTENT_W*0.42, CONTENT_W-Inches(3.0)-CONTENT_W*0.42], font_size=10.6, header_color=TEAL)
footer_note(s, "Source: Comprehensive Clinical Nephrology 7E; Tintinalli's Emergency Medicine, Table 17-12")
# ======================================================================= SLIDE 20 - DIAGNOSIS: WDT VS COPEPTIN
s = base_slide(TEAL); sidebar(s, 20, "Section C \u00b7 Diabetes Insipidus", "Diagnosis", TEAL)
content_header(s, "Diabetes Insipidus", "Diagnosis: From Water Deprivation to Copeptin", accent=TEAL)
evidence_card(s, CONTENT_X, Inches(1.68), CONTENT_W*0.485, Inches(2.7), "CLASSIC TEST", "Water Deprivation Test + Desmopressin",
"Fluids withheld under supervision until osmolality plateaus or weight loss reaches ~3-5%; desmopressin given, and urine osmolality response distinguishes central DI, nephrogenic DI, and primary polydipsia. Time-consuming (up to 17 hours), uncomfortable, and can misclassify partial forms.", color=GREY_TXT)
evidence_card(s, CONTENT_X+CONTENT_W*0.515, Inches(1.68), CONTENT_W*0.485, Inches(2.7), "PMID 30067922", "Hypertonic Saline-Stimulated Copeptin (NEJM, 2018)",
"Fenske, Refardt, Christ-Crain et al. In a multicenter RCT-design diagnostic trial, hypertonic saline infusion with copeptin measurement (cutoff >4.9 pmol/L) had 97% diagnostic accuracy, significantly outperforming the water deprivation test (77% accuracy).", color=TEAL)
add_rounded(s, CONTENT_X, Inches(4.6), CONTENT_W, Inches(2.05), WHITE)
add_text(s, CONTENT_X+Inches(0.25), Inches(4.75), CONTENT_W-Inches(0.5), Inches(0.35), "PRACTICAL DIAGNOSTIC PATHWAY", size=13, color=TEAL, bold=True)
add_bullets(s, CONTENT_X+Inches(0.25), Inches(5.15), CONTENT_W-Inches(0.5), Inches(1.4), [
"Confirm true polyuria first (24-hour urine volume >50 mL/kg/day in adults).",
"Where available, use hypertonic saline-stimulated copeptin as the preferred test (higher accuracy, better tolerated than prolonged water deprivation).",
"If copeptin unavailable, water deprivation test with desmopressin remains the practical standard, especially in resource-limited settings.",
], size=11.5, color=GREY_TXT, bullet_color=TEAL, space_after=6)
footer_note(s, "Source: Fenske et al. N Engl J Med 2018 (PMID 30067922); Harrison's Principles of Internal Medicine 22E, Polyuria")
# ======================================================================= SLIDE 21 - TREATMENT
s = base_slide(TEAL); sidebar(s, 21, "Section C \u00b7 Diabetes Insipidus", "Evidence-Based\nTreatment", TEAL)
content_header(s, "Diabetes Insipidus", "Evidence-Based Treatment", accent=TEAL)
add_text(s, CONTENT_X, Inches(1.65), CONTENT_W, Inches(0.35), "AVP-D (CENTRAL) \u2014 DESMOPRESSIN IS FIRST-LINE", size=13.5, color=TEAL, bold=True)
headers = ["Route", "Typical Dose", "Notes"]
rows = [
["Intranasal", "10-40 mcg once or twice daily", "Absorption can be erratic with mucosal congestion"],
["Oral", "0.1-0.4 mg two to three times daily", "Convenient; long track record of efficacy across multiple studies (1978-1993)"],
["Subcutaneous / IV", "1-2 mcg, especially in acute/perioperative or unconscious patients", "Preferred in hospitalized or postoperative (e.g., post-transsphenoidal surgery) patients"],
]
add_table(s, CONTENT_X, Inches(2.05), CONTENT_W, Inches(1.7), headers, rows, col_widths=[Inches(2.2), Inches(3.0), CONTENT_W-Inches(5.2)], font_size=10.6, header_color=TEAL)
add_text(s, CONTENT_X, Inches(3.95), CONTENT_W, Inches(0.35), "AVP-R (NEPHROGENIC) \u2014 TREAT CAUSE + PARADOXICAL DIURETIC STRATEGY", size=13.5, color=TEAL, bold=True)
add_bullets(s, CONTENT_X, Inches(4.35), CONTENT_W, Inches(1.6), [
("Remove offending agent:", "discontinue/reduce lithium where possible, correct hypercalcemia or hypokalemia.", ORANGE),
("Thiazide diuretics:", "induce mild volume depletion \u2192 increased proximal sodium/water reabsorption \u2192 paradoxically reduced urine output.", TEAL),
("Amiloride:", "especially useful in lithium-induced AVP-R \u2014 blocks lithium entry into collecting duct cells via ENaC.", BLUE),
("NSAIDs (e.g., indomethacin):", "reduce prostaglandin-mediated inhibition of AVP action, used as adjunct, with attention to renal/GI risk.", RED),
("Low-solute, low-protein diet with adequate free water access:", "reduces obligate solute excretion and urine volume.", GOLD),
], size=11.8, line_spacing=1.1, space_after=6)
footer_note(s, "Source: Goldman-Cecil Medicine, Nephrogenic Diabetes Insipidus; Ziai et al. Arch Intern Med 1978 (PMID 686929)")
# ======================================================================= SLIDE 22 - TRIALS & EVIDENCE
s = base_slide(TEAL); sidebar(s, 22, "Section C \u00b7 Diabetes Insipidus", "Clinical Trial\nEvidence", TEAL)
content_header(s, "Diabetes Insipidus", "Clinical Trial & Evidence Summary", accent=TEAL)
evidence_card(s, CONTENT_X, Inches(1.68), CONTENT_W*0.485, Inches(1.9), "PMID 30067922", "Fenske et al., NEJM 2018 (Diagnostic Trial)",
"Prospective multicenter study of 141 patients: hypertonic saline-stimulated copeptin (96-97% accuracy) outperformed water deprivation testing (77% accuracy) for distinguishing AVP-D from primary polydipsia.", color=TEAL)
evidence_card(s, CONTENT_X+CONTENT_W*0.515, Inches(1.68), CONTENT_W*0.485, Inches(1.9), "PMID 30380393-30382699", "NEJM Correspondence, 2018",
"Multiple expert letters (Robertson, Spital, Mekahli/Jouret) debated copeptin cutoffs and practical implementation, reflecting rapid but still-maturing adoption of the copeptin-based paradigm.", color=GOLD)
evidence_card(s, CONTENT_X, Inches(3.68), CONTENT_W*0.485, Inches(1.9), "PMID 686929 / 3963868", "Early Desmopressin Efficacy Studies (1978-1986)",
"Ziai et al. and Westgren et al. established oral/intranasal desmopressin as safe and effective across adult and pediatric central DI, forming the historical basis for current first-line therapy.", color=BLUE)
evidence_card(s, CONTENT_X+CONTENT_W*0.515, Inches(3.68), CONTENT_W*0.485, Inches(1.9), "Position Statement", "Arima et al., JCEM 2022 \u2014 Renaming Consensus",
"International working group formalized AVP-D/AVP-R terminology to reduce dosing errors and confusion with diabetes mellitus; now adopted by major endocrine societies worldwide.", color=ORANGE)
add_rounded(s, CONTENT_X, Inches(5.68), CONTENT_W, Inches(1.0), RGBColor(0xDD,0xF2,0xEE))
add_text(s, CONTENT_X+Inches(0.2), Inches(5.8), CONTENT_W-Inches(0.4), Inches(0.8),
"Evidence pattern: DI diagnosis has shifted decisively toward copeptin-based testing where available; desmopressin remains the "
"cornerstone of AVP-D treatment, supported by decades of consistent clinical experience rather than large modern RCTs.",
size=11.5, color=INK, line_spacing=1.15)
# ======================================================================= SLIDE 23 - COMPARATIVE SUMMARY TABLE
s = base_slide(GOLD); sidebar(s, 23, "Synthesis", "Comparative\nSummary", GOLD)
content_header(s, "Synthesis", "Three Disorders, One Axis: Comparative Summary", accent=GOLD)
headers = ["", "Acromegaly", "Hypopituitarism", "Diabetes Insipidus (AVP-D/AVP-R)"]
rows = [
["Core defect", "GH/IGF-1 excess", "Deficiency of one or more anterior/posterior hormones", "AVP deficiency (central) or resistance (nephrogenic)"],
["Key screening test", "Serum IGF-1", "Basal AM hormone panel", "24-hr urine volume, plasma/urine osmolality"],
["Confirmatory test", "OGTT with GH suppression", "Dynamic stimulation testing (ITT, glucagon, GnRH)", "Hypertonic saline-stimulated copeptin or water deprivation test"],
["Imaging", "Pituitary MRI (adenoma localization)", "Pituitary MRI (identify cause)", "MRI posterior pituitary (loss of bright spot in AVP-D)"],
["First-line treatment", "Transsphenoidal surgery", "Physiologic hormone replacement (glucocorticoid first)", "Desmopressin (AVP-D); thiazide + amiloride/NSAID (AVP-R)"],
["Key evidence base", "Multiple phase 3 RCTs (pegvisomant, pasireotide, SRLs)", "Endocrine Society 2016 guideline + multiple GH-replacement RCTs", "Fenske et al. NEJM 2018 (copeptin); decades of desmopressin data"],
]
add_table(s, CONTENT_X, Inches(1.68), CONTENT_W, Inches(5.1), headers, rows,
col_widths=[Inches(1.7), Inches(3.05), Inches(3.15), CONTENT_W-Inches(1.7)-Inches(3.05)-Inches(3.15)],
font_size=9.8, header_color=NAVY)
footer_note(s, "Synthesis of Sections A-C; all sources cited on preceding slides")
# ======================================================================= SLIDE 24 - INTEGRATED ALGORITHM
s = base_slide(GOLD); sidebar(s, 24, "Synthesis", "Integrated\nApproach", GOLD)
content_header(s, "Synthesis", "Integrated Clinical Approach to Pituitary Presentations", accent=GOLD)
paths = [
("Coarsened features, enlarging hands/feet, new snoring/OSA", "Suspect ACROMEGALY", "\u2192 IGF-1 \u2192 OGTT-GH \u2192 pituitary MRI", ORANGE),
("Fatigue, hypotension, amenorrhea, failure to lactate postpartum", "Suspect HYPOPITUITARISM", "\u2192 AM hormone panel \u2192 dynamic testing \u2192 MRI for cause", BLUE),
("Polyuria + polydipsia \u00b1 hypernatremia, especially post-neurosurgery/TBI", "Suspect DIABETES INSIPIDUS", "\u2192 confirm true polyuria \u2192 copeptin or water deprivation test", TEAL),
]
y = Inches(1.7)
for trigger, dx, path, c in paths:
add_rounded(s, CONTENT_X, y, CONTENT_W, Inches(1.3), WHITE)
add_rect(s, CONTENT_X, y, Inches(0.12), Inches(1.3), c)
add_text(s, CONTENT_X+Inches(0.3), y+Inches(0.12), CONTENT_W-Inches(0.6), Inches(0.5), trigger, size=12.5, color=GREY_TXT, italic=True, line_spacing=1.05)
add_text(s, CONTENT_X+Inches(0.3), y+Inches(0.6), CONTENT_W-Inches(0.6), Inches(0.35), dx, size=15, color=c, bold=True)
add_text(s, CONTENT_X+Inches(0.3), y+Inches(0.95), CONTENT_W-Inches(0.6), Inches(0.3), path, size=12, color=INK, bold=True)
y += Inches(1.45)
add_rounded(s, CONTENT_X, y+Inches(0.05), CONTENT_W, Inches(0.8), RGBColor(0xFC,0xF3,0xDD))
add_text(s, CONTENT_X+Inches(0.25), y+Inches(0.18), CONTENT_W-Inches(0.5), Inches(0.55),
"Red flag overlap: any patient with a known pituitary mass, recent pituitary surgery, or TBI should be screened for ALL THREE patterns \u2014 hormone excess, deficiency, and water balance disorders can coexist.",
size=11.5, color=INK, bold=True, line_spacing=1.1)
# ======================================================================= SLIDE 25 - KEY PEARLS
s = prs.slides.add_slide(BLANK)
add_rect(s, 0, 0, SW, SH, NAVY)
add_rect(s, 0, 0, Inches(0.28), SH, ORANGE)
add_rect(s, Inches(0.28), 0, Inches(0.14), SH, BLUE)
add_rect(s, Inches(0.42), 0, Inches(0.14), SH, TEAL)
add_text(s, Inches(1.0), Inches(0.55), Inches(10), Inches(0.5), "KEY CLINICAL PEARLS", size=16, color=GOLD, bold=True)
add_text(s, Inches(1.0), Inches(1.0), Inches(11), Inches(0.8), "Take-Home Points for the Ward and the Exam", size=27, color=WHITE, bold=True)
pearls = [
("Never diagnose acromegaly on a single GH level:", "GH is pulsatile \u2014 use IGF-1 to screen and OGTT-GH suppression to confirm.", ORANGE),
("Sequence hormone replacement correctly:", "always replace glucocorticoid before thyroid hormone in hypopituitarism to avoid precipitating adrenal crisis.", BLUE),
("Diabetes insipidus has a new name for good reason:", "AVP-D/AVP-R terminology prevents dangerous confusion with diabetes mellitus.", TEAL),
("Copeptin is changing DI diagnosis:", "hypertonic saline-stimulated copeptin (Fenske et al., NEJM 2018) now outperforms the classic water deprivation test where available.", GOLD),
("Surgery remains first-line for acromegaly:", "medical therapy (SRLs, pegvisomant, pasireotide) is for residual/recurrent disease, guided by strong phase 3 trial evidence.", PURPLE),
("Screen TBI and postpartum hemorrhage survivors:", "hypopituitarism (including Sheehan syndrome) is under-recognized in these populations.", RED),
]
y = Inches(2.0)
for lead, rest, c in pearls:
add_rect(s, Inches(1.0), y+Inches(0.05), Inches(0.3), Inches(0.3), c)
tb = s.shapes.add_textbox(Inches(1.5), y, Inches(10.8), Inches(0.85))
tf = tb.text_frame; tf.word_wrap = True
p = tf.paragraphs[0]; p.line_spacing = 1.1
r1 = p.add_run(); r1.text = lead + " "; r1.font.bold = True; r1.font.size = Pt(13.5); r1.font.color.rgb = GOLD
r2 = p.add_run(); r2.text = rest; r2.font.size = Pt(13.5); r2.font.color.rgb = WHITE
y += Inches(0.85)
# ======================================================================= SLIDE 26 - REFERENCES
s = base_slide(NAVY); sidebar(s, 26, "References", "Selected\nReferences", NAVY)
content_header(s, "References", "Selected References", accent=NAVY, title_size=24)
refs = [
"Katznelson L, Laws ER, Melmed S, et al. Acromegaly: An Endocrine Society Clinical Practice Guideline. J Clin Endocrinol Metab. 2014. PMID: 25356808.",
"Trainer PJ, Drake WM, Katznelson L, et al. Treatment of acromegaly with the GH-receptor antagonist pegvisomant. N Engl J Med. 2000. PMID: 10770982.",
"Gadelha MR, Bronstein MD, Brue T, et al. Pasireotide versus continued treatment with octreotide/lanreotide (PAOLA). Lancet Diabetes Endocrinol. 2014. PMID: 25260838.",
"Colao A, Bronstein MD, Brue T, et al. Pasireotide for acromegaly: long-term outcomes, PAOLA extension. Eur J Endocrinol. 2020. PMID: 32217809.",
"Fleseriu M, Hashim IA, Karavitaki N, et al. Hormonal Replacement in Hypopituitarism in Adults: Endocrine Society Guideline. J Clin Endocrinol Metab. 2016. PMID: 27736313.",
"Fenske W, Refardt J, Chifu I, et al. A Copeptin-Based Approach in the Diagnosis of Diabetes Insipidus. N Engl J Med. 2018. PMID: 30067922.",
"Arima H, Cheetham T, Christ-Crain M, et al. Changing the Name of Diabetes Insipidus: Position Statement. J Clin Endocrinol Metab. 2022.",
"Harrison's Principles of Internal Medicine, 22nd Edition \u2014 Hypopituitarism, Polyuria chapters.",
"Goldman-Cecil Medicine, International Edition \u2014 Pituitary Disorders (Ch. 205), Diabetes Insipidus.",
"Goodman & Gilman's Pharmacological Basis of Therapeutics \u2014 Pituitary-related drugs.",
]
add_bullets(s, CONTENT_X, Inches(1.7), CONTENT_W, Inches(5.0), refs, size=11.5, color=GREY_TXT, bullet_color=NAVY, space_after=11, line_spacing=1.1)
prs.save("/tmp/workspace/im-pituitary-deck/output/Pituitary_Disorders_Postgraduate.pptx")
print("Saved. Slide count:", len(prs.slides._sldIdLst))
cd /tmp/workspace/im-pituitary-deck && python build_deck.py
~/im-pituitary-deck/build_deck.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/im-pituitary-deck/build_deck.py'
cd /tmp/workspace/im-pituitary-deck && python build_deck.py
~/im-pituitary-deck/build_deck.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/im-pituitary-deck/build_deck.py'
cd /tmp/workspace/im-pituitary-deck && python build_deck.py && python -c " from pptx import Presentation p = Presentation('output/Pituitary_Disorders_Postgraduate.pptx') print('slides:', len(p.slides)) "
Pituitary Disorders Postgraduate
Presentation · PPTX