iam having hardtime remembering CAmp and cGmp where what comen gp and gi and gp usmle based what i have to know short and concept based exam solving stragety what i must know no extra things.
Hormone binds receptor → G protein activated → enzyme makes 2nd messenger → kinase activated → physiologic effect
Hormone → GPCR → G protein → Adenylyl cyclase → ATP → cAMP → PKA → phosphorylates proteins → effect
| Gs | Gi | |
|---|---|---|
| Effect on adenylyl cyclase | STIMULATES | INHIBITS |
| Effect on cAMP | Increases | Decreases |
| Alpha subunit | αs | αi |
| Receptor | Hormone/Drug | Clinical effect |
|---|---|---|
| β1, β2 adrenergic | Epinephrine, NE | ↑ HR, bronchodilation |
| Glucagon receptor | Glucagon | ↑ glycogenolysis |
| TSH receptor | TSH | thyroid hormone synthesis |
| FSH, LH receptor | FSH, LH, HCG | gonadal function |
| ACTH receptor | ACTH | cortisol synthesis |
| V2 (vasopressin) | ADH | water retention in collecting duct |
| D1 receptor | Dopamine | renal vasodilation |
| H2 receptor | Histamine | ↑ gastric acid |
| Calcitonin, CRH, MSH, PTH | - | - |
| Receptor | Agonist | Effect |
|---|---|---|
| α2 adrenergic | NE, clonidine | ↓ NE release (presynaptic), ↓ BP |
| M2 muscarinic | Acetylcholine | ↓ HR |
| D2 receptor | Dopamine | inhibitory (antipsychotic target) |
| Opioid receptors (μ, δ, κ) | Morphine | analgesia, ↓ cAMP |
| Somatostatin receptor | Somatostatin | ↓ GH, ↓ glucagon, ↓ insulin |
| Toxin | Mechanism | Effect |
|---|---|---|
| Cholera toxin | ADP-ribosylates Gs → locks it ON (permanently active) | ↑↑ cAMP in gut → massive secretory diarrhea |
| Pertussis toxin | ADP-ribosylates Gi → locks it OFF (permanently inactive) | ↑ cAMP (Gi can't inhibit) → whooping cough |
Both toxins result in excess cAMP - one by permanently activating Gs, the other by permanently blocking Gi.
Signal → Guanylyl cyclase → GTP → cGMP → PKG → effect
| Type | Activated by | Example |
|---|---|---|
| Soluble (cytosolic) | Nitric oxide (NO) | smooth muscle relaxation |
| Membrane-bound (receptor) | ANP, BNP | natriuresis, vasodilation |
Endothelium releases NO → diffuses into smooth muscle → activates soluble guanylyl cyclase → ↑cGMP → PKG → myosin light chain dephosphorylation → VASODILATION
High BP/volume → atria release ANP → membrane guanylyl cyclase receptor → ↑cGMP → ↓Na+ reabsorption in kidney → ↓BP, ↓volume
| Feature | cAMP | cGMP |
|---|---|---|
| Made from | ATP | GTP |
| Enzyme | Adenylyl cyclase | Guanylyl cyclase |
| Activated by | Gs (via GPCR) or directly | NO (soluble) or ANP/BNP (membrane) |
| Kinase activated | PKA | PKG |
| Degraded by | PDE | PDE (PDE-5 for cGMP) |
| Key drug target | β-blockers, β-agonists | Sildenafil, nitrates |
do a pdf
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/camp-cgmp && cat > /tmp/workspace/camp-cgmp/make_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import cm, mm from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether) from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY from reportlab.platypus import PageBreak OUTPUT = "/tmp/workspace/camp-cgmp/cAMP_cGMP_USMLE.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, leftMargin=1.8*cm, rightMargin=1.8*cm, topMargin=1.8*cm, bottomMargin=1.8*cm, title="cAMP & cGMP – USMLE Cheat Sheet", author="Orris Medical" ) # ── Colour palette ────────────────────────────────────────────────────────── DARK_BLUE = colors.HexColor("#1A3A5C") MED_BLUE = colors.HexColor("#2563A8") LIGHT_BLUE = colors.HexColor("#D6E8F7") GREEN = colors.HexColor("#1E6B3C") LIGHT_GREEN = colors.HexColor("#D4EDDA") RED = colors.HexColor("#A82525") LIGHT_RED = colors.HexColor("#FADADD") YELLOW_BG = colors.HexColor("#FFF8DC") ORANGE = colors.HexColor("#C8520A") LIGHT_ORANGE= colors.HexColor("#FFE8D0") GREY_BG = colors.HexColor("#F2F4F6") DARK_GREY = colors.HexColor("#3A3A3A") WHITE = colors.white BLACK = colors.black TEAL = colors.HexColor("#0D7377") LIGHT_TEAL = colors.HexColor("#D0F0F0") # ── Styles ─────────────────────────────────────────────────────────────────── styles = getSampleStyleSheet() def S(name, parent="Normal", **kw): return ParagraphStyle(name, parent=styles[parent], **kw) title_style = S("Title2", fontSize=22, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=2) subtitle_style = S("Sub", fontSize=11, textColor=LIGHT_BLUE, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=4) section_style = S("Sec", fontSize=13, textColor=WHITE, fontName="Helvetica-Bold", spaceAfter=3, spaceBefore=3, leftIndent=4) body_style = S("Body2", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica", leading=14, spaceAfter=3) bold_body = S("BoldBody", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica-Bold", leading=14) mono_style = S("Mono", fontSize=8.5, textColor=DARK_BLUE, fontName="Courier", backColor=GREY_BG, leftIndent=8, leading=13) bullet_style = S("Bullet2", fontSize=9.5, textColor=DARK_GREY, fontName="Helvetica", leftIndent=14, firstLineIndent=-10, leading=14, spaceAfter=2) small_note = S("Note", fontSize=8, textColor=colors.HexColor("#666666"), fontName="Helvetica-Oblique", alignment=TA_CENTER) trick_style = S("Trick", fontSize=9.5, textColor=ORANGE, fontName="Helvetica-Bold", leftIndent=8, leading=14) warning_style = S("Warn", fontSize=9.5, textColor=RED, fontName="Helvetica-Bold", leftIndent=8, leading=14) def section_header(text, bg=DARK_BLUE): data = [[Paragraph(text, section_style)]] t = Table(data, colWidths=[17*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("ROUNDEDCORNERS", [4,4,4,4]), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 8), ])) return t def info_box(text, bg=LIGHT_BLUE, text_color=DARK_BLUE): st = S("IB", fontSize=9.5, textColor=text_color, fontName="Helvetica", leading=14) data = [[Paragraph(text, st)]] t = Table(data, colWidths=[17*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("BOX", (0,0), (-1,-1), 0.5, text_color), ("TOPPADDING", (0,0), (-1,-1), 7), ("BOTTOMPADDING", (0,0), (-1,-1), 7), ("LEFTPADDING", (0,0), (-1,-1), 10), ("RIGHTPADDING", (0,0), (-1,-1), 10), ])) return t def sp(h=4): return Spacer(1, h) story = [] # ═══════════════════════════════════════════════════════════════════════════ # TITLE BANNER # ═══════════════════════════════════════════════════════════════════════════ title_data = [[Paragraph("cAMP & cGMP", title_style)], [Paragraph("USMLE Concept + Exam Strategy Cheat Sheet", subtitle_style)]] title_tbl = Table(title_data, colWidths=[17*cm]) title_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE), ("TOPPADDING", (0,0), (-1,-1), 12), ("BOTTOMPADDING", (0,0), (-1,-1), 12), ])) story.append(title_tbl) story.append(sp(10)) # ═══════════════════════════════════════════════════════════════════════════ # MENTAL MODEL # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("🧠 THE ONE MENTAL MODEL")) story.append(sp(4)) story.append(info_box( "<b>Hormone binds receptor → G protein activated → Enzyme makes 2nd messenger → Kinase activated → Effect</b><br/>" "Everything is just filling in this skeleton.", bg=LIGHT_BLUE, text_color=DARK_BLUE )) story.append(sp(6)) # ═══════════════════════════════════════════════════════════════════════════ # cAMP PATHWAY # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header(" cAMP PATHWAY", bg=MED_BLUE)) story.append(sp(4)) story.append(Paragraph( "<b>Mechanism:</b> Hormone → GPCR → G protein → <b>Adenylyl cyclase</b> → ATP → <b>cAMP</b> → <b>PKA</b> → phosphorylates proteins → Effect", mono_style )) story.append(sp(3)) story.append(Paragraph( "⚠ <b>PDE (phosphodiesterase)</b> degrades cAMP to 5'-AMP → turns signal OFF. " "Caffeine, theophylline, sildenafil <b>inhibit PDE</b> → prolong the signal.", bullet_style )) story.append(sp(8)) # Gs vs Gi table story.append(Paragraph("<b>Gs vs Gi — The Key Distinction</b>", bold_body)) story.append(sp(3)) gs_gi_data = [ [Paragraph("<b>Property</b>", bold_body), Paragraph("<b>Gs (Stimulatory)</b>", bold_body), Paragraph("<b>Gi (Inhibitory)</b>", bold_body)], [Paragraph("Effect on adenylyl cyclase", body_style), Paragraph("STIMULATES ↑", S("G", fontSize=9.5, textColor=GREEN, fontName="Helvetica-Bold", leading=14)), Paragraph("INHIBITS ↓", S("R", fontSize=9.5, textColor=RED, fontName="Helvetica-Bold", leading=14))], [Paragraph("Effect on cAMP", body_style), Paragraph("cAMP INCREASES", S("G2", fontSize=9.5, textColor=GREEN, fontName="Helvetica-Bold", leading=14)), Paragraph("cAMP DECREASES", S("R2", fontSize=9.5, textColor=RED, fontName="Helvetica-Bold", leading=14))], [Paragraph("Alpha subunit", body_style), Paragraph("αs", body_style), Paragraph("αi", body_style)], [Paragraph("Memory hook", body_style), Paragraph("Gs = Go (stimulate)", trick_style), Paragraph("Gi = Goodbye (inhibit)", trick_style)], ] gs_gi_tbl = Table(gs_gi_data, colWidths=[5*cm, 6*cm, 6*cm]) gs_gi_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), DARK_GREY), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("BACKGROUND", (1,1), (1,-1), LIGHT_GREEN), ("BACKGROUND", (2,1), (2,-1), LIGHT_RED), ("BACKGROUND", (0,1), (0,-1), GREY_BG), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 8), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(gs_gi_tbl) story.append(sp(10)) # ── Gs receptor list ───────────────────────────────────────────────────── story.append(Paragraph("<b>Gs-Coupled Receptors</b> → raise cAMP (HIGH YIELD)", bold_body)) story.append(sp(3)) gs_data = [ [Paragraph("<b>Receptor</b>", bold_body), Paragraph("<b>Hormone / Drug</b>", bold_body), Paragraph("<b>Key Effect</b>", bold_body)], ["β1, β2 adrenergic", "Epinephrine, NE", "↑ HR, bronchodilation"], ["Glucagon receptor", "Glucagon", "↑ Glycogenolysis"], ["TSH receptor", "TSH", "Thyroid hormone synthesis"], ["FSH, LH, HCG receptor", "FSH, LH, HCG", "Gonadal function"], ["ACTH receptor", "ACTH", "Cortisol synthesis"], ["V2 (vasopressin)", "ADH", "Water retention in collecting duct"], ["D1 receptor", "Dopamine", "Renal vasodilation"], ["H2 receptor", "Histamine", "↑ Gastric acid"], ["PTH, CRH, MSH, Calcitonin", "—", "Various endocrine effects"], ] for i in range(1, len(gs_data)): gs_data[i] = [Paragraph(str(x), body_style) for x in gs_data[i]] gs_tbl = Table(gs_data, colWidths=[5.5*cm, 5*cm, 6.5*cm]) gs_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREEN), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREEN]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 7), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(gs_tbl) story.append(sp(4)) story.append(info_box( "📌 Mnemonic: <b>FLAT ChAMP</b> = FSH, LH, ACTH, TSH, CRH/Calcitonin, hCG, ADH(V2), MSH, PTH, β-adrenergic", bg=LIGHT_GREEN, text_color=GREEN )) story.append(sp(10)) # ── Gi receptor list ───────────────────────────────────────────────────── story.append(Paragraph("<b>Gi-Coupled Receptors</b> → decrease cAMP (HIGH YIELD)", bold_body)) story.append(sp(3)) gi_data = [ [Paragraph("<b>Receptor</b>", bold_body), Paragraph("<b>Agonist</b>", bold_body), Paragraph("<b>Key Effect</b>", bold_body)], ["α2 adrenergic", "NE, clonidine", "↓ NE release (presynaptic), ↓ BP"], ["M2 muscarinic", "Acetylcholine", "↓ HR"], ["D2 receptor", "Dopamine", "Inhibitory (antipsychotic target)"], ["Opioid (μ, δ, κ)", "Morphine, opioids", "Analgesia, ↓ cAMP"], ["Somatostatin receptor", "Somatostatin", "↓ GH, ↓ glucagon, ↓ insulin"], ] for i in range(1, len(gi_data)): gi_data[i] = [Paragraph(str(x), body_style) for x in gi_data[i]] gi_tbl = Table(gi_data, colWidths=[5.5*cm, 5*cm, 6.5*cm]) gi_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), RED), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_RED]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 7), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(gi_tbl) story.append(sp(4)) story.append(info_box( "📌 Mnemonic: <b>MADS</b> = M2, Alpha-2, D2, Somatostatin, opioids → all Gi → all ↓ cAMP", bg=LIGHT_RED, text_color=RED )) story.append(sp(10)) # ── Toxin tricks ───────────────────────────────────────────────────────── story.append(section_header("☣ TOXIN TRICKS (Classic USMLE)", bg=colors.HexColor("#7B1010"))) story.append(sp(4)) toxin_data = [ [Paragraph("<b>Toxin</b>", bold_body), Paragraph("<b>Mechanism</b>", bold_body), Paragraph("<b>Result</b>", bold_body)], [Paragraph("Cholera toxin\n(V. cholerae)", body_style), Paragraph("ADP-ribosylates <b>Gs</b> → locks ON permanently\n(can't hydrolyse GTP)", body_style), Paragraph("↑↑ cAMP in gut → massive secretory diarrhoea", body_style)], [Paragraph("Pertussis toxin\n(B. pertussis)", body_style), Paragraph("ADP-ribosylates <b>Gi</b> → locks OFF permanently\n(Gi can't inhibit adenylyl cyclase)", body_style), Paragraph("↑ cAMP in resp. cells → whooping cough", body_style)], ] toxin_tbl = Table(toxin_data, colWidths=[4*cm, 7.5*cm, 5.5*cm]) toxin_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), DARK_GREY), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("BACKGROUND", (0,1), (-1,1), LIGHT_RED), ("BACKGROUND", (0,2), (-1,2), LIGHT_ORANGE), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0), (-1,-1), 7), ("BOTTOMPADDING", (0,0), (-1,-1), 7), ("LEFTPADDING", (0,0), (-1,-1), 7), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(toxin_tbl) story.append(sp(4)) story.append(info_box( "⚡ Both toxins → <b>excess cAMP</b>. Cholera: Gs stuck ON. Pertussis: Gi stuck OFF (so Gs wins). Same result, opposite mechanism.", bg=LIGHT_ORANGE, text_color=ORANGE )) # ═══════════════════════════════════════════════════════════════════════════ # PAGE 2 — cGMP + Comparison + Strategy # ═══════════════════════════════════════════════════════════════════════════ story.append(PageBreak()) # cGMP story.append(section_header(" cGMP PATHWAY", bg=TEAL)) story.append(sp(4)) story.append(Paragraph( "<b>Mechanism:</b> Signal → <b>Guanylyl cyclase</b> → GTP → <b>cGMP</b> → <b>PKG</b> → Effect", mono_style )) story.append(sp(6)) story.append(Paragraph("<b>Two Types of Guanylyl Cyclase:</b>", bold_body)) story.append(sp(3)) gc_data = [ [Paragraph("<b>Type</b>", bold_body), Paragraph("<b>Activated by</b>", bold_body), Paragraph("<b>Key Example</b>", bold_body)], [Paragraph("Soluble (cytosolic)", body_style), Paragraph("Nitric oxide (NO)", body_style), Paragraph("Smooth muscle relaxation, vasodilation, erection", body_style)], [Paragraph("Membrane-bound (receptor)", body_style), Paragraph("ANP, BNP", body_style), Paragraph("Natriuresis, vasodilation, ↓ BP/volume", body_style)], ] gc_tbl = Table(gc_data, colWidths=[5*cm, 5*cm, 7*cm]) gc_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), TEAL), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("ROWBACKGROUNDS",(0,1), (-1,-1), [LIGHT_TEAL, WHITE]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0), (-1,-1), 7), ("BOTTOMPADDING", (0,0), (-1,-1), 7), ("LEFTPADDING", (0,0), (-1,-1), 7), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(gc_tbl) story.append(sp(8)) # High-yield cGMP points story.append(Paragraph("<b>cGMP High-Yield Points:</b>", bold_body)) story.append(sp(4)) story.append(info_box( "<b>1. NO → cGMP → Smooth muscle relaxation</b><br/>" "Endothelium releases NO → diffuses into smooth muscle → activates <b>soluble guanylyl cyclase</b> " "→ ↑cGMP → PKG → myosin light chain dephosphorylation → <b>VASODILATION</b><br/><br/>" "• <b>Nitrates (nitroglycerin)</b>: donate NO → ↑cGMP → venodilation → ↓preload → angina relief<br/>" "• <b>Sildenafil (Viagra)</b>: inhibits <b>PDE-5</b> (cGMP-specific) → prolongs cGMP → erection / pulmonary HTN", bg=LIGHT_TEAL, text_color=TEAL )) story.append(sp(5)) story.append(info_box( "<b>2. ANP → cGMP → Natriuresis</b><br/>" "High BP/volume → atria release ANP → binds <b>membrane guanylyl cyclase receptor</b> " "→ ↑cGMP → ↓Na⁺ reabsorption in kidney → ↓BP, ↓volume", bg=LIGHT_TEAL, text_color=TEAL )) story.append(sp(10)) # ═══════════════════════════════════════════════════════════════════════════ # COMPARISON TABLE # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("⚖ cAMP vs cGMP — Quick Comparison", bg=DARK_GREY)) story.append(sp(4)) cmp_data = [ [Paragraph("<b>Feature</b>", bold_body), Paragraph("<b>cAMP</b>", S("H", fontSize=9.5, textColor=WHITE, fontName="Helvetica-Bold", leading=14)), Paragraph("<b>cGMP</b>", S("H2", fontSize=9.5, textColor=WHITE, fontName="Helvetica-Bold", leading=14))], ["Made from", "ATP", "GTP"], ["Enzyme", "Adenylyl cyclase", "Guanylyl cyclase"], ["Activated by", "Gs protein (via GPCR)", "NO (soluble) or ANP/BNP (membrane)"], ["Kinase", "PKA (Protein Kinase A)", "PKG (Protein Kinase G)"], ["Degraded by", "PDE (non-specific)", "PDE-5 (cGMP-specific)"], ["Key drug target", "β-blockers, β-agonists", "Sildenafil (PDE-5 inh.), Nitrates"], ["Key toxin", "Cholera, Pertussis", "None classic"], ] for i in range(1, len(cmp_data)): cmp_data[i] = [Paragraph(str(x), body_style) for x in cmp_data[i]] cmp_tbl = Table(cmp_data, colWidths=[4.5*cm, 6*cm, 6.5*cm]) cmp_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), DARK_GREY), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("BACKGROUND", (1,1), (1,-1), LIGHT_BLUE), ("BACKGROUND", (2,1), (2,-1), LIGHT_TEAL), ("BACKGROUND", (0,1), (0,-1), GREY_BG), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 7), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(cmp_tbl) story.append(sp(10)) # ═══════════════════════════════════════════════════════════════════════════ # EXAM STRATEGY # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("🎯 EXAM-SOLVING STRATEGY (3 Questions)", bg=colors.HexColor("#4A1B6D"))) story.append(sp(4)) strat_data = [ [Paragraph("<b>Step</b>", bold_body), Paragraph("<b>Ask yourself</b>", bold_body), Paragraph("<b>Answer</b>", bold_body)], [Paragraph("1", bold_body), Paragraph("What receptor is involved?", body_style), Paragraph("β1/β2, V2, TSH, ACTH, FSH, LH → <b>Gs → cAMP UP</b><br/>" "α2, M2, D2, opioid, somatostatin → <b>Gi → cAMP DOWN</b>", body_style)], [Paragraph("2", bold_body), Paragraph("What happens downstream?", body_style), Paragraph("cAMP UP → <b>PKA</b> → phosphorylation → effect<br/>" "cGMP UP → <b>PKG</b> → smooth muscle relaxation (mostly)", body_style)], [Paragraph("3", bold_body), Paragraph("Is there a toxin or drug?", body_style), Paragraph("Cholera/Pertussis → both excess cAMP (different mechanism)<br/>" "Sildenafil/Nitrates → raise cGMP", body_style)], ] strat_tbl = Table(strat_data, colWidths=[1.5*cm, 5*cm, 10.5*cm]) strat_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.HexColor("#4A1B6D")), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREY_BG, WHITE, GREY_BG]), ("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#BBBBBB")), ("TOPPADDING", (0,0), (-1,-1), 8), ("BOTTOMPADDING", (0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 8), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("ALIGN", (0,0), (0,-1), "CENTER"), ("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"), ("FONTSIZE", (0,1), (0,-1), 14), ("TEXTCOLOR", (0,1), (0,-1), colors.HexColor("#4A1B6D")), ])) story.append(strat_tbl) story.append(sp(10)) # ═══════════════════════════════════════════════════════════════════════════ # MEMORY ANCHORS # ═══════════════════════════════════════════════════════════════════════════ story.append(section_header("🔑 ONE-LINER MEMORY ANCHORS", bg=ORANGE)) story.append(sp(4)) anchors = [ ("<b>Gs</b> = <b>S</b> for <b>Stimulate</b> cAMP", "β-agonists, glucagon, TSH, ACTH, ADH-V2, PTH"), ("<b>Gi</b> = <b>I</b> for <b>Inhibit</b> cAMP", "α2, M2, D2, opioids, somatostatin"), ("<b>Gq</b> = <b>Q</b> for s<b>Q</b>ueeze", "IP3/Ca²⁺ pathway — α1, M1/M3, V1 — NOT cAMP"), ("<b>NO → cGMP → Relax</b>", "Vessels relax, erectile tissue fills"), ("<b>ANP → cGMP → Natriuresis</b>", "Kidney dumps Na⁺, ↓BP"), ("<b>Cholera = Gs stuck ON</b> | <b>Pertussis = Gi stuck OFF</b>", "Both → too much cAMP"), ("<b>FLAT ChAMP</b>", "FSH, LH, ACTH, TSH, CRH, hCG, ADH(V2), MSH, PTH — all Gs"), ("<b>MADS</b>", "M2, Alpha-2, D2, Somatostatin (+ opioids) — all Gi"), ] anchor_data = [[Paragraph(a, trick_style), Paragraph(b, body_style)] for a,b in anchors] anchor_tbl = Table(anchor_data, colWidths=[7.5*cm, 9.5*cm]) anchor_tbl.setStyle(TableStyle([ ("ROWBACKGROUNDS", (0,0), (-1,-1), [LIGHT_ORANGE, WHITE]), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#DDDDDD")), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 8), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(anchor_tbl) story.append(sp(10)) # Footer story.append(HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#AAAAAA"))) story.append(sp(4)) story.append(Paragraph( "Sources: Costanzo Physiology 7th Ed (Table 9.3, Fig 9.4) | Lippincott Biochemistry 8th Ed (Ch. 8) | Orris Medical", small_note )) doc.build(story) print(f"PDF saved to {OUTPUT}") PYEOF python /tmp/workspace/camp-cgmp/make_pdf.py
cAMP cGMP USMLE
PDF Document · PDF