Vaporizers in MD Anaesthesia with pictures ppt
mkdir -p /home/daytona/workspace/vaporizers-ppt && ls /home/daytona/workspace/va…
~/vaporizers-ppt/build_vaporizers_md.js
const pptxgen = require("pptxgenjs");
const { execSync } = require("child_process");
// Fetch images as base64
function fetchImages(urls) {
try {
const result = execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js ${urls.map(u => `"${u}"`).join(" ")}`,
{ timeout: 60000 }
).toString();
return JSON.parse(result);
} catch (e) {
console.error("Image fetch error:", e.message);
return urls.map(() => ({ base64: null, error: "fetch failed" }));
}
}
const imageUrls = [
"https://cdn.orris.care/cdss_images/08b64235d2c8cbb87f0dca5863e5b56955fe2a9e992d1cdd532e7c911a7ea277.png", // Morton's ether inhaler
"https://cdn.orris.care/cdss_images/9bd2f52a27a6e5ea08c880a66fd1b54085158697a97751391194870b8ec794a5.png", // Aladin cassette vaporizer on GE Aisys
"https://cdn.orris.care/cdss_images/17531eb073cd9527a4ac6a868bab569311f77999f12735aed00f147fab301848.png", // Aladin schematic
"https://cdn.orris.care/cdss_images/7672a4a8d97639119628eb1d1d15218c6cd45eb6b4f1539b563a79312464607c.png", // Altitude effect graph
];
console.log("Fetching images...");
const images = fetchImages(imageUrls);
images.forEach((img, i) => {
console.log(`Image ${i}: ${img.error ? "FAILED - " + img.error : "OK (len=" + (img.base64 ? img.base64.length : 0) + ")"}`);
});
// ─── THEME COLORS ───────────────────────────────────────────────
const DARK_BG = "0D1B2A"; // deep navy
const MID_BG = "1A2E44"; // mid navy for content slides
const ACCENT = "00B4D8"; // cyan accent
const ACCENT2 = "48CAE4"; // lighter cyan
const GOLD = "FFD166"; // warm gold for highlights
const WHITE = "FFFFFF";
const LIGHT_GRAY = "E8F4F8";
const BODY_GRAY = "B8D4E0";
const RED = "EF233C"; // danger / warning
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Vaporizers in Anaesthesia";
pres.author = "MD Anaesthesia";
pres.subject = "Anaesthetic Vaporizers";
// ─── HELPER ──────────────────────────────────────────────────────
function addHeader(slide, title, subtitle) {
// top bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.55, fill: { color: ACCENT }, line: { color: ACCENT } });
slide.addText("MD ANAESTHESIA", { x: 0.15, y: 0.08, w: 4, h: 0.38, fontSize: 9, bold: true, color: DARK_BG, fontFace: "Calibri", charSpacing: 3 });
slide.addText("VAPORIZERS", { x: 6.5, y: 0.08, w: 3.35, h: 0.38, fontSize: 9, bold: true, color: DARK_BG, fontFace: "Calibri", align: "right", charSpacing: 3 });
slide.addText(title, { x: 0.35, y: 0.65, w: 9.3, h: 0.68, fontSize: 24, bold: true, color: GOLD, fontFace: "Calibri", margin: 0 });
if (subtitle) {
slide.addShape(pres.ShapeType.line, { x: 0.35, y: 1.35, w: 9.3, h: 0, line: { color: ACCENT, width: 1.5 } });
slide.addText(subtitle, { x: 0.35, y: 1.42, w: 9.3, h: 0.35, fontSize: 13, italic: true, color: ACCENT2, fontFace: "Calibri", margin: 0 });
} else {
slide.addShape(pres.ShapeType.line, { x: 0.35, y: 1.35, w: 9.3, h: 0, line: { color: ACCENT, width: 1.5 } });
}
}
function bulletItems(items) {
return items.map((item, i) => ({
text: item,
options: { bullet: { type: "bullet", characterCode: "25B6", indent: 15 }, breakLine: i < items.length - 1, color: WHITE, fontSize: 14.5, fontFace: "Calibri" }
}));
}
function subBullet(items) {
return items.map((item, i) => ({
text: item,
options: { bullet: { indent: 30 }, breakLine: i < items.length - 1, color: BODY_GRAY, fontSize: 13, fontFace: "Calibri", indentLevel: 1 }
}));
}
// ────────────────────────────────────────────────────────────────
// SLIDE 1 — TITLE
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
// Decorative block left
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: ACCENT } });
sl.addShape(pres.ShapeType.rect, { x: 0.18, y: 0, w: 0.08, h: 5.625, fill: { color: ACCENT2, transparency: 50 } });
// Right image panel (Morton's inhaler)
if (images[0] && !images[0].error) {
sl.addImage({ data: images[0].base64, x: 6.8, y: 0.5, w: 2.9, h: 4.4 });
sl.addShape(pres.ShapeType.rect, { x: 6.8, y: 0.5, w: 2.9, h: 4.4, fill: { color: DARK_BG, transparency: 30 }, line: { color: ACCENT, width: 1 } });
sl.addText("Morton's Ether Inhaler (1846)", { x: 6.82, y: 4.55, w: 2.86, h: 0.5, fontSize: 9, color: BODY_GRAY, italic: true, fontFace: "Calibri", align: "center" });
}
sl.addText("VAPORIZERS", { x: 0.5, y: 0.8, w: 6.2, h: 0.85, fontSize: 48, bold: true, color: WHITE, fontFace: "Calibri", charSpacing: 4, margin: 0 });
sl.addText("IN ANAESTHESIA", { x: 0.5, y: 1.6, w: 6.2, h: 0.75, fontSize: 36, bold: true, color: ACCENT, fontFace: "Calibri", charSpacing: 2, margin: 0 });
sl.addShape(pres.ShapeType.line, { x: 0.5, y: 2.45, w: 5.8, h: 0, line: { color: GOLD, width: 2 } });
sl.addText("MD Anaesthesia Seminar", { x: 0.5, y: 2.55, w: 5.8, h: 0.4, fontSize: 16, color: GOLD, fontFace: "Calibri", italic: true, margin: 0 });
const topics = ["Physics of Vaporization", "Classification", "Variable Bypass Vaporizers", "Desflurane (Tec 6) Vaporizer", "Aladin Cassette Vaporizer", "Injection Vaporizers", "Factors Affecting Output", "Safety & Complications"];
sl.addText(topics.map((t, i) => ({
text: "• " + t,
options: { breakLine: i < topics.length - 1, color: i % 2 === 0 ? BODY_GRAY : ACCENT2, fontSize: 12.5, fontFace: "Calibri" }
})), { x: 0.5, y: 3.1, w: 5.8, h: 2.2 });
sl.addText("Sources: Miller's Anesthesia 10e | Barash Clinical Anesthesia 9e", { x: 0, y: 5.3, w: 10, h: 0.28, fontSize: 9, color: BODY_GRAY, align: "center", fontFace: "Calibri" });
}
// ────────────────────────────────────────────────────────────────
// SLIDE 2 — PHYSICS OF VAPORIZATION
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: MID_BG };
addHeader(sl, "Physics of Vaporization", "Principles underlying vaporizer design");
// Two-column layout
// Col 1
sl.addShape(pres.ShapeType.rect, { x: 0.35, y: 1.85, w: 4.35, h: 3.5, fill: { color: DARK_BG, transparency: 20 }, line: { color: ACCENT, width: 0.75 } });
sl.addText("Key Physical Concepts", { x: 0.5, y: 1.9, w: 4.05, h: 0.38, fontSize: 13, bold: true, color: ACCENT, fontFace: "Calibri", margin: 0 });
const physics1 = [
{ text: "Saturated Vapour Pressure (SVP)", options: { bullet: { indent: 10 }, breakLine: true, color: GOLD, bold: true, fontSize: 13.5, fontFace: "Calibri" } },
{ text: "Pressure exerted by vapour molecules in equilibrium with its liquid. SVP is agent- and temperature-dependent (NOT dependent on barometric pressure).", options: { bullet: false, breakLine: true, color: BODY_GRAY, fontSize: 12, fontFace: "Calibri" } },
{ text: "Latent Heat of Vaporization", options: { bullet: { indent: 10 }, breakLine: true, color: GOLD, bold: true, fontSize: 13.5, fontFace: "Calibri" } },
{ text: "Energy consumed to convert liquid → vapour. Derived from the liquid itself → causes temperature drop of remaining liquid. Vaporizers must compensate.", options: { bullet: false, breakLine: true, color: BODY_GRAY, fontSize: 12, fontFace: "Calibri" } },
{ text: "Specific Heat", options: { bullet: { indent: 10 }, breakLine: true, color: GOLD, bold: true, fontSize: 13.5, fontFace: "Calibri" } },
{ text: "Calories needed to raise 1g of agent by 1°C. High specific heat metals used in vaporizer construction to minimize temperature fluctuations.", options: { bullet: false, breakLine: false, color: BODY_GRAY, fontSize: 12, fontFace: "Calibri" } },
];
sl.addText(physics1, { x: 0.42, y: 2.3, w: 4.15, h: 2.95, valign: "top", margin: 5 });
// Col 2
sl.addShape(pres.ShapeType.rect, { x: 4.9, y: 1.85, w: 4.75, h: 3.5, fill: { color: DARK_BG, transparency: 20 }, line: { color: ACCENT, width: 0.75 } });
sl.addText("SVP of Common Agents at 20°C", { x: 5.05, y: 1.9, w: 4.45, h: 0.38, fontSize: 13, bold: true, color: ACCENT, fontFace: "Calibri", margin: 0 });
const agents = [
["Agent", "SVP (mmHg)", "Boiling Pt", "MAC (%)"],
["Desflurane", "669", "22.8°C", "6.0"],
["Isoflurane", "238", "48.5°C", "1.15"],
["Sevoflurane", "160", "58.5°C", "2.05"],
["Enflurane", "175", "56.5°C", "1.68"],
["Halothane", "243", "50.2°C", "0.75"],
];
sl.addTable(agents, {
x: 4.98, y: 2.35, w: 4.58, h: 2.85,
border: { pt: 0.5, color: ACCENT },
fill: DARK_BG,
color: WHITE,
fontSize: 11.5,
fontFace: "Calibri",
align: "center",
colW: [1.5, 1.2, 1.1, 0.78],
rowH: 0.42,
});
sl.addText("Thermal conductivity: High conductivity metals used to maintain uniform internal temperature", { x: 0.35, y: 5.32, w: 9.3, h: 0.25, fontSize: 10, italic: true, color: BODY_GRAY, fontFace: "Calibri" });
}
// ────────────────────────────────────────────────────────────────
// SLIDE 3 — CLASSIFICATION
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
addHeader(sl, "Classification of Vaporizers", "Based on position, mechanism, and agent delivery");
const classifications = [
{
title: "1. Position Relative to Breathing Circuit",
items: ["OUT-OF-CIRCUIT (virtually all modern vaporizers) — controlled output introduced via fresh gas line", "IN-CIRCUIT — found in draw-over anesthesia systems; resource-limited settings and ICU sedation"]
},
{
title: "2. Types (Mechanism of Action)",
items: ["Variable Bypass Vaporizer — most common; Tec 5, Tec 7, Dräger Vapor 2000/3000", "Dual-Circuit / Pressurized — Desflurane vaporizer (Tec 6, D-Vapor)", "Cassette Vaporizer — GE Aladin; electronically controlled for multiple agents", "Injection Vaporizer — liquid agent injected directly into fresh gas flow (modern workstations)"]
},
{
title: "3. Method of Vaporization",
items: ["Flow-over (wick system) — carrier gas passes OVER liquid agent on saturated wick", "Bubble-through — carrier gas bubbled THROUGH liquid (now obsolete; Copper Kettle, Verni-Trol)"]
},
{
title: "4. Agent Specificity",
items: ["Agent-specific — calibrated for one agent; specific filler ports prevent cross-filling", "Multi-agent — Aladin cassette vaporizer (electronically identifies agent via magnetic coding)"]
},
];
let yPos = 1.85;
classifications.forEach(cls => {
sl.addText(cls.title, { x: 0.35, y: yPos, w: 9.3, h: 0.3, fontSize: 13, bold: true, color: GOLD, fontFace: "Calibri", margin: 0 });
yPos += 0.3;
cls.items.forEach(item => {
sl.addShape(pres.ShapeType.rect, { x: 0.35, y: yPos, w: 0.12, h: 0.22, fill: { color: ACCENT } });
sl.addText(item, { x: 0.55, y: yPos, w: 9.1, h: 0.24, fontSize: 12, color: WHITE, fontFace: "Calibri", margin: 0 });
yPos += 0.26;
});
yPos += 0.1;
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 4 — VARIABLE BYPASS VAPORIZER
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: MID_BG };
addHeader(sl, "Variable Bypass Vaporizers", "Tec 5, Tec 7, Dräger Vapor 2000/3000 — the clinical standard");
sl.addText([
{ text: "Principle: ", options: { bold: true, color: GOLD, fontSize: 13.5, fontFace: "Calibri" } },
{ text: "Incoming fresh gas is split between a BYPASS CHAMBER and a VAPORIZING CHAMBER. The vaporizing chamber gas flows over a wick saturated with liquid agent and becomes saturated with vapour. The two streams recombine to deliver the desired concentration.", options: { color: WHITE, fontSize: 13.5, fontFace: "Calibri" } }
], { x: 0.35, y: 1.85, w: 9.3, h: 0.65, margin: 0 });
// Left box
sl.addShape(pres.ShapeType.rect, { x: 0.35, y: 2.6, w: 4.55, h: 2.7, fill: { color: DARK_BG, transparency: 20 }, line: { color: ACCENT, width: 0.75 } });
sl.addText("Components", { x: 0.5, y: 2.65, w: 4.2, h: 0.3, fontSize: 13, bold: true, color: ACCENT, fontFace: "Calibri", margin: 0 });
sl.addText([
...bulletItems(["Fresh gas inlet port", "Concentration control dial (sets splitting ratio)", "Bypass chamber", "Vaporizing chamber + wick system", "Temperature-compensating device", "Agent-specific filler port", "Vaporizer outlet port"])
], { x: 0.42, y: 3.0, w: 4.35, h: 2.2, valign: "top", margin: 3 });
// Right box
sl.addShape(pres.ShapeType.rect, { x: 5.1, y: 2.6, w: 4.55, h: 2.7, fill: { color: DARK_BG, transparency: 20 }, line: { color: ACCENT, width: 0.75 } });
sl.addText("Splitting Ratio (approx. at 20°C)", { x: 5.25, y: 2.65, w: 4.2, h: 0.3, fontSize: 13, bold: true, color: ACCENT, fontFace: "Calibri", margin: 0 });
const splitTable = [
["Agent", "Dial", "Bypass:Vaporizing"],
["Isoflurane", "1%", "45:1"],
["Sevoflurane", "2%", "14:1"],
["Halothane", "1%", "47:1"],
["Enflurane", "1.5%", "30:1"],
];
sl.addTable(splitTable, {
x: 5.15, y: 3.0, w: 4.42, h: 2.2,
border: { pt: 0.5, color: ACCENT },
fill: DARK_BG,
color: WHITE,
fontSize: 12,
fontFace: "Calibri",
align: "center",
rowH: 0.42,
});
sl.addText("Temperature Compensation: Bimetallic strip or wax-filled element expands/contracts to adjust bypass:vaporizing ratio and maintain constant output", { x: 0.35, y: 5.35, w: 9.3, h: 0.23, fontSize: 9.5, italic: true, color: BODY_GRAY, fontFace: "Calibri" });
}
// ────────────────────────────────────────────────────────────────
// SLIDE 5 — TEMPERATURE COMPENSATION & WICKS
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
addHeader(sl, "Temperature Compensation & Wicks", "How vaporizers maintain stable output");
const leftItems = [
{ heading: "Problem", text: "Vaporization is endothermic — latent heat of vaporization cools the remaining liquid → SVP decreases → vaporizer output falls" },
{ heading: "Solution: Temp-Compensating Device", text: "A bimetallic strip or wax-filled element acts as a variable bypass valve. As temperature drops → element contracts → more gas directed through vaporizing chamber to compensate. As temperature rises → element expands → more gas bypassed" },
{ heading: "Materials Choice", text: "Vaporizers made from metals with HIGH specific heat (e.g., copper, bronze) and HIGH thermal conductivity → minimize temperature swings and rapidly equilibrate with environment" },
];
let y = 1.85;
leftItems.forEach(item => {
sl.addText(item.heading, { x: 0.35, y, w: 5.4, h: 0.28, fontSize: 13, bold: true, color: GOLD, fontFace: "Calibri", margin: 0 });
y += 0.28;
sl.addText(item.text, { x: 0.35, y, w: 5.4, h: 0.65, fontSize: 12.5, color: WHITE, fontFace: "Calibri", margin: 2, wrap: true });
y += 0.72;
});
// Right side: wick info
sl.addShape(pres.ShapeType.rect, { x: 5.95, y: 1.85, w: 3.7, h: 3.5, fill: { color: MID_BG }, line: { color: ACCENT2, width: 1 } });
sl.addText("Wick System", { x: 6.1, y: 1.9, w: 3.4, h: 0.35, fontSize: 15, bold: true, color: ACCENT, fontFace: "Calibri", margin: 0 });
sl.addText([
{ text: "Purpose: ", options: { bold: true, color: ACCENT2, fontSize: 12.5, fontFace: "Calibri" } },
{ text: "Maximizes surface area for liquid-gas contact\n\n", options: { color: WHITE, fontSize: 12.5, fontFace: "Calibri", breakLine: true } },
{ text: "How: ", options: { bold: true, color: ACCENT2, fontSize: 12.5, fontFace: "Calibri" } },
{ text: "Absorbent material saturated with liquid agent; carrier gas flows over it and becomes laden with vapour\n\n", options: { color: WHITE, fontSize: 12.5, fontFace: "Calibri", breakLine: true } },
{ text: "Baffles: ", options: { bold: true, color: ACCENT2, fontSize: 12.5, fontFace: "Calibri" } },
{ text: "Additional structures improve mixing of carrier gas with anaesthetic vapour", options: { color: WHITE, fontSize: 12.5, fontFace: "Calibri" } },
], { x: 6.1, y: 2.35, w: 3.45, h: 2.9, valign: "top", margin: 5 });
sl.addText("Operating Temperature Range: Modern vaporizers accurate between 15–35°C | Maximum tilt: 35° from vertical", {
x: 0.35, y: 5.33, w: 9.3, h: 0.25, fontSize: 9.5, color: BODY_GRAY, italic: true, fontFace: "Calibri"
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 6 — DESFLURANE VAPORIZER (Tec 6)
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: MID_BG };
addHeader(sl, "Desflurane Vaporizer (Tec 6 / D-Vapor)", "Electrically heated, pressurized dual-gas blender");
sl.addText("Why desflurane CANNOT use variable bypass vaporizers:", { x: 0.35, y: 1.85, w: 9.3, h: 0.28, fontSize: 13, bold: true, color: RED, fontFace: "Calibri", margin: 0 });
const reasons = [
"SVP = 669 mmHg at 20°C → extremely high volatility → prohibitive bypass chamber flow needed (>12 L/min for 6%)",
"High MAC → large volumes must vaporize → excessive evaporative cooling of liquid",
"Boiling point = 22.8°C → AT ROOM TEMPERATURE desflurane may boil → uncontrollable output",
];
reasons.forEach((r, i) => {
sl.addShape(pres.ShapeType.ellipse, { x: 0.35, y: 2.18 + i * 0.38, w: 0.25, h: 0.25, fill: { color: RED } });
sl.addText(`${i + 1}. ${r}`, { x: 0.7, y: 2.17 + i * 0.38, w: 9.0, h: 0.3, fontSize: 12.5, color: WHITE, fontFace: "Calibri", margin: 0 });
});
sl.addShape(pres.ShapeType.rect, { x: 0.35, y: 3.35, w: 5.55, h: 2.05, fill: { color: DARK_BG, transparency: 15 }, line: { color: GOLD, width: 1 } });
sl.addText("Tec 6 Operating Principles", { x: 0.5, y: 3.4, w: 5.2, h: 0.3, fontSize: 13, bold: true, color: GOLD, fontFace: "Calibri", margin: 0 });
sl.addText([
...bulletItems([
"Electrically heated sump to 39°C → desflurane vapour at 1300 mmHg",
"Dual-circuit: fresh gas circuit (orange) + pressurized vapour circuit (blue)",
"Pressure-regulating valve: reduces vapour pressure to match fresh gas circuit pressure",
"Concentration control valve (R2): variable restrictor — operator adjusts output %",
"Back-pressure compensator: prevents backflow from breathing circuit",
])
], { x: 0.42, y: 3.73, w: 5.38, h: 1.6, valign: "top", margin: 3 });
// Image: altitude graph as visual aid on right
if (images[3] && !images[3].error) {
sl.addImage({ data: images[3].base64, x: 6.1, y: 3.3, w: 3.55, h: 2.1 });
sl.addText("Altitude effect: Tec-type vs Tec 6 (partial pressure vs vol%)", { x: 6.1, y: 5.4, w: 3.55, h: 0.2, fontSize: 8.5, color: BODY_GRAY, italic: true, fontFace: "Calibri", align: "center" });
}
sl.addText("At HIGH ALTITUDE: Tec 6 maintains constant vol% but partial pressure ↓ → increase dial setting proportionally (dial × 760 mmHg / ambient pressure)", {
x: 0.35, y: 5.33, w: 9.3, h: 0.27, fontSize: 9.5, color: BODY_GRAY, italic: true, fontFace: "Calibri"
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 7 — ALADIN CASSETTE VAPORIZER
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
addHeader(sl, "Aladin Cassette Vaporizer (GE Healthcare)", "Electronically controlled, multi-agent cassette system");
// Left panel
sl.addShape(pres.ShapeType.rect, { x: 0.35, y: 1.85, w: 4.7, h: 3.55, fill: { color: MID_BG }, line: { color: ACCENT, width: 0.75 } });
sl.addText("Key Features", { x: 0.5, y: 1.9, w: 4.4, h: 0.3, fontSize: 13, bold: true, color: ACCENT, fontFace: "Calibri", margin: 0 });
sl.addText([
...bulletItems([
"Used in GE Aisys and Avance Carestations",
"Delivers 5 agents: halothane, isoflurane, enflurane, sevoflurane, desflurane",
"Permanent internal control unit housed in workstation",
"Interchangeable agent-specific ALADIN CASSETTES",
"Cassettes are colour-coded AND magnetically coded (CPU auto-identifies agent)",
"CPU-controlled flow valve in vaporizing chamber outlet",
])
], { x: 0.42, y: 2.25, w: 4.55, h: 3.05, valign: "top", margin: 3 });
// Right image: Aladin on Aisys
if (images[1] && !images[1].error) {
sl.addImage({ data: images[1].base64, x: 5.2, y: 1.85, w: 4.45, h: 2.55 });
sl.addText("Aladin cassette vaporizers on GE Aisys Carestation — upper cassette in use, lower stored", { x: 5.2, y: 4.42, w: 4.45, h: 0.32, fontSize: 9, color: BODY_GRAY, italic: true, fontFace: "Calibri", align: "center" });
}
// Bottom note
sl.addShape(pres.ShapeType.rect, { x: 0.35, y: 5.2, w: 9.3, h: 0.38, fill: { color: ACCENT, transparency: 70 }, line: { color: ACCENT } });
sl.addText("CPU inputs: concentration dial + pressure sensor + temperature sensor + bypass flow sensor + vaporizing chamber flow sensor + carrier gas composition", { x: 0.45, y: 5.24, w: 9.1, h: 0.3, fontSize: 9.5, color: WHITE, fontFace: "Calibri" });
}
// ────────────────────────────────────────────────────────────────
// SLIDE 8 — ALADIN SCHEMATIC
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: MID_BG };
addHeader(sl, "Aladin Cassette — Functional Anatomy", "CPU-regulated flow control is the central innovation");
if (images[2] && !images[2].error) {
sl.addImage({ data: images[2].base64, x: 0.35, y: 1.82, w: 5.0, h: 3.55 });
sl.addText("Figure 25-31: Simplified schematic of GE-Datex-Ohmeda Aladin Cassette Vaporizer (Barash 9e)", { x: 0.35, y: 5.38, w: 5.0, h: 0.22, fontSize: 8.5, italic: true, color: BODY_GRAY, fontFace: "Calibri", align: "center" });
}
sl.addShape(pres.ShapeType.rect, { x: 5.55, y: 1.82, w: 4.1, h: 3.55, fill: { color: DARK_BG, transparency: 20 }, line: { color: GOLD, width: 0.75 } });
sl.addText("Circuit Legend", { x: 5.7, y: 1.87, w: 3.8, h: 0.3, fontSize: 13, bold: true, color: GOLD, fontFace: "Calibri", margin: 0 });
const legendItems = [
["FBC", "Flow measurement unit, bypass chamber"],
["FVC", "Flow measurement unit, vaporizing chamber"],
["P", "Pressure sensor (inside cassette)"],
["T", "Temperature sensor (inside cassette)"],
["CPU", "Central processing unit — regulates valve"],
["↓ Valve", "Electronically controlled flow control valve in vaporizing chamber outlet"],
["Check Valve", "Prevents retrograde vapour into bypass — critical for desflurane delivery above 22.8°C"],
];
legendItems.forEach((item, i) => {
sl.addText(item[0], { x: 5.65, y: 2.25 + i * 0.44, w: 1.0, h: 0.38, fontSize: 11.5, bold: true, color: ACCENT, fontFace: "Calibri", margin: 0 });
sl.addText(item[1], { x: 6.65, y: 2.25 + i * 0.44, w: 2.85, h: 0.38, fontSize: 11.5, color: WHITE, fontFace: "Calibri", margin: 0 });
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 9 — INJECTION VAPORIZERS
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
addHeader(sl, "Injection-Type Vaporizers", "Modern workstation technology — liquid agent injected directly");
sl.addText("Concept: Liquid anaesthetic agent is injected in precise microlitre amounts directly into the fresh gas stream. A heating element may vaporize the agent before it reaches the patient circuit.", {
x: 0.35, y: 1.85, w: 9.3, h: 0.55, fontSize: 13, color: WHITE, fontFace: "Calibri", wrap: true, margin: 0
});
const injBox = [
{ title: "Advantages", color: ACCENT, items: ["No moving mechanical parts in vapour path", "Agent concentration independent of fresh gas flow rate", "Rapid concentration changes possible", "Can deliver multiple agents from single system", "Reduced dead volume / faster wash-in and wash-out"] },
{ title: "Examples", color: GOLD, items: ["Dräger Zeus workstation (AnaConDa-type circuit)", "GE FLOW-i workstation", "Penlon Prima SP (circle system with agent injection)"] },
{ title: "Limitations", color: RED, items: ["Dependent on electrical power", "Requires precise liquid delivery pump calibration", "Risk of agent misdosing if pump malfunctions", "More complex internal components"] },
];
injBox.forEach((box, i) => {
const x = 0.35 + i * 3.2;
sl.addShape(pres.ShapeType.rect, { x, y: 2.55, w: 3.05, h: 2.85, fill: { color: MID_BG }, line: { color: box.color, width: 1 } });
sl.addText(box.title, { x: x + 0.1, y: 2.6, w: 2.85, h: 0.3, fontSize: 13.5, bold: true, color: box.color, fontFace: "Calibri", margin: 0 });
sl.addText(box.items.map((item, j) => ({
text: item,
options: { bullet: { indent: 10 }, breakLine: j < box.items.length - 1, color: WHITE, fontSize: 12, fontFace: "Calibri" }
})), { x: x + 0.08, y: 2.95, w: 2.89, h: 2.35, valign: "top", margin: 3 });
});
sl.addText("Draw-Over Vaporizers: Used in resource-limited settings — patient's inspiratory effort draws air across a simple vaporizing chamber. No gas supply needed.", {
x: 0.35, y: 5.35, w: 9.3, h: 0.23, fontSize: 9.5, color: BODY_GRAY, italic: true, fontFace: "Calibri"
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 10 — FACTORS AFFECTING OUTPUT
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: MID_BG };
addHeader(sl, "Factors Affecting Vaporizer Output", "Temperature, flow, pressure, composition, altitude");
const factors = [
{ name: "Temperature", icon: "🌡", effect: "↓ Temp → ↓ SVP → ↓ output. Temperature-compensating device corrects this. At extremes of temperature, compensation may be inadequate.", alert: false },
{ name: "Fresh Gas Flow Rate", icon: "💨", effect: "At very LOW flows (<250 mL/min): incomplete saturation of wick → under-reading. At very HIGH flows (>15 L/min): gas leaves vaporizing chamber before fully saturated → under-reading.", alert: true },
{ name: "Back-Pressure (Pumping Effect)", icon: "⬆", effect: "Intermittent positive-pressure ventilation transmits back-pressure into vaporizer → transiently augments vapour output → higher-than-set concentration delivered. An outlet check valve prevents this.", alert: true },
{ name: "Carrier Gas Composition", icon: "⚗", effect: "N₂O-based carrier gas → initially higher output (N₂O more soluble in liquid agent → agent displaced into gas phase). Steady state reached in ~30 min. Effect more significant at low flows.", alert: false },
{ name: "Altitude (Barometric Pressure)", icon: "🏔", effect: "Variable bypass vaporizers: ↓ atmospheric pressure → ↑ vol% output but partial pressure (potency) unchanged — no clinical dose adjustment needed. Tec 6 (Desflurane): constant vol% but ↓ partial pressure at altitude → increase dial setting.", alert: true },
{ name: "Tipping / Position", icon: "↻", effect: "Tipping vaporizer >35° from vertical can flood bypass chamber with liquid agent → massive overdose on next use. Tip protocol: turn dial to 0, flush with high-flow O₂ for 20–30 min before use.", alert: true },
];
factors.forEach((f, i) => {
const col = i < 3 ? 0 : 1;
const row = i % 3;
const x = col === 0 ? 0.35 : 5.1;
const y = 1.85 + row * 1.2;
const boxColor = f.alert ? "#2D1515" : DARK_BG;
const borderColor = f.alert ? RED : ACCENT;
sl.addShape(pres.ShapeType.rect, { x, y, w: 4.6, h: 1.12, fill: { color: f.alert ? "2D1515" : "1A2030" }, line: { color: borderColor, width: 0.75 } });
sl.addText(`${f.name}`, { x: x + 0.12, y: y + 0.05, w: 4.35, h: 0.27, fontSize: 12.5, bold: true, color: f.alert ? RED : GOLD, fontFace: "Calibri", margin: 0 });
sl.addText(f.effect, { x: x + 0.12, y: y + 0.32, w: 4.35, h: 0.72, fontSize: 11, color: WHITE, fontFace: "Calibri", margin: 0, wrap: true });
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 11 — VAPORIZER SAFETY & INTERLOCK
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
addHeader(sl, "Safety Features & Vaporizer Interlock Systems", "Preventing medication errors and equipment failure");
const safetyItems = [
{
heading: "Agent-Specific Filler Ports",
text: "Keyed/colour-coded filler ports on both the vaporizer AND the agent bottle prevent cross-filling. Example: Quik-Fil (GE), Safe-Fill (Penlon). Each agent has a unique connector geometry.",
color: ACCENT
},
{
heading: "Vaporizer Interlock Systems",
text: "All anaesthesia workstations MUST prevent fresh gas flowing through more than one vaporizer simultaneously. Interlock devices are mechanical or electronic. Note: not immune to failure — anaesthetic overdose is the consequence of simultaneous activation.",
color: GOLD
},
{
heading: "Removable Vaporizer Mounts (Quick-Mount)",
text: "Allow rapid replacement/exchange. Important in malignant hyperthermia — vaporizer can be quickly removed. After mounting: check seating, lock mechanism, perform leak test per manufacturer protocol.",
color: ACCENT2
},
{
heading: "Outlet Check Valve",
text: "One-way valve between vaporizer and common gas outlet (GE Aestiva, Aespire) prevents backflow during PPV — minimises pumping effect. Presence of this valve dictates which leak test method is used (negative-pressure, NOT positive-pressure test).",
color: ACCENT
},
{
heading: "Malignant Hyperthermia Protocol",
text: "Remove all vaporizers, use TIVA. Replace breathing circuit and CO₂ absorber. Flush machine with high-flow O₂ (≥10 L/min for ≥20 min). Activated charcoal filters available for some machines.",
color: RED
},
];
let y = 1.85;
safetyItems.forEach(item => {
sl.addShape(pres.ShapeType.rect, { x: 0.35, y, w: 0.06, h: 0.35, fill: { color: item.color } });
sl.addText(item.heading, { x: 0.5, y, w: 3.5, h: 0.35, fontSize: 12.5, bold: true, color: item.color, fontFace: "Calibri", margin: 0 });
sl.addText(item.text, { x: 4.1, y, w: 5.55, h: 0.6, fontSize: 11.5, color: WHITE, fontFace: "Calibri", margin: 0, wrap: true });
y += 0.68;
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 12 — VAPORIZER CHECKING (PRE-USE)
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: MID_BG };
addHeader(sl, "Pre-Use Vaporizer Checks", "Machine check protocol — essential before every anaesthetic");
sl.addText("All check steps per manufacturer + institution protocol. Key vaporizer-specific steps:", {
x: 0.35, y: 1.85, w: 9.3, h: 0.3, fontSize: 13, color: WHITE, fontFace: "Calibri", margin: 0
});
const checks = [
["1", "Liquid level", "Check agent level (between min and max fill lines). Do NOT overfill.", ACCENT],
["2", "Correct agent", "Confirm agent matches clinical plan. Check filler port label and cassette coding.", GOLD],
["3", "Seating", "Ensure vaporizer is locked onto mount. Cannot be dislodged when tugged.", ACCENT2],
["4", "Leak test", "Low-pressure leak test per machine type: negative-pressure test (machines with outlet check valve) OR positive-pressure test. Leak indicated by flow bobbin dropping.", RED],
["5", "Interlock", "Verify interlock device: activating one vaporizer should prevent others from being turned on.", ACCENT],
["6", "Flush protocol", "After tipping: flush with O₂ 10 L/min for 20–30 min with dial at max, then at zero before use.", GOLD],
["7", "Dial function", "Turn dial slowly through full range; confirm smooth action; return to zero.", ACCENT2],
];
checks.forEach((c, i) => {
const y = 2.25 + i * 0.44;
sl.addShape(pres.ShapeType.ellipse, { x: 0.35, y, w: 0.35, h: 0.35, fill: { color: c[3] } });
sl.addText(c[0], { x: 0.35, y, w: 0.35, h: 0.35, fontSize: 12, bold: true, color: DARK_BG, fontFace: "Calibri", align: "center", valign: "middle" });
sl.addText(c[1], { x: 0.82, y, w: 2.1, h: 0.35, fontSize: 12.5, bold: true, color: c[3], fontFace: "Calibri", margin: 0, valign: "middle" });
sl.addText(c[2], { x: 3.02, y, w: 6.63, h: 0.35, fontSize: 12, color: WHITE, fontFace: "Calibri", margin: 0, valign: "middle" });
});
sl.addShape(pres.ShapeType.rect, { x: 0.35, y: 5.28, w: 9.3, h: 0.3, fill: { color: RED, transparency: 70 }, line: { color: RED } });
sl.addText("⚠ Vaporizer must NEVER be used if: wrong agent suspected | recently tipped | leak test failed | agent level below minimum", {
x: 0.45, y: 5.3, w: 9.1, h: 0.26, fontSize: 10, bold: true, color: WHITE, fontFace: "Calibri"
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 13 — COMPLICATIONS & TROUBLESHOOTING
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
addHeader(sl, "Complications & Troubleshooting", "Recognising and managing vaporizer-related incidents");
const complications = [
{ prob: "Vaporizer Overfill / Tipping", cause: "Liquid agent floods bypass chamber", effect: "Massive anaesthetic overdose", management: "Evacuate patient, turn off vaporizer, high-flow O₂ flush for 20–30 min, call for help", color: RED },
{ prob: "Cross-Filling", cause: "Wrong agent placed in vaporizer", effect: "Unpredictable agent concentration; patient awareness or overdose", management: "Empty vaporizer, flush thoroughly; recalibrate; monitor agent identity with multi-gas analyser", color: RED },
{ prob: "Pumping Effect", cause: "Backpressure augments vapour output", effect: "Higher-than-set vapour concentration delivered", management: "Ensure outlet check valve in place; use agent analyser; reduce set concentration slightly at low FGF", color: GOLD },
{ prob: "Simultaneous Activation", cause: "Interlock failure; both vaporizers on", effect: "Mixed agents; excessive concentration", management: "Turn both off immediately, flush circuit, agent analyser; DO NOT proceed until machine checked", color: RED },
{ prob: "Vaporizer Leak", cause: "Improperly seated mount; cracked O-ring", effect: "Ambient contamination; lower-than-expected output", management: "Repeat leak test; remove and reseat vaporizer; replace O-rings; use backup machine", color: GOLD },
{ prob: "Desflurane Tec-6 Alarm", cause: "Not yet at operating temperature; low desflurane level; electrical failure", effect: "No desflurane delivered", management: "Allow warmup (5–10 min); refill cassette; switch to alternative agent if persistent", color: ACCENT },
];
complications.forEach((c, i) => {
const col = i < 3 ? 0 : 1;
const row = i % 3;
const x = col === 0 ? 0.35 : 5.1;
const y = 1.85 + row * 1.22;
sl.addShape(pres.ShapeType.rect, { x, y, w: 4.6, h: 1.15, fill: { color: MID_BG }, line: { color: c.color, width: 0.75 } });
sl.addText(c.prob, { x: x + 0.1, y: y + 0.04, w: 4.38, h: 0.26, fontSize: 12, bold: true, color: c.color, fontFace: "Calibri", margin: 0 });
sl.addText(`Cause: ${c.cause}`, { x: x + 0.1, y: y + 0.3, w: 4.38, h: 0.22, fontSize: 10.5, color: BODY_GRAY, fontFace: "Calibri", margin: 0 });
sl.addText(`Effect: ${c.effect}`, { x: x + 0.1, y: y + 0.52, w: 4.38, h: 0.22, fontSize: 10.5, color: WHITE, fontFace: "Calibri", margin: 0 });
sl.addText(`Mx: ${c.management}`, { x: x + 0.1, y: y + 0.74, w: 4.38, h: 0.33, fontSize: 10, italic: true, color: ACCENT2, fontFace: "Calibri", margin: 0, wrap: true });
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 14 — COMPARISON TABLE
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: MID_BG };
addHeader(sl, "Vaporizer Comparison", "Variable Bypass vs Tec 6 vs Aladin vs Injection");
const compTable = [
["Feature", "Variable Bypass", "Tec 6 (Des)", "Aladin Cassette", "Injection"],
["Agents", "All except Des", "Desflurane only", "All 5 agents", "All agents"],
["Mechanism", "Flow splitting", "Dual gas blending", "CPU-controlled valve", "Microinjection"],
["Temp. Compensation", "Bimetallic/wax", "Electrically heated 39°C", "Electronic CPU", "Electronic"],
["FGF Independence", "Partial", "Yes", "Yes (CPU)", "Yes"],
["Altitude Effect (vol%)", "↑ output vol% (PP constant)", "Constant vol% (PP ↓)", "Compensated", "Compensated"],
["Power Required", "No", "Yes (240V)", "Yes", "Yes"],
["Agent Specific", "Yes", "Yes (Des only)", "Cassette-coded", "Software-set"],
["Examples", "Tec 5/7, Vapor 2000", "Tec 6, D-Vapor", "GE Aisys/Avance", "Dräger Zeus, GE FLOW-i"],
];
sl.addTable(compTable, {
x: 0.25, y: 1.82, w: 9.5, h: 3.6,
border: { pt: 0.5, color: ACCENT },
color: WHITE,
fontSize: 11,
fontFace: "Calibri",
align: "center",
rowH: 0.38,
fill: DARK_BG,
});
sl.addText("Des = Desflurane | PP = Partial Pressure | FGF = Fresh Gas Flow | CPU = Central Processing Unit", {
x: 0.35, y: 5.35, w: 9.3, h: 0.23, fontSize: 9.5, italic: true, color: BODY_GRAY, fontFace: "Calibri"
});
}
// ────────────────────────────────────────────────────────────────
// SLIDE 15 — SUMMARY / KEY POINTS
// ────────────────────────────────────────────────────────────────
{
let sl = pres.addSlide();
sl.background = { color: DARK_BG };
sl.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.6, fill: { color: ACCENT } });
sl.addText("MD ANAESTHESIA — VAPORIZERS", { x: 0.3, y: 0.12, w: 9.4, h: 0.38, fontSize: 11, bold: true, color: DARK_BG, fontFace: "Calibri", charSpacing: 3, align: "center" });
sl.addText("KEY POINTS TO REMEMBER", { x: 0.3, y: 0.7, w: 9.4, h: 0.45, fontSize: 22, bold: true, color: GOLD, fontFace: "Calibri", align: "center", charSpacing: 2 });
sl.addShape(pres.ShapeType.line, { x: 0.5, y: 1.2, w: 9.0, h: 0, line: { color: ACCENT, width: 1.5 } });
const keyPoints = [
"SVP is agent- and temperature-specific; NOT affected by barometric pressure (exception: output concentration vol% is affected).",
"Variable bypass vaporizers: temperature-compensated, agent-specific, out-of-circuit — the clinical standard for all agents except desflurane.",
"Desflurane (SVP 669 mmHg, BP 22.8°C) MUST use the Tec 6 or D-Vapor: electrically heated (39°C), pressurized dual-gas blender.",
"At HIGH ALTITUDE: variable bypass vaporizers deliver higher vol% but same partial pressure (unchanged anaesthetic potency). Tec 6 delivers lower partial pressure — increase dial setting.",
"Pumping effect: intermittent PPV back-pressure → augmented output. Outlet check valve (Aestiva, Aespire) prevents this.",
"After vaporizer TIPPING (>35°): flush with O₂ ≥10 L/min for 20–30 min at max dial, then zero — prevents massive overdose.",
"Aladin cassette: magnetically coded cassettes → CPU auto-identifies agent → single vaporizer for all 5 agents.",
"Pre-use checks: level, agent identity, seating, leak test, interlock, dial function — every anaesthetic, every time.",
];
keyPoints.forEach((pt, i) => {
const y = 1.3 + i * 0.53;
sl.addShape(pres.ShapeType.rect, { x: 0.3, y, w: 0.28, h: 0.28, fill: { color: i < 4 ? ACCENT : GOLD } });
sl.addText(`${i + 1}`, { x: 0.3, y, w: 0.28, h: 0.28, fontSize: 11, bold: true, color: DARK_BG, fontFace: "Calibri", align: "center", valign: "middle" });
sl.addText(pt, { x: 0.68, y, w: 9.0, h: 0.46, fontSize: 12, color: WHITE, fontFace: "Calibri", margin: 0, wrap: true });
});
sl.addText("Sources: Miller's Anesthesia 10e (Ch.20) | Barash, Cullen & Stoelting's Clinical Anesthesia 9e (Ch.25)", {
x: 0, y: 5.37, w: 10, h: 0.25, fontSize: 9, color: BODY_GRAY, italic: true, fontFace: "Calibri", align: "center"
});
}
// ─── WRITE OUTPUT ────────────────────────────────────────────────
const outPath = "/home/daytona/workspace/vaporizers-ppt/Vaporizers_MD_Anaesthesia.pptx";
pres.writeFile({ fileName: outPath }).then(() => {
console.log("SUCCESS: " + outPath);
}).catch(err => {
console.error("ERROR:", err);
});
cd /home/daytona/workspace/vaporizers-ppt && node build_vaporizers_md.js 2>&1
cd /home/daytona/workspace/vaporizers-ppt && node -e " const { execSync } = requ…
~/vaporizers-ppt/build_vaporizers_md.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/vaporizers-ppt/build_vaporizers_md.js'
cd /home/daytona/workspace/vaporizers-ppt && node build_vaporizers_md.js 2>&1
ls -lh /home/daytona/workspace/vaporizers-ppt/Vaporizers_MD_Anaesthesia.pptx
Vaporizers MD Anaesthesia
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title slide with Morton's ether inhaler (1846) image |
| 2 | Physics of Vaporization - SVP table for all agents |
| 3 | Classification of Vaporizers |
| 4 | Variable Bypass Vaporizers - splitting ratios table |
| 5 | Temperature Compensation & Wick system |
| 6 | Desflurane Tec 6 Vaporizer + altitude effect graph image |
| 7 | Aladin Cassette Vaporizer - photo from Barash 9e |
| 8 | Aladin schematic diagram + circuit legend |
| 9 | Injection-Type Vaporizers |
| 10 | Factors Affecting Output (all 6 factors) |
| 11 | Safety Features & Interlock Systems |
| 12 | Pre-Use Vaporizer Checks |
| 13 | Complications & Troubleshooting |
| 14 | Full comparison table (all 4 types) |
| 15 | Key Points to Remember |