Downloadable picture/slide to explain cooperative binding of hemoglobin

Reading File
Finding Sources
Reading File
Finding Sources
Reading File
Reading File
Reading File
Loading Image
Loading Image
Loading Image
Running Command

mkdir -p /tmp/workspace/hb-cooperative && ls /tmp/workspace/hb-cooperative/

Running Command

python3 << 'EOF' import subprocess, 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 # Download the three images urls = [ "https://cdn.orris.care/cdss_images/2cdde4c4bed29b706395298c5d1d24c0be3e84c808853ff069fb92de4801c9cc.png", # Fig 3.6 ODC "https://cdn.orris.care/cdss_images/b060956996ffe177479ae742ccd0e647c749e33e5f6d6746aaef192cc5b725ed.png", # Fig 3.7 cooperative "https://cdn.orris.care/cdss_images/a3aaa333a9aea93914106afd00ba5c11c666bf3a33add030124ee274c3e4c5e6.png", # Fig 3.8 transport ] result = json.loads(subprocess.check_output( ["python", "/tmp/skills/shared/scripts/fetch_images.py"] + urls )) images = [] for img in result: if img["base64"]: header, b64 = img["base64"].split(",", 1) raw = base64.b64decode(b64) images.append(BytesIO(raw)) else: images.append(None) print(f"Downloaded {sum(1 for i in images if i)} / {len(images)} images") # ---- Build Presentation ---- prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5) blank = prs.slide_layouts[6] # ============================================================ # SLIDE 1 — Title slide # ============================================================ slide1 = prs.slides.add_slide(blank) # Dark background bg = slide1.background fill = bg.fill fill.solid() fill.fore_color.rgb = RGBColor(0x0D, 0x1B, 0x2A) # Title tb = slide1.shapes.add_textbox(Inches(1), Inches(2.3), Inches(11.3), Inches(1.4)) tf = tb.text_frame tf.word_wrap = True p = tf.paragraphs[0] p.alignment = PP_ALIGN.CENTER run = p.add_run() run.text = "Cooperative Binding of Hemoglobin" run.font.name = "Calibri" run.font.size = Pt(46) run.font.bold = True run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # Subtitle tb2 = slide1.shapes.add_textbox(Inches(1), Inches(3.85), Inches(11.3), Inches(0.7)) tf2 = tb2.text_frame p2 = tf2.paragraphs[0] p2.alignment = PP_ALIGN.CENTER run2 = p2.add_run() run2.text = "How hemoglobin loads O₂ in the lungs and unloads it in the tissues" run2.font.name = "Calibri" run2.font.size = Pt(22) run2.font.color.rgb = RGBColor(0xA8, 0xD5, 0xFF) # Accent line from pptx.util import Inches, Pt from pptx.oxml.ns import qn from lxml import etree # Simple colored rectangle as accent line line_shape = slide1.shapes.add_shape( 1, # MSO_SHAPE_TYPE.RECTANGLE Inches(4.0), Inches(4.7), Inches(5.333), Inches(0.06) ) line_shape.fill.solid() line_shape.fill.fore_color.rgb = RGBColor(0x4F, 0xC3, 0xF7) line_shape.line.fill.background() # Source note tb3 = slide1.shapes.add_textbox(Inches(1), Inches(6.8), Inches(11.3), Inches(0.4)) tf3 = tb3.text_frame p3 = tf3.paragraphs[0] p3.alignment = PP_ALIGN.CENTER run3 = p3.add_run() run3.text = "Source: Lippincott Illustrated Reviews – Biochemistry, 8th Ed." run3.font.name = "Calibri" run3.font.size = Pt(12) run3.font.color.rgb = RGBColor(0x80, 0x96, 0xAA) # ============================================================ # SLIDE 2 — What is cooperative binding? # ============================================================ slide2 = prs.slides.add_slide(blank) bg2 = slide2.background fill2 = bg2.fill fill2.solid() fill2.fore_color.rgb = RGBColor(0xF7, 0xFA, 0xFF) # Header bar hdr = slide2.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(0.95)) hdr.fill.solid() hdr.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) hdr.line.fill.background() tb_hdr = slide2.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12.5), Inches(0.75)) tf_hdr = tb_hdr.text_frame p_hdr = tf_hdr.paragraphs[0] run_hdr = p_hdr.add_run() run_hdr.text = "What is Cooperative Binding?" run_hdr.font.name = "Calibri" run_hdr.font.size = Pt(28) run_hdr.font.bold = True run_hdr.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # Left column text points = [ ("Hemoglobin (Hb) is a tetramer", "4 subunits, each with one heme group capable of binding O₂"), ("Sequential binding increases affinity", "Each O₂ bound causes a conformational shift (T→R state), making the next subunit bind O₂ more easily"), ("Affinity × 300", "The last O₂ binds with ~300× greater affinity than the first"), ("Sigmoidal curve", "Results in an S-shaped (sigmoidal) O₂-dissociation curve — unlike the hyperbolic curve of monomeric myoglobin"), ("Clinical relevance", "Steep sigmoidal slope at tissue pO₂ (20–40 mmHg) enables efficient O₂ unloading to metabolically active tissues"), ] y = 1.1 for title, desc in points: # Bullet title tb_t = slide2.shapes.add_textbox(Inches(0.4), Inches(y), Inches(6.0), Inches(0.35)) tf_t = tb_t.text_frame tf_t.margin_left = 0; tf_t.margin_right = 0; tf_t.margin_top = 0; tf_t.margin_bottom = 0 p_t = tf_t.paragraphs[0] r_t = p_t.add_run() r_t.text = "▶ " + title r_t.font.name = "Calibri" r_t.font.size = Pt(15) r_t.font.bold = True r_t.font.color.rgb = RGBColor(0x1A, 0x3A, 0x5C) # Bullet desc tb_d = slide2.shapes.add_textbox(Inches(0.65), Inches(y + 0.34), Inches(5.75), Inches(0.45)) tf_d = tb_d.text_frame tf_d.word_wrap = True tf_d.margin_left = 0; tf_d.margin_right = 0; tf_d.margin_top = 0; tf_d.margin_bottom = 0 p_d = tf_d.paragraphs[0] r_d = p_d.add_run() r_d.text = desc r_d.font.name = "Calibri" r_d.font.size = Pt(13) r_d.font.color.rgb = RGBColor(0x33, 0x33, 0x33) y += 1.0 # Fig 3.7 image (cooperative binding diagram) on the right if images[1]: images[1].seek(0) slide2.shapes.add_picture(images[1], Inches(6.8), Inches(1.05), Inches(3.0), Inches(5.8)) # Fig caption tb_cap = slide2.shapes.add_textbox(Inches(6.8), Inches(6.9), Inches(6.0), Inches(0.35)) tf_cap = tb_cap.text_frame p_cap = tf_cap.paragraphs[0] r_cap = p_cap.add_run() r_cap.text = "Fig 3.7 – Successive O₂ binding with increasing affinity (Lippincott's Biochemistry)" r_cap.font.name = "Calibri" r_cap.font.size = Pt(10) r_cap.font.italic = True r_cap.font.color.rgb = RGBColor(0x55, 0x66, 0x77) # ============================================================ # SLIDE 3 — ODC curve + T/R state # ============================================================ slide3 = prs.slides.add_slide(blank) bg3 = slide3.background fill3 = bg3.fill fill3.solid() fill3.fore_color.rgb = RGBColor(0xF7, 0xFA, 0xFF) hdr3 = slide3.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(0.95)) hdr3.fill.solid() hdr3.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) hdr3.line.fill.background() tb_hdr3 = slide3.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12.5), Inches(0.75)) tf_hdr3 = tb_hdr3.text_frame p_hdr3 = tf_hdr3.paragraphs[0] r_hdr3 = p_hdr3.add_run() r_hdr3.text = "Oxygen-Dissociation Curve: Myoglobin vs Hemoglobin" r_hdr3.font.name = "Calibri" r_hdr3.font.size = Pt(28) r_hdr3.font.bold = True r_hdr3.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # ODC image if images[0]: images[0].seek(0) slide3.shapes.add_picture(images[0], Inches(0.4), Inches(1.05), Inches(5.6), Inches(5.8)) # Right side explanatory text key_points = [ ("Myoglobin", "Hyperbolic curve — single heme, no cooperativity. P₅₀ = 1 mmHg"), ("Hemoglobin", "Sigmoidal curve — 4 subunits, cooperative. P₅₀ = 26 mmHg"), ("T state (tense)", "Deoxy-Hb. Low O₂ affinity. Stabilised by salt bridges between subunits"), ("R state (relaxed)", "Oxy-Hb. High O₂ affinity. Stabilised when O₂ binds and conformational change occurs"), ("Loading (lungs)", "pO₂ ~100 mmHg → Hb ~98% saturated"), ("Unloading (tissues)", "pO₂ ~40 mmHg → Hb drops to ~75% sat → large O₂ delivery"), ("P₅₀ comparison", "Higher P₅₀ = lower O₂ affinity = better unloading"), ] y3 = 1.1 for title, desc in key_points: tb_t3 = slide3.shapes.add_textbox(Inches(6.3), Inches(y3), Inches(6.6), Inches(0.3)) tf_t3 = tb_t3.text_frame tf_t3.margin_left = 0; tf_t3.margin_right = 0; tf_t3.margin_top = 0; tf_t3.margin_bottom = 0 p_t3 = tf_t3.paragraphs[0] r_t3 = p_t3.add_run() r_t3.text = "● " + title r_t3.font.name = "Calibri" r_t3.font.size = Pt(14) r_t3.font.bold = True r_t3.font.color.rgb = RGBColor(0x1A, 0x3A, 0x5C) tb_d3 = slide3.shapes.add_textbox(Inches(6.55), Inches(y3 + 0.3), Inches(6.35), Inches(0.38)) tf_d3 = tb_d3.text_frame tf_d3.word_wrap = True tf_d3.margin_left = 0; tf_d3.margin_right = 0; tf_d3.margin_top = 0; tf_d3.margin_bottom = 0 p_d3 = tf_d3.paragraphs[0] r_d3 = p_d3.add_run() r_d3.text = desc r_d3.font.name = "Calibri" r_d3.font.size = Pt(12) r_d3.font.color.rgb = RGBColor(0x33, 0x33, 0x33) y3 += 0.82 # ============================================================ # SLIDE 4 — O2 & CO2 Transport (Haldane / Bohr / allosteric) # ============================================================ slide4 = prs.slides.add_slide(blank) bg4 = slide4.background fill4 = bg4.fill fill4.solid() fill4.fore_color.rgb = RGBColor(0xF7, 0xFA, 0xFF) hdr4 = slide4.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(0.95)) hdr4.fill.solid() hdr4.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) hdr4.line.fill.background() tb_hdr4 = slide4.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12.5), Inches(0.75)) tf_hdr4 = tb_hdr4.text_frame p_hdr4 = tf_hdr4.paragraphs[0] r_hdr4 = p_hdr4.add_run() r_hdr4.text = "Allosteric Effectors & Physiological Significance" r_hdr4.font.name = "Calibri" r_hdr4.font.size = Pt(28) r_hdr4.font.bold = True r_hdr4.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) # Transport image if images[2]: images[2].seek(0) slide4.shapes.add_picture(images[2], Inches(0.4), Inches(1.05), Inches(3.0), Inches(5.8)) # Allosteric effectors table effectors = [ ("2,3-BPG", "Binds T state → ↓ O₂ affinity → favors O₂ unloading. Elevated at altitude & in chronic anaemia"), ("CO₂ (↑pCO₂)", "Bohr effect: CO₂ + H₂O → H⁺ + HCO₃⁻. H⁺ stabilises T state → ↓ affinity → more O₂ to tissues"), ("↓ pH", "Bohr effect: acidosis → right-shift of ODC → ↓ affinity → enhanced O₂ release"), ("↑ Temperature", "Right-shift: exercising muscle produces heat → ↑ O₂ delivery"), ("CO (carbon monoxide)", "Binds Fe²⁺ with 200× greater affinity than O₂ → displaces O₂ → left-shifts remaining ODC"), ] y4 = 1.15 for eff, detail in effectors: # colored box for effector name box = slide4.shapes.add_shape(1, Inches(3.7), Inches(y4), Inches(2.4), Inches(0.34)) box.fill.solid() box.fill.fore_color.rgb = RGBColor(0x1A, 0x3A, 0x5C) box.line.fill.background() tb_eff = slide4.shapes.add_textbox(Inches(3.72), Inches(y4 + 0.02), Inches(2.4), Inches(0.3)) tf_eff = tb_eff.text_frame tf_eff.margin_left = Inches(0.05); tf_eff.margin_top = 0; tf_eff.margin_bottom = 0 p_eff = tf_eff.paragraphs[0] r_eff = p_eff.add_run() r_eff.text = eff r_eff.font.name = "Calibri" r_eff.font.size = Pt(13) r_eff.font.bold = True r_eff.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF) tb_det = slide4.shapes.add_textbox(Inches(6.2), Inches(y4 + 0.01), Inches(6.9), Inches(0.55)) tf_det = tb_det.text_frame tf_det.word_wrap = True tf_det.margin_left = 0; tf_det.margin_right = 0; tf_det.margin_top = 0; tf_det.margin_bottom = 0 p_det = tf_det.paragraphs[0] r_det = p_det.add_run() r_det.text = detail r_det.font.name = "Calibri" r_det.font.size = Pt(12) r_det.font.color.rgb = RGBColor(0x22, 0x22, 0x22) y4 += 1.05 # Caption tb_cap4 = slide4.shapes.add_textbox(Inches(0.4), Inches(7.05), Inches(12.5), Inches(0.3)) tf_cap4 = tb_cap4.text_frame p_cap4 = tf_cap4.paragraphs[0] r_cap4 = p_cap4.add_run() r_cap4.text = "Fig 3.8 – O₂ & CO₂ transport cycle (Lippincott's Biochemistry, 8th Ed.)" r_cap4.font.name = "Calibri" r_cap4.font.size = Pt(10) r_cap4.font.italic = True r_cap4.font.color.rgb = RGBColor(0x55, 0x66, 0x77) # ============================================================ # Save # ============================================================ out = "/tmp/workspace/hb-cooperative/Cooperative_Binding_Hemoglobin.pptx" prs.save(out) print(f"Saved to {out}") EOF

Running Command

ls -lh /tmp/workspace/hb-cooperative/

Here is your downloadable 4-slide presentation on cooperative binding of hemoglobin:

Cooperative Binding Hemoglobin

Presentation · PPTX


What's inside (4 slides):
Slide 1 - Title slide Dark themed intro: "Cooperative Binding of Hemoglobin"
Slide 2 - What is Cooperative Binding?
  • Hb is a tetramer with 4 heme groups
  • Each O₂ bound triggers a T→R conformational shift, making the next subunit bind O₂ more easily
  • The last O₂ binds with ~300x greater affinity than the first
  • Includes the Lippincott's Fig 3.7 diagram showing successive O₂ binding
Slide 3 - Oxygen-Dissociation Curve
  • Myoglobin (hyperbolic) vs Hemoglobin (sigmoidal) - the classic comparison
  • T state vs R state explained
  • P₅₀ values (Mb = 1 mmHg, Hb = 26 mmHg)
  • Loading in lungs vs unloading in tissues
  • Full Lippincott's Fig 3.6 graph embedded
Slide 4 - Allosteric Effectors
  • 2,3-BPG, CO₂/pH (Bohr effect), temperature, CO
  • All cause right-shift (except CO which left-shifts)
  • Lippincott's Fig 3.8 transport cycle diagram
All three diagrams are sourced directly from Lippincott Illustrated Reviews - Biochemistry, 8th Ed.
This is a shared conversation. Sign in to Orris to start your own chat.