Blood substitutes short answer for muhs exam
| Feature | HBOCs | PFCs |
|---|---|---|
| Source | Biological (Hb) | Synthetic |
| O2 carrying | Chemically bound | Physically dissolved |
| Crossmatch | Not required | Not required |
| Shelf life | 1-4 years | Shorter |
| Infection risk | Minimal | None |
| Main adverse effect | Vasoconstriction, MI | Short half-life |
Create a PDF summary card for quick exam revision
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/blood-substitutes && python3 << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import mm, cm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY from reportlab.platypus import KeepTogether OUTPUT = "/tmp/workspace/blood-substitutes/Blood_Substitutes_RevisionCard.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, leftMargin=15*mm, rightMargin=15*mm, topMargin=12*mm, bottomMargin=12*mm ) # ─── Colour palette ─────────────────────────────────────────────────────────── DARK_BLUE = colors.HexColor("#1A3A5C") MED_BLUE = colors.HexColor("#2E6DA4") LIGHT_BLUE = colors.HexColor("#D6E8F7") ACCENT_RED = colors.HexColor("#C0392B") ACCENT_GREEN= colors.HexColor("#1D8348") ORANGE = colors.HexColor("#E67E22") PALE_YELLOW = colors.HexColor("#FEF9E7") PALE_GREEN = colors.HexColor("#EAFAF1") PALE_RED = colors.HexColor("#FDEDEC") WHITE = colors.white GREY_BG = colors.HexColor("#F2F3F4") GREY_LINE = colors.HexColor("#BDC3C7") # ─── Styles ─────────────────────────────────────────────────────────────────── styles = getSampleStyleSheet() title_style = ParagraphStyle("title", parent=styles["Normal"], fontSize=20, fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER, spaceAfter=2) subtitle_style = ParagraphStyle("subtitle", parent=styles["Normal"], fontSize=10, fontName="Helvetica", textColor=colors.HexColor("#D6E8F7"), alignment=TA_CENTER, spaceAfter=0) section_head = ParagraphStyle("sechead", parent=styles["Normal"], fontSize=11, fontName="Helvetica-Bold", textColor=WHITE, backColor=MED_BLUE, alignment=TA_LEFT, leftIndent=6, rightIndent=0, spaceBefore=6, spaceAfter=3, borderPad=4) sub_head = ParagraphStyle("subhead", parent=styles["Normal"], fontSize=9.5, fontName="Helvetica-Bold", textColor=DARK_BLUE, spaceBefore=4, spaceAfter=2) body = ParagraphStyle("body", parent=styles["Normal"], fontSize=8.5, fontName="Helvetica", textColor=colors.black, leading=12, spaceAfter=2) bullet = ParagraphStyle("bullet", parent=styles["Normal"], fontSize=8.5, fontName="Helvetica", textColor=colors.black, leading=12, leftIndent=12, bulletIndent=0, spaceAfter=1.5) bold_bullet = ParagraphStyle("boldbullet", parent=bullet, fontName="Helvetica-Bold", textColor=DARK_BLUE) note_style = ParagraphStyle("note", parent=styles["Normal"], fontSize=7.8, fontName="Helvetica-Oblique", textColor=colors.HexColor("#6C3483"), backColor=colors.HexColor("#F5EEF8"), leftIndent=5, rightIndent=5, spaceBefore=3, spaceAfter=3, borderPad=3) warn_style = ParagraphStyle("warn", parent=styles["Normal"], fontSize=8, fontName="Helvetica-Bold", textColor=ACCENT_RED, backColor=PALE_RED, leftIndent=5, borderPad=3, spaceBefore=3, spaceAfter=3) def B(txt): return f"<b>{txt}</b>" def BI(txt): return f"<i>{txt}</i>" # ─── Helper: section header box ─────────────────────────────────────────────── def section(title, emoji=""): return Paragraph(f" {emoji} {title}" if emoji else f" {title}", section_head) def bullet_item(text, indent=12): s = ParagraphStyle("bi", parent=bullet, leftIndent=indent) return Paragraph(f"• {text}", s) # ─── Build story ────────────────────────────────────────────────────────────── story = [] # ── TITLE BANNER ────────────────────────────────────────────────────────────── banner_data = [[ Paragraph("BLOOD SUBSTITUTES", title_style), "" ]] banner_table = Table([[Paragraph("BLOOD SUBSTITUTES", title_style)]], colWidths=[180*mm]) banner_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE), ("TOPPADDING", (0,0), (-1,-1), 10), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("ROUNDEDCORNERS", [4]), ])) story.append(banner_table) sub_table = Table([[Paragraph("Quick Revision Card | MUHS Surgery | Sources: Bailey & Love • Sabiston • Roberts & Hedges", subtitle_style)]], colWidths=[180*mm]) sub_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), MED_BLUE), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ])) story.append(sub_table) story.append(Spacer(1, 4*mm)) # ── ROW 1: Definition | Need ────────────────────────────────────────────────── def_content = [ section("DEFINITION"), Paragraph("Fluids that <b>carry and deliver oxygen</b> to tissues — distinct from simple volume expanders (which only restore volume without O₂-carrying capacity).", body), Spacer(1, 2), Paragraph(B("Two broad types:"), sub_head), bullet_item("<b>Biomimetic</b> – mimic Hb-based O₂ carrying (HBOCs)"), bullet_item("<b>Abiotic</b> – synthetic O₂ carriers (Perfluorocarbons)"), ] need_content = [ section("WHY NEEDED?"), bullet_item("Limited blood supply & availability"), bullet_item("Infectious complications of transfusion"), bullet_item("Immunogenic reactions (ABO/Rh mismatch)"), bullet_item("Storage limitations of donated blood"), bullet_item("Rural areas, combat/austere conditions"), bullet_item("Patients refusing transfusion (e.g., Jehovah's Witnesses)"), ] row1 = Table([[def_content, need_content]], colWidths=[90*mm, 90*mm]) row1.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("LEFTPADDING", (0,0), (-1,-1), 3), ("RIGHTPADDING", (0,0), (-1,-1), 3), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING", (0,0), (-1,-1), 0), ])) story.append(row1) story.append(Spacer(1, 3*mm)) # ── IDEAL PROPERTIES BOX ───────────────────────────────────────────────────── ideal_items = [ ["1. Efficiently deliver O₂ to tissues", "2. No crossmatching required (universal compatibility)"], ["3. Few/no side effects", "4. Prolonged storage capability"], ["5. Adequate persistence in circulation", "6. Cost-effective & easily available"], ["7. Free of infection risk", "8. Stable at room temperature"], ] ideal_table_data = [[Paragraph(B("PROPERTIES OF IDEAL BLOOD SUBSTITUTE"), ParagraphStyle("ih", parent=section_head, backColor=ACCENT_GREEN))]] ideal_grid = Table(ideal_items, colWidths=[90*mm, 90*mm]) ideal_grid.setStyle(TableStyle([ ("FONTNAME", (0,0), (-1,-1), "Helvetica"), ("FONTSIZE", (0,0), (-1,-1), 8.2), ("TEXTCOLOR", (0,0), (-1,-1), colors.black), ("BACKGROUND", (0,0), (-1,-1), PALE_GREEN), ("ROWBACKGROUNDS", (0,0), (-1,-1), [PALE_GREEN, colors.HexColor("#D5F5E3")]), ("GRID", (0,0), (-1,-1), 0.3, GREY_LINE), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 6), ])) story.append(Paragraph(" PROPERTIES OF AN IDEAL BLOOD SUBSTITUTE", section_head)) story.append(ideal_grid) story.append(Spacer(1, 3*mm)) # ── ROW 2: HBOCs left | PFCs right ─────────────────────────────────────────── hboc_content = [ section("HBOCs — HAEMOGLOBIN-BASED O₂ CARRIERS"), Paragraph(B("History:"), sub_head), bullet_item("1920s: Free Hb first explored; toxic from breakdown products"), bullet_item("1930s–50s: Strategies to stabilise Hb molecule"), Spacer(1,2), Paragraph(B("Problems with free Hb:"), sub_head), bullet_item("Osmotic diuresis & <b>renal toxicity</b>"), bullet_item("Coagulation abnormalities"), bullet_item("Short half-life"), bullet_item("<b>Vasoconstriction</b> (scavenges nitric oxide)"), Spacer(1,2), Paragraph(B("Stabilisation strategies:"), sub_head), bullet_item("Cross-linking between tetramer subunits"), bullet_item("<b>Polymerisation</b> (preferred; higher MW ~130 kDa → longer intravascular presence)"), bullet_item("Encapsulation in liposomes / artificial RBCs"), bullet_item("Microsphere technology"), Spacer(1,2), Paragraph(B("Sources of Hb:"), sub_head), bullet_item("Outdated donated human RBCs"), bullet_item("Bovine / swine blood"), bullet_item("Transgenic E. coli (recombinant)"), Spacer(1,2), Paragraph(B("2nd Generation HBOCs advantages:"), sub_head), bullet_item("Pasteurised — no communicable pathogens"), bullet_item("No ABO/Rh antigens → universally compatible"), bullet_item("No blood banking / crossmatch needed"), bullet_item("Shelf life 1–4 years"), ] pfc_content = [ section("PFCs — PERFLUOROCARBONS"), Paragraph(B("Nature:"), sub_head), bullet_item("Completely <b>inert</b> biologically (similar to Teflon/Gore-Tex)"), bullet_item("High O₂ & CO₂ <b>dissolving capacity</b> (more than plasma)"), bullet_item("Totally synthetic; unlimited supply; no infection risk"), Spacer(1,2), Paragraph(B("Famous experiment (1966):"), sub_head), Paragraph("Mouse submerged in liquid PFC — continued breathing & survived, demonstrating dissolved O₂ transport.", body), Spacer(1,2), Paragraph(B("Limitations:"), sub_head), bullet_item("<b>Immiscible with water</b> → must be emulsified for IV use"), bullet_item("Short half-life → degradation within <b>48 hours</b>"), bullet_item("Require high inspired FiO₂ to be effective"), Spacer(1,2), Paragraph(B("Examples:"), sub_head), bullet_item("<b>Fluosol-DA</b> — 1st generation PFC emulsion"), bullet_item("<b>Oxygent</b> (perfluorooctyl bromide) — 2nd generation"), Spacer(1,2), Paragraph(B("Current role:"), sub_head), bullet_item("Adjunct to standard transfusion therapy"), bullet_item("2nd-gen emulsions showing clinical trial promise"), Spacer(1,2), Paragraph(B("Novel research:"), sub_head), bullet_item("Earthworm & marine worm Hb (survive without RBCs)"), bullet_item("Stem cell-derived RBCs"), bullet_item("Placental cord blood stem cells"), bullet_item("Biodegradable micelles & hemerythrin"), ] row2 = Table([[hboc_content, pfc_content]], colWidths=[90*mm, 90*mm]) row2.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("LEFTPADDING", (0,0), (-1,-1), 3), ("RIGHTPADDING", (0,0), (-1,-1), 3), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING", (0,0), (-1,-1), 0), ])) story.append(row2) story.append(Spacer(1, 3*mm)) # ── GENERATIONS TABLE ───────────────────────────────────────────────────────── story.append(Paragraph(" GENERATIONS OF HBOCs", section_head)) gen_data = [ [B("Generation"), B("Product / Strategy"), B("Source"), B("Key Feature"), B("Problem")], ["1st", "HemAssist (DCLHb)\nBaxter, 1999", "Human / cross-linked", "First clinical trials", "Vasoconstriction, short half-life"], ["2nd", "Hemopure (HBOC-201)", "Bovine / polymerised", "Stable 3 yrs RT; approved SA & Russia", "↑ MI risk, vasoconstriction"], ["2nd", "PolyHeme", "Human / polymerised", "Human source", "Increased adverse events in trials"], ["2nd", "HemO2life", "Polychaete worm Arenicola marina", "EU approved for organ preservation", "Still investigational for humans"], ["3rd", "Liposome-encapsulated Hb", "Various", "O₂ dissociation curve like RBCs", "Preclinical; immune effects unclear"], ] gen_style = TableStyle([ ("BACKGROUND", (0,0), (-1,0), DARK_BLUE), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 7.5), ("FONTNAME", (0,1), (-1,-1), "Helvetica"), ("ROWBACKGROUNDS", (0,1), (-1,-1), [WHITE, LIGHT_BLUE]), ("GRID", (0,0), (-1,-1), 0.4, GREY_LINE), ("ALIGN", (0,0), (-1,-1), "LEFT"), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 4), ]) gen_table = Table(gen_data, colWidths=[20*mm, 38*mm, 38*mm, 46*mm, 38*mm]) gen_table.setStyle(gen_style) story.append(gen_table) story.append(Spacer(1, 3*mm)) # ── COMPARISON TABLE ────────────────────────────────────────────────────────── story.append(Paragraph(" HBOCs vs PFCs — QUICK COMPARISON", section_head)) comp_data = [ [B("Feature"), B("HBOCs"), B("PFCs")], ["Source", "Biological (Hb)", "Synthetic"], ["O₂ transport", "Chemically bound (like RBC)", "Physically dissolved"], ["Crossmatch needed", "No", "No"], ["Shelf life", "1–4 years", "Shorter (~48h active)"], ["Infection risk", "Minimal (pasteurised)", "None"], ["Supply", "Limited (human) / Ample (bovine)", "Essentially unlimited"], ["Main adverse effect", "Vasoconstriction, ↑MI risk", "Short half-life, needs high FiO₂"], ["Current approval", "SA & Russia (Hemopure)", "None (investigational)"], ] comp_style = TableStyle([ ("BACKGROUND", (0,0), (-1,0), ORANGE), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 7.8), ("FONTNAME", (0,1), (-1,-1), "Helvetica"), ("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"), ("ROWBACKGROUNDS", (0,1), (-1,-1), [PALE_YELLOW, WHITE]), ("GRID", (0,0), (-1,-1), 0.4, GREY_LINE), ("ALIGN", (0,0), (-1,-1), "LEFT"), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 5), ]) comp_table = Table(comp_data, colWidths=[45*mm, 70*mm, 65*mm]) comp_table.setStyle(comp_style) story.append(comp_table) story.append(Spacer(1, 3*mm)) # ── HIGH-YIELD EXAM POINTS ──────────────────────────────────────────────────── story.append(Paragraph(" HIGH-YIELD EXAM POINTS", ParagraphStyle("hy", parent=section_head, backColor=ACCENT_RED))) hy_items = [ ("Mechanism of vasoconstriction", "HBOCs scavenge nitric oxide (NO) → vasoconstriction → ↑ risk of MI"), ("Meta-analysis finding", "16 HBOC trials showed significantly ↑ MI & death vs controls"), ("Only approved HBOC (human use)", "Hemopure (HBOC-201) — South Africa & Russia; compassionate use in USA"), ("PFC landmark experiment", "1966 — mouse breathing in liquid PFC (Leland Clark Jr.)"), ("2nd gen advantage over 1st gen", "Polymerisation → higher MW (130 kDa) → longer intravascular half-life"), ("HemO2life source", "Polychaete worm Arenicola marina; EU-approved for organ preservation"), ("Why PFCs need emulsification", "Immiscible with water → must form microdroplets for IV administration"), ("Recombinant Hb challenge", "Only 0.1 g Hb per litre of E. coli culture; 750 L needed for 1 unit"), ] hy_data = [[Paragraph(B(k), ParagraphStyle("k", parent=body, textColor=DARK_BLUE)), Paragraph(v, body)] for k,v in hy_items] hy_table = Table(hy_data, colWidths=[55*mm, 125*mm]) hy_table.setStyle(TableStyle([ ("ROWBACKGROUNDS", (0,0), (-1,-1), [PALE_RED, WHITE]), ("GRID", (0,0), (-1,-1), 0.3, GREY_LINE), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 5), ("FONTSIZE", (0,0), (-1,-1), 8), ])) story.append(hy_table) story.append(Spacer(1, 3*mm)) # ── MEMORY AIDS ─────────────────────────────────────────────────────────────── mem_data = [[ [ Paragraph(" MNEMONIC — Ideal Blood Substitute: 'DO CAP SI'", ParagraphStyle("mem", parent=section_head, backColor=colors.HexColor("#6C3483"))), Paragraph("<b>D</b>elivers O₂ efficiently", bullet), Paragraph("<b>O</b> — nO crossmatch required", bullet), Paragraph("<b>C</b>ost effective", bullet), Paragraph("<b>A</b>dequate shelf life", bullet), Paragraph("<b>P</b>ersists in circulation", bullet), Paragraph("<b>S</b>ide effects minimal", bullet), Paragraph("<b>I</b>nfection risk nil", bullet), ], [ Paragraph(" CURRENT STATUS", ParagraphStyle("cs", parent=section_head, backColor=ACCENT_GREEN)), Paragraph("• No blood substitute approved for <b>routine clinical use</b> globally", bullet), Paragraph("• HBOCs have potential in: rural/remote areas, combat, refusal of transfusion", bullet), Paragraph("• 3rd generation (liposome-Hb) still in <b>preclinical testing</b>", bullet), Paragraph("• Research ongoing: marine worm Hb, stem cell-derived RBCs, cord blood", bullet), Spacer(1,3), Paragraph("Sources: Bailey & Love's Surgery 28e · Sabiston Surgery · Roberts & Hedges Emergency", ParagraphStyle("src", parent=body, fontSize=7, textColor=colors.grey)), ] ]] mem_table = Table(mem_data, colWidths=[90*mm, 90*mm]) mem_table.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("LEFTPADDING", (0,0), (-1,-1), 3), ("RIGHTPADDING", (0,0), (-1,-1), 3), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING", (0,0), (-1,-1), 0), ])) story.append(mem_table) # ─── Build PDF ──────────────────────────────────────────────────────────────── doc.build(story) print(f"PDF created: {OUTPUT}") EOF
Blood Substitutes RevisionCard
PDF Document · PDF