Prolactin and dopamine synthesis And pathways for internal medicine postgraduate students
prolactin secretion regulation dopamine tuberoinfundibular pathway physiology
hyperprolactinemia dopamine agonist treatment
dopamine synthesis pathway tyrosine to norepinephrine epinephrine diagram
hypothalamic pituitary prolactin regulation dopamine tuberoinfundibular diagram
| Step | Enzyme | Notes |
|---|---|---|
| Tyrosine → L-DOPA | Tyrosine hydroxylase | Rate-limiting step; cytoplasmic; requires tetrahydrobiopterin cofactor; subject to feedback inhibition by dopamine and norepinephrine (Ganong's Physiology, p. 555-564) |
| L-DOPA → Dopamine | DOPA decarboxylase (aromatic amino acid decarboxylase) | Cytoplasmic |
| Dopamine → Norepinephrine | Dopamine β-hydroxylase | Occurs inside the storage vesicle after dopamine is pumped in by VMAT (vesicular monoamine transporter) |
| Norepinephrine → Epinephrine | Phenylethanolamine-N-methyltransferase (PNMT) | Only present in adrenal medulla and a few CNS neurons; requires S-adenosylmethionine |

| Factor | Effect on prolactin | Mechanism |
|---|---|---|
| Dopamine | Inhibits | ↓cAMP in lactotrophs, ↓prolactin gene transcription |
| TRH | Stimulates | ↑prolactin gene transcription (this is why hypothyroidism can cause mild hyperprolactinemia) |
| Estrogen | Stimulates | Increases lactotroph number/sensitivity, partly by reducing dopamine tone |
| Suckling/nipple stimulation | Stimulates | Neural reflex reduces hypothalamic dopamine release |
| Prolactin itself | Short-loop negative feedback | High prolactin stimulates hypothalamic TIDA neurons to release more dopamine, which suppresses further prolactin release |
Make a PowerPoint from the above data
mkdir -p /tmp/workspace/prolactin-dopamine-ppt/output && ls -la /tmp/workspace/
cd /tmp/workspace/prolactin-dopamine-ppt && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/a56eb88ba6528da3dda7d0794fd1b8dca1659abca14842f8dc96e7b2c529f065.png" > assets_images.json 2>fetch_err.log; echo EXIT:$?; wc -c assets_images.json; head -c 300 fetch_err.log
~/prolactin-dopamine-ppt/build_ppt.py
import json, base64
from io import BytesIO
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
# ---------- Colors ----------
NAVY = RGBColor(0x0B, 0x2C, 0x4A)
TEAL = RGBColor(0x0E, 0x76, 0x7A)
LIGHT_BG = RGBColor(0xF4, 0xF7, 0xF9)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
DARK = RGBColor(0x22, 0x2A, 0x33)
ACCENT = RGBColor(0xE0, 0x7A, 0x2A)
GREY = RGBColor(0x6B, 0x74, 0x7C)
with open("assets_images.json") as f:
imgs = json.load(f)
dopamine_img_b64 = None
for im in imgs:
if im.get("base64"):
dopamine_img_b64 = im["base64"].split(",", 1)[1]
def img_stream():
return BytesIO(base64.b64decode(dopamine_img_b64))
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
BLANK = prs.slide_layouts[6]
SW, SH = prs.slide_width, prs.slide_height
def add_slide(bg=LIGHT_BG):
s = prs.slides.add_slide(BLANK)
rect = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, SW, SH)
rect.fill.solid()
rect.fill.fore_color.rgb = bg
rect.line.fill.background()
rect.shadow.inherit = False
s.shapes._spTree.remove(rect._element)
s.shapes._spTree.insert(2, rect._element)
return s
def add_text(slide, x, y, w, h, text, size=18, bold=False, color=DARK,
align=PP_ALIGN.LEFT, font="Calibri", anchor=None, line_spacing=1.0,
italic=False):
tb = slide.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = True
if anchor is not None:
tf.vertical_anchor = anchor
lines = text.split("\n")
for i, line in enumerate(lines):
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.text = line
p.alignment = align
p.line_spacing = line_spacing
r = p.runs[0]
r.font.size = Pt(size)
r.font.bold = bold
r.font.italic = italic
r.font.name = font
r.font.color.rgb = color
return tb
def add_bullets(slide, x, y, w, h, items, size=15, color=DARK, bold_first=False,
bullet_color=TEAL, line_spacing=1.15, space_after=8):
tb = slide.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = True
for i, item in enumerate(items):
if isinstance(item, tuple):
text, lvl = item
else:
text, lvl = item, 0
p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
p.line_spacing = line_spacing
p.space_after = Pt(space_after)
bullet_char = "\u25CF " if lvl == 0 else "\u2013 "
p.text = (" " * lvl) + bullet_char + text
r = p.runs[0]
r.font.size = Pt(size - lvl * 1.5)
r.font.color.rgb = color
r.font.name = "Calibri"
return tb
def header_bar(slide, title, kicker="INTERNAL MEDICINE | ENDOCRINE PHYSIOLOGY", num=None):
bar = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, SW, Inches(1.15))
bar.fill.solid(); bar.fill.fore_color.rgb = NAVY
bar.line.fill.background(); bar.shadow.inherit = False
stripe = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, Inches(1.15), SW, Inches(0.06))
stripe.fill.solid(); stripe.fill.fore_color.rgb = ACCENT
stripe.line.fill.background(); stripe.shadow.inherit = False
add_text(slide, Inches(0.5), Inches(0.10), Inches(10), Inches(0.3), kicker,
size=11, bold=True, color=RGBColor(0xC9,0xD8,0xE3))
add_text(slide, Inches(0.5), Inches(0.36), Inches(12.2), Inches(0.72), title,
size=26, bold=True, color=WHITE)
if num is not None:
add_text(slide, Inches(12.6), Inches(6.98), Inches(0.6), Inches(0.4), str(num),
size=12, color=GREY, align=PP_ALIGN.RIGHT)
def footer(slide, text="Prolactin & Dopamine Synthesis \u2013 Postgraduate Review"):
add_text(slide, Inches(0.5), Inches(7.05), Inches(9), Inches(0.35), text,
size=9.5, color=GREY, italic=True)
# ============================================================
# SLIDE 1 — TITLE
# ============================================================
s = add_slide(NAVY)
band = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, Inches(4.55), SW, Inches(0.08))
band.fill.solid(); band.fill.fore_color.rgb = ACCENT; band.line.fill.background(); band.shadow.inherit=False
add_text(s, Inches(0.9), Inches(2.55), Inches(11.5), Inches(0.5), "INTERNAL MEDICINE POSTGRADUATE SERIES",
size=16, bold=True, color=RGBColor(0xC9,0xD8,0xE3))
add_text(s, Inches(0.9), Inches(3.0), Inches(11.5), Inches(1.4), "Prolactin & Dopamine:\nSynthesis and Pathways",
size=40, bold=True, color=WHITE, line_spacing=1.05)
add_text(s, Inches(0.9), Inches(4.75), Inches(11.5), Inches(0.5),
"Catecholamine biosynthesis, the tuberoinfundibular dopamine pathway, and clinical correlations in hyperprolactinemia",
size=15, color=RGBColor(0xC9,0xD8,0xE3), italic=True)
add_text(s, Inches(0.9), Inches(6.7), Inches(8), Inches(0.4),
"Endocrine Physiology \u00b7 Neuroendocrinology \u00b7 Clinical Endocrinology", size=12, color=GREY)
# ============================================================
# SLIDE 2 — LEARNING OBJECTIVES / ROADMAP
# ============================================================
s = add_slide()
header_bar(s, "Learning Objectives", num=2)
objs = [
"Describe the biosynthetic pathway of catecholamines from tyrosine, and identify the rate-limiting enzyme",
"Explain how cell-specific enzyme expression determines whether a neuron secretes dopamine, norepinephrine, or epinephrine",
"Describe the anatomy and function of the tuberoinfundibular dopaminergic (TIDA) pathway",
"Explain the unique tonic inhibitory control of prolactin secretion by dopamine, and the stimulatory role of TRH",
"Apply this physiology to clinical causes of hyperprolactinemia (stalk effect, drug-induced, prolactinoma, hypothyroidism)",
"Outline the role of dopamine agonists in treating hyperprolactinemia/prolactinoma, and recent safety evidence",
]
add_bullets(s, Inches(0.7), Inches(1.55), Inches(11.9), Inches(5.0), objs, size=17, space_after=16)
footer(s)
# ============================================================
# SLIDE 3 — CATECHOLAMINE BIOSYNTHESIS PATHWAY (text flow)
# ============================================================
s = add_slide()
header_bar(s, "Dopamine Biosynthesis: The Catecholamine Pathway", num=3)
add_text(s, Inches(0.6), Inches(1.35), Inches(12.1), Inches(0.5),
"Dopamine, norepinephrine, and epinephrine share a common precursor (tyrosine) and biosynthetic pathway.",
size=14, italic=True, color=GREY)
steps = [
("TYROSINE", "Dietary / from phenylalanine\n(phenylalanine hydroxylase, liver)"),
("L-DOPA", "Enzyme: Tyrosine hydroxylase\nRATE-LIMITING STEP\nFeedback-inhibited by dopamine & NE"),
("DOPAMINE", "Enzyme: DOPA decarboxylase\n(aromatic amino acid decarboxylase)\nCytoplasmic"),
("NOREPINEPHRINE", "Enzyme: Dopamine \u03b2-hydroxylase\nOccurs INSIDE storage vesicle\n(after VMAT transport)"),
("EPINEPHRINE", "Enzyme: PNMT\n(phenylethanolamine-N-methyltransferase)\nAdrenal medulla + few CNS neurons"),
]
n = len(steps)
box_w = Inches(2.05)
gap = Inches(0.28)
total_w = box_w * n + gap * (n - 1)
start_x = int((SW - total_w) / 2)
y = Inches(2.15)
box_h = Inches(2.15)
for i, (title, desc) in enumerate(steps):
x = start_x + i * (box_w + gap)
box = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, x, y, box_w, box_h)
box.fill.solid()
box.fill.fore_color.rgb = NAVY if i in (1, 4) else TEAL
box.line.color.rgb = WHITE
box.line.width = Pt(1)
box.shadow.inherit = False
tf = box.text_frame
tf.word_wrap = True
tf.vertical_anchor = MSO_ANCHOR.TOP
tf.margin_left = Pt(8); tf.margin_right = Pt(8); tf.margin_top = Pt(10)
p = tf.paragraphs[0]
p.text = title
p.alignment = PP_ALIGN.CENTER
p.runs[0].font.size = Pt(15)
p.runs[0].font.bold = True
p.runs[0].font.color.rgb = WHITE
p2 = tf.add_paragraph()
p2.text = desc
p2.alignment = PP_ALIGN.CENTER
p2.line_spacing = 1.05
p2.space_before = Pt(8)
p2.runs[0].font.size = Pt(10.5)
p2.runs[0].font.color.rgb = RGBColor(0xE8, 0xF0, 0xF3)
if i < n - 1:
ax = x + box_w + Emu(1000)
arrow = s.shapes.add_shape(MSO_SHAPE.RIGHT_ARROW, x + box_w - Inches(0.02), y + box_h/2 - Inches(0.12), gap + Inches(0.04), Inches(0.24))
arrow.fill.solid(); arrow.fill.fore_color.rgb = ACCENT
arrow.line.fill.background(); arrow.shadow.inherit = False
add_text(s, Inches(0.6), Inches(4.7), Inches(12.1), Inches(0.4),
"Key point: Tyrosine hydroxylase (Tyr \u2192 L-DOPA) is the rate-limiting step for ALL catecholamine synthesis.",
size=14, bold=True, color=NAVY)
add_bullets(s, Inches(0.6), Inches(5.25), Inches(12.1), Inches(1.6), [
"Cell-specific enzyme expression determines final product: dopaminergic neurons stop at dopamine (lack dopamine \u03b2-hydroxylase); noradrenergic neurons add dopamine \u03b2-hydroxylase; adrenal medulla has the full pathway including PNMT \u2192 secretes mainly epinephrine",
"Catabolism: MAO (presynaptic, requires reuptake) and COMT (extraneuronal, e.g. liver) degrade all three catecholamines",
], size=13, space_after=6)
add_text(s, Inches(0.6), Inches(6.95), Inches(10), Inches(0.3),
"Ganong's Review of Medical Physiology, 26e, p.555-566 \u00b7 Costanzo Physiology 7e, p.1205-1222", size=9.5, color=GREY, italic=True)
# ============================================================
# SLIDE 4 — DIAGRAM IMAGE
# ============================================================
s = add_slide()
header_bar(s, "Synthesis & Degradation Pathway (Textbook Figure)", num=4)
if dopamine_img_b64:
pic = s.shapes.add_picture(img_stream(), Inches(2.9), Inches(1.5), height=Inches(4.9))
# center horizontally based on actual width
pic_w = pic.width
pic.left = int((SW - pic_w) / 2)
add_text(s, Inches(0.6), Inches(6.65), Inches(12.1), Inches(0.5),
"Fig. Synthesis and degradation of dopamine, norepinephrine, and epinephrine. COMT = catechol-O-methyltransferase; MAO = monoamine oxidase.",
size=12, italic=True, color=GREY)
add_text(s, Inches(0.6), Inches(7.05), Inches(10), Inches(0.3),
"Source: Costanzo Physiology, 7th Edition, Fig. 1.18, p.1207", size=9.5, color=GREY, italic=True)
# ============================================================
# SLIDE 5 — TUBEROINFUNDIBULAR PATHWAY
# ============================================================
s = add_slide()
header_bar(s, "The Tuberoinfundibular Dopamine (TIDA) Pathway", num=5)
add_text(s, Inches(0.6), Inches(1.35), Inches(6.0), Inches(0.35), "One of 4 major CNS dopamine pathways", size=14, bold=True, color=NAVY)
left_items = [
"Cell bodies: Arcuate (infundibular) nucleus of the hypothalamus",
"Axons project to: Median eminence",
"Release site: Hypophyseal portal circulation",
"Target: Anterior pituitary lactotrophs (D2 receptors)",
"Effect: \u2193 cAMP in lactotrophs \u2192 \u2193 prolactin gene transcription & secretion",
]
add_bullets(s, Inches(0.6), Inches(1.8), Inches(6.4), Inches(4.5), left_items, size=15, space_after=14)
box = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(7.3), Inches(1.8), Inches(5.4), Inches(3.9))
box.fill.solid(); box.fill.fore_color.rgb = RGBColor(0xEA, 0xF1, 0xF3)
box.line.color.rgb = TEAL; box.line.width = Pt(1.25); box.shadow.inherit = False
tf = box.text_frame; tf.word_wrap = True
tf.margin_left = Pt(16); tf.margin_top = Pt(14); tf.margin_right = Pt(14)
p = tf.paragraphs[0]; p.text = "Other major dopamine pathways (context)"
p.runs[0].font.bold = True; p.runs[0].font.size = Pt(14); p.runs[0].font.color.rgb = NAVY
for line in [
"Mesolimbic \u2013 reward, psychosis positive symptoms",
"Mesocortical \u2013 cognition; under-activity \u2192 negative symptoms",
"Nigrostriatal \u2013 movement; D2 blockade \u2192 extrapyramidal symptoms",
"Tuberoinfundibular \u2013 prolactin regulation (this slide)",
]:
pp = tf.add_paragraph(); pp.text = "\u25CF " + line
pp.space_before = Pt(10); pp.runs[0].font.size = Pt(13); pp.runs[0].font.color.rgb = DARK
add_text(s, Inches(0.6), Inches(6.35), Inches(12.1), Inches(0.5),
"Clinical link: D2 antagonists (antipsychotics) block this pathway \u2192 remove inhibitory tone \u2192 hyperprolactinemia (\u201cprolactin-inhibiting factor\u201d, PIF).",
size=13.5, bold=True, color=ACCENT)
add_text(s, Inches(0.6), Inches(7.05), Inches(10), Inches(0.3),
"Berek & Novak's Gynecology, p.376-383 \u00b7 Stahl's Essential Psychopharmacology, p.1915-1923, 3478-3490", size=9.5, color=GREY, italic=True)
# ============================================================
# SLIDE 6 — REGULATION OF PROLACTIN (TABLE)
# ============================================================
s = add_slide()
header_bar(s, "Regulation of Prolactin Secretion", num=6)
add_text(s, Inches(0.6), Inches(1.3), Inches(12.1), Inches(0.4),
"Unique among anterior pituitary hormones: prolactin is under tonic INHIBITORY hypothalamic control.",
size=14, italic=True, color=GREY)
rows_data = [
("Factor", "Effect on Prolactin", "Mechanism"),
("Dopamine (PIF)", "Inhibits", "\u2193 cAMP in lactotrophs, \u2193 gene transcription (dominant tonic signal)"),
("TRH", "Stimulates", "\u2191 prolactin gene transcription (link to hypothyroidism)"),
("Estrogen", "Stimulates", "\u2191 lactotroph number/sensitivity, \u2193 dopamine tone"),
("Suckling / nipple stimulation", "Stimulates", "Neural reflex \u2193 hypothalamic dopamine release"),
("Prolactin itself", "Short-loop feedback", "\u2191 PRL stimulates TIDA neurons \u2192 \u2191 dopamine \u2192 \u2193 further PRL release"),
]
rows, cols = len(rows_data), 3
tbl_w, tbl_h = Inches(12.1), Inches(4.55)
gtbl = s.shapes.add_table(rows, cols, Inches(0.6), Inches(1.85), tbl_w, tbl_h).table
gtbl.columns[0].width = Inches(3.1)
gtbl.columns[1].width = Inches(2.6)
gtbl.columns[2].width = Inches(6.4)
for c, htext in enumerate(rows_data[0]):
cell = gtbl.cell(0, c)
cell.text = htext
cell.fill.solid(); cell.fill.fore_color.rgb = NAVY
p = cell.text_frame.paragraphs[0]; p.runs[0].font.bold = True
p.runs[0].font.size = Pt(14); p.runs[0].font.color.rgb = WHITE
cell.vertical_anchor = MSO_ANCHOR.MIDDLE
for r in range(1, rows):
for c in range(cols):
cell = gtbl.cell(r, c)
cell.text = rows_data[r][c]
cell.fill.solid()
cell.fill.fore_color.rgb = WHITE if r % 2 else RGBColor(0xEE, 0xF3, 0xF6)
p = cell.text_frame.paragraphs[0]
p.runs[0].font.size = Pt(12.5)
p.runs[0].font.color.rgb = DARK
if c == 0:
p.runs[0].font.bold = True
cell.vertical_anchor = MSO_ANCHOR.MIDDLE
cell.margin_left = Pt(8); cell.margin_right = Pt(8)
footer(s)
# ============================================================
# SLIDE 7 — CLINICAL CAUSES OF HYPERPROLACTINEMIA
# ============================================================
s = add_slide()
header_bar(s, "Clinical Correlation: Causes of Hyperprolactinemia", num=7)
add_text(s, Inches(0.6), Inches(1.3), Inches(12.1), Inches(0.4),
"Any interruption of dopamine delivery to lactotrophs raises prolactin \u2013 the unifying concept.",
size=14, bold=True, color=NAVY)
causes = [
("Stalk effect / hypothalamic lesions", "Tumor, infiltrative disease, trauma, surgery, radiation compress the pituitary stalk \u2192 \u2193 dopamine delivery \u2192 usually modest rise (< 100\u2013150 ng/mL)"),
("Non-secreting adenoma with suprasellar extension", "Mass compresses stalk; must be distinguished from a true prolactinoma"),
("Prolactinoma", "Autonomous lactotroph adenoma; levels typically 5\u201350x normal (or higher). Very large tumors may need diluted assay to avoid a spuriously low \u201chook effect\u201d reading"),
("Drugs (D2 receptor blockers)", "Typical/atypical antipsychotics, metoclopramide, some antiemetics \u2192 remove inhibitory dopamine tone \u2192 galactorrhea, amenorrhea, sexual dysfunction, \u2193 bone density"),
("Primary hypothyroidism", "\u2191 TRH directly stimulates prolactin, independent of dopamine pathway"),
("Physiologic", "Pregnancy, lactation, stress, sleep, nipple stimulation"),
]
y = Inches(1.85)
row_h = Inches(0.82)
for title, desc in causes:
dot = s.shapes.add_shape(MSO_SHAPE.OVAL, Inches(0.6), y + Inches(0.08), Inches(0.16), Inches(0.16))
dot.fill.solid(); dot.fill.fore_color.rgb = ACCENT; dot.line.fill.background(); dot.shadow.inherit=False
add_text(s, Inches(0.95), y, Inches(3.4), row_h, title, size=13.5, bold=True, color=NAVY, line_spacing=1.05)
add_text(s, Inches(4.5), y, Inches(8.2), row_h, desc, size=12.5, color=DARK, line_spacing=1.05)
y += row_h
add_text(s, Inches(0.6), Inches(7.05), Inches(11), Inches(0.3),
"Goldman-Cecil Medicine, International Edition, p.969-974", size=9.5, color=GREY, italic=True)
# ============================================================
# SLIDE 8 — MANAGEMENT: DOPAMINE AGONISTS
# ============================================================
s = add_slide()
header_bar(s, "Management: Dopamine Agonists in Hyperprolactinemia", num=8)
add_bullets(s, Inches(0.6), Inches(1.45), Inches(6.5), Inches(4.8), [
"First-line therapy for most prolactinomas: replaces the missing inhibitory dopamine tone directly at the lactotroph D2 receptor",
"Cabergoline preferred over bromocriptine \u2013 better efficacy, tolerability, and dosing convenience",
"Response (\u2193 PRL, tumor shrinkage) is both diagnostic and therapeutic evidence for prolactinoma",
"Surgery reserved for medication-resistant/intolerant cases or acute mass effect (e.g. visual field compromise)",
"Work-up sequence: exclude pregnancy \u2192 review medications \u2192 check TSH \u2192 MRI pituitary/hypothalamus if unexplained or markedly elevated",
], size=14.5, space_after=14)
box = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, Inches(7.4), Inches(1.45), Inches(5.35), Inches(4.6))
box.fill.solid(); box.fill.fore_color.rgb = RGBColor(0xFB, 0xEF, 0xE3)
box.line.color.rgb = ACCENT; box.line.width = Pt(1.25); box.shadow.inherit = False
tf = box.text_frame; tf.word_wrap = True
tf.margin_left = Pt(16); tf.margin_top = Pt(16); tf.margin_right = Pt(14)
p = tf.paragraphs[0]; p.text = "\u26A0 Recent Evidence (PubMed, 2023\u20132025)"
p.runs[0].font.bold = True; p.runs[0].font.size = Pt(15); p.runs[0].font.color.rgb = NAVY
for line in [
"2025 network meta-analysis compared aripiprazole, bromocriptine & cabergoline for hyperprolactinemia (incl. antipsychotic-induced) \u2013 PMID 39411853",
"2023 meta-analysis on quinagolide efficacy/safety supports established alternatives \u2013 PMID 36761195",
"2025 meta-analysis: increased risk of IMPULSE CONTROL DISORDERS with dopamine agonists in prolactinoma patients \u2013 PMID 40480033. Important counseling point for long-term cabergoline/bromocriptine use.",
]:
pp = tf.add_paragraph(); pp.text = "\u25CF " + line
pp.space_before = Pt(12); pp.runs[0].font.size = Pt(12.5); pp.runs[0].font.color.rgb = DARK
footer(s)
# ============================================================
# SLIDE 9 — SUMMARY
# ============================================================
s = add_slide(NAVY)
add_text(s, Inches(0.7), Inches(0.55), Inches(10), Inches(0.7), "Key Takeaways", size=30, bold=True, color=WHITE)
takeaways = [
"Tyrosine \u2192 L-DOPA \u2192 Dopamine \u2192 Norepinephrine \u2192 Epinephrine; tyrosine hydroxylase is rate-limiting",
"Cell-specific enzymes (dopamine \u03b2-hydroxylase, PNMT) determine which catecholamine a cell ultimately secretes",
"The tuberoinfundibular dopamine pathway (arcuate nucleus \u2192 median eminence \u2192 portal vessels \u2192 lactotroph D2 receptors) is the dominant, tonic INHIBITOR of prolactin",
"TRH stimulates prolactin; this is the only anterior pituitary axis with dominant inhibitory hypothalamic control",
"Clinically: stalk lesions, D2-blocking drugs, prolactinomas, and hypothyroidism all raise prolactin through this circuit",
"Dopamine agonists (cabergoline, bromocriptine) remain first-line prolactinoma therapy, but screen for impulse control disorders on long-term use",
]
add_bullets(s, Inches(0.7), Inches(1.55), Inches(11.9), Inches(5.3), takeaways, size=16.5,
color=WHITE, space_after=16)
prs.save("/tmp/workspace/prolactin-dopamine-ppt/output/Prolactin_Dopamine_Synthesis_Pathways.pptx")
print("SAVED OK")
cd /tmp/workspace/prolactin-dopamine-ppt && python build_ppt.py
cd /tmp/workspace/prolactin-dopamine-ppt && python3 -c " from pptx import Presentation prs = Presentation('output/Prolactin_Dopamine_Synthesis_Pathways.pptx') print('Slides:', len(prs.slides)) for i, slide in enumerate(prs.slides, 1): texts = [sh.text_frame.text for sh in slide.shapes if sh.has_text_frame and sh.text_frame.text.strip()] print(i, '->', texts[0][:60] if texts else '(no text)') " && ls -la output/
Prolactin Dopamine Synthesis Pathways
Presentation · PPTX