Need ppt on physiology of nose and PNS for post graduates
mkdir -p /tmp/workspace/nose-pns-ppt
~/nose-pns-ppt/build_ppt.py
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.util import Inches, Pt
from io import BytesIO
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = RGBColor(0x1A, 0x3A, 0x5C) # deep navy - title bars
TEAL = RGBColor(0x00, 0x7A, 0x87) # teal accent
LIGHT_TEAL = RGBColor(0xE0, 0xF4, 0xF6) # very light teal - content bg
ORANGE = RGBColor(0xE8, 0x7A, 0x1E) # warm orange - highlights
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
DARK_GRAY = RGBColor(0x2D, 0x2D, 0x2D)
MID_GRAY = RGBColor(0x55, 0x55, 0x55)
LIGHT_GRAY = RGBColor(0xF5, 0xF5, 0xF5)
GOLD = RGBColor(0xF0, 0xC0, 0x40)
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
# ────────────────────────────────────────────────────────────────────────────
# Helper functions
# ────────────────────────────────────────────────────────────────────────────
def add_rect(slide, x, y, w, h, fill_color, alpha=None):
shape = slide.shapes.add_shape(1, Inches(x), Inches(y), Inches(w), Inches(h))
shape.fill.solid()
shape.fill.fore_color.rgb = fill_color
shape.line.fill.background()
return shape
def add_text(slide, text, x, y, w, h, font_size=18, bold=False, color=DARK_GRAY,
align=PP_ALIGN.LEFT, wrap=True, italic=False, anchor=MSO_ANCHOR.TOP):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = wrap
tf.vertical_anchor = anchor
tf.margin_left = Pt(4)
tf.margin_right = Pt(4)
tf.margin_top = Pt(2)
tf.margin_bottom = Pt(2)
p = tf.paragraphs[0]
p.alignment = align
r = p.add_run()
r.text = text
r.font.size = Pt(font_size)
r.font.bold = bold
r.font.italic = italic
r.font.color.rgb = color
r.font.name = "Calibri"
return tb
def add_bullet_slide(slide, title, bullets, subtitle=None,
header_color=NAVY, accent=TEAL, bg=LIGHT_TEAL,
col2_bullets=None):
"""Standard content slide: header bar + bullet content area."""
# Background
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
# Top header bar
add_rect(slide, 0, 0, 13.333, 1.2, header_color)
# Accent bottom strip on header
add_rect(slide, 0, 1.2, 13.333, 0.07, accent)
# Title
add_text(slide, title, 0.3, 0.1, 12.5, 1.0,
font_size=28, bold=True, color=WHITE, align=PP_ALIGN.LEFT,
anchor=MSO_ANCHOR.MIDDLE)
if subtitle:
add_text(slide, subtitle, 0.3, 0.75, 12.5, 0.5,
font_size=14, bold=False, color=GOLD, align=PP_ALIGN.LEFT)
if col2_bullets:
# Two-column layout
col_w = 6.0
for col_idx, blist in enumerate([bullets, col2_bullets]):
cx = 0.3 + col_idx * 6.6
# column bg
add_rect(slide, cx - 0.05, 1.35, col_w + 0.15, 5.9, WHITE)
tb = slide.shapes.add_textbox(Inches(cx), Inches(1.4), Inches(col_w), Inches(5.8))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Pt(6)
tf.margin_right = Pt(6)
first = True
for b in blist:
if first:
p = tf.paragraphs[0]
first = False
else:
p = tf.add_paragraph()
p.space_before = Pt(4)
p.space_after = Pt(2)
if b.startswith("##"):
r = p.add_run()
r.text = b[2:].strip()
r.font.size = Pt(15)
r.font.bold = True
r.font.color.rgb = TEAL
r.font.name = "Calibri"
elif b.startswith("--"):
p.level = 1
r = p.add_run()
r.text = " " + b[2:].strip()
r.font.size = Pt(13)
r.font.color.rgb = MID_GRAY
r.font.name = "Calibri"
else:
r = p.add_run()
r.text = "\u2022 " + b
r.font.size = Pt(14)
r.font.color.rgb = DARK_GRAY
r.font.name = "Calibri"
else:
# Single-column
add_rect(slide, 0.3, 1.35, 12.7, 5.9, WHITE)
tb = slide.shapes.add_textbox(Inches(0.45), Inches(1.45), Inches(12.3), Inches(5.75))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Pt(6)
tf.margin_right = Pt(6)
first = True
for b in bullets:
if first:
p = tf.paragraphs[0]
first = False
else:
p = tf.add_paragraph()
p.space_before = Pt(5)
p.space_after = Pt(2)
if b.startswith("##"):
r = p.add_run()
r.text = b[2:].strip()
r.font.size = Pt(16)
r.font.bold = True
r.font.color.rgb = TEAL
r.font.name = "Calibri"
elif b.startswith("--"):
p.level = 1
r = p.add_run()
r.text = " \u25E6 " + b[2:].strip()
r.font.size = Pt(13.5)
r.font.color.rgb = MID_GRAY
r.font.name = "Calibri"
else:
r = p.add_run()
r.text = "\u2022 " + b
r.font.size = Pt(14.5)
r.font.color.rgb = DARK_GRAY
r.font.name = "Calibri"
# Bottom footer bar
add_rect(slide, 0, 7.25, 13.333, 0.25, NAVY)
add_text(slide, "Physiology of Nose & PNS | Postgraduate ENT", 0.2, 7.26, 10, 0.22,
font_size=9, color=RGBColor(0xBB, 0xCC, 0xDD), align=PP_ALIGN.LEFT)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 1 — TITLE SLIDE
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
# Full background
add_rect(slide, 0, 0, 13.333, 7.5, NAVY)
# Diagonal accent panel
shape = slide.shapes.add_shape(1, Inches(8.5), Inches(0), Inches(4.833), Inches(7.5))
shape.fill.solid()
shape.fill.fore_color.rgb = TEAL
shape.line.fill.background()
# Thin gold line
add_rect(slide, 0, 5.0, 8.5, 0.06, GOLD)
# Title
add_text(slide, "PHYSIOLOGY OF NOSE\nAND PARANASAL SINUSES",
0.5, 1.5, 8.0, 2.8, font_size=38, bold=True, color=WHITE,
align=PP_ALIGN.LEFT, anchor=MSO_ANCHOR.MIDDLE)
# Subtitle
add_text(slide, "A Comprehensive Review for Postgraduates",
0.5, 4.2, 8.0, 0.6, font_size=18, italic=True, color=GOLD,
align=PP_ALIGN.LEFT)
add_text(slide, "Department of ENT & Head-Neck Surgery",
0.5, 4.9, 8.0, 0.5, font_size=15, color=RGBColor(0xBB, 0xCC, 0xDD),
align=PP_ALIGN.LEFT)
add_text(slide, "Source: Cummings Otolaryngology | Scott-Brown's ORL | Ganong's Physiology",
0.5, 6.8, 8.0, 0.5, font_size=10, color=RGBColor(0x88, 0xAA, 0xCC),
align=PP_ALIGN.LEFT)
# Right panel text
add_text(slide, "Topics Covered", 8.7, 0.4, 4.2, 0.6, font_size=18, bold=True,
color=WHITE, align=PP_ALIGN.LEFT)
topics = [
"Anatomy Overview",
"Nasal Airflow & Resistance",
"Nasal Valve",
"Nasal Cycle",
"Air Conditioning",
"Mucociliary Clearance",
"Olfaction",
"Nasal Reflexes",
"PNS - Functions",
"Osteomeatal Complex",
"Sinus Ventilation",
"Clinical Correlates",
]
tb = slide.shapes.add_textbox(Inches(8.7), Inches(1.1), Inches(4.2), Inches(6.0))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Pt(4)
first = True
for t in topics:
if first:
p = tf.paragraphs[0]
first = False
else:
p = tf.add_paragraph()
p.space_before = Pt(5)
r = p.add_run()
r.text = "\u2714 " + t
r.font.size = Pt(13.5)
r.font.color.rgb = WHITE
r.font.name = "Calibri"
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 2 — OVERVIEW / OUTLINE
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Overview: Why Study Nasal Physiology?",
bullets=[
"The nose is far more than an air passage - it is a sophisticated physiological organ",
"Performs filtration, humidification, warming, olfaction, and immune defence",
"Paranasal sinuses (PNS) modulate airflow, reduce skull weight, and drain via OMC",
"Understanding physiology underpins every rhinological surgical decision",
"##Key Domains",
"Aerodynamics: airflow, resistance, nasal valve",
"Mucociliary transport: ciliary beat, mucus layers, clearance pathways",
"Sensory: olfaction, nasal reflexes, air conditioning",
"Sinus physiology: ventilation, pressure, drainage",
"##Clinical Relevance",
"Septal deviation, turbinate hypertrophy, chronic rhinosinusitis, anosmia",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 3 — ANATOMY OVERVIEW (quick)
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Surgical Anatomy: Quick Review",
bullets=[
"##External Nose",
"Nasal bones + upper lateral cartilages (ULC) + lower lateral cartilages (LLC)",
"Nasal valve angle: 10-15° between ULC and septum (critical for resistance)",
"##Internal Nose",
"Septum: perpendicular plate (ethmoid) + vomer + septal cartilage",
"Turbinates: inferior (largest), middle, superior, supreme (inconstant)",
"Inferior turbinate: erectile tissue, greatest mucosal surface",
"##Key Spaces",
"Sphenoethmoidal recess: drains sphenoid sinus",
"Superior meatus: drains posterior ethmoid cells",
"Middle meatus: drains maxillary, frontal, anterior ethmoid - OMC",
"Inferior meatus: nasolacrimal duct opens here",
],
col2_bullets=[
"##Blood Supply",
"Anterior ethmoidal a. (ophthalmic a.) - upper septum",
"Posterior ethmoidal a. - upper septum",
"Sphenopalatine a. (maxillary a.) - posterior septum, turbinates",
"Greater palatine a. - anterior septum (Little's area)",
"Little's area (Kiesselbach's plexus): confluence anteriorly - epistaxis site",
"##Nerve Supply",
"Olfactory (CN I): superior concha & roof",
"Ophthalmic division (V1): anterior nasal septum",
"Maxillary division (V2): lateral wall & floor",
"Autonomic: sympathetic (vasoconstriction) & parasympathetic (vasodilation, secretion)",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 4 — NASAL AIRFLOW & VALVE
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Nasal Airflow Dynamics & Nasal Valve",
bullets=[
"##Airflow Pattern",
"Air enters vestibule → narrows at nasal valve → disperses in cavity",
"Velocity at nasal valve at rest: ~16 m/s (cadaver studies)",
"Velocity decelerates 4-fold on entering main nasal cavity",
"Deceleration promotes turbulence - essential for air conditioning and olfaction",
"50% of inspired air passes along the nasal floor (physiological models)",
"##Nasal Valve (narrowest point)",
"Bounded by: caudal ULC, septum, head of inferior turbinate, nasal floor",
"Angle 10-15° - smallest cross-sectional area of entire respiratory tract",
"Resistance varies inversely and exponentially with cross-sectional area",
"Decongestion alone reduces resistance by 1/3; alar retraction reduces by 2/3",
"Venturi effect: dynamic collapse during forced inspiration (internal valve collapse)",
"##Ohm's Formula (nasal resistance)",
"Resistance = Pressure difference / Airflow (cm H2O / L/s)",
"Normal combined nasal resistance: < 3 cm H2O/L/s",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 5 — NASAL RESISTANCE & REGULATION
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Regulation of Nasal Resistance",
bullets=[
"##Vascular Erectile Tissue",
"Inferior & middle turbinates contain capacitance sinusoids (erectile tissue)",
"Engorgement → mucosal thickening → increased resistance",
"Decongestion → venous drainage → decreased resistance",
"##Autonomic Control",
"Parasympathetic: vasodilation of sinusoids + capillaries → congestion + secretion",
"Sympathetic: steady vasoconstrictor tone (baseline patency)",
"Hormonal: estrogens (OCP, pregnancy) → mucosal hypertrophy → obstruction",
"Nasal obstruction can be felt without anatomic obstruction (neural perception)",
"##Turbulent vs Laminar Flow",
"Turbulent flow: perceived as low flow → sensation of stuffiness",
"Causes: septal deviation, septal perforations",
"##Measurement Tools",
"Acoustic rhinometry: noninvasive, cross-sectional area mapping (static)",
"Rhinomanometry (airflow rhinometry): dynamic - resistance before/after decongestant",
"Saccharin clearance test: mucociliary transport time",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 6 — NASAL CYCLE
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "The Nasal Cycle",
bullets=[
"##Definition",
"Alternating congestion and decongestion of the two nasal fossae",
"Described first by Heetderks (1927) - observed in 80% of normal population",
"Mean duration: ~2.5 hours per cycle",
"##Mechanism",
"Controlled by autonomic nervous system - hypothalamic regulation",
"Turbinates in one fossa congest while the opposite decongest",
"Total bilateral nasal resistance remains constant throughout cycle",
"##Positional Effect",
"Dependent nasal fossa fills when patient is in lateral decubitus position",
"Postulated function: promotes turning during sleep (prevents pressure sores)",
"##Clinical Implications",
"Paradoxical nasal obstruction: patient feels obstruction on the OPEN side",
"In septal deviation: fixed increased resistance + nasal cycle = variable complaint",
"Turgescent phase of normal side perceived as obstruction on normal side",
"Essential knowledge to avoid misinterpreting turbinate asymmetry",
"##Clinical Pearl",
"Never interpret unilateral turbinate enlargement without considering nasal cycle phase",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 7 — AIR CONDITIONING
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Air Conditioning: Humidification, Warming & Filtration",
bullets=[
"##Overview",
"The nose conditions inspired air to ~37°C and ~100% relative humidity by the nasopharynx",
"Three functions: warming, humidification, and particle filtration",
"##Warming",
"Nasal mucosal blood vessels form a countercurrent heat exchanger",
"Inspired air warmed from ambient to near body temperature within nasal passages",
"Turbinates increase surface area 5-fold for efficient heat exchange",
"##Humidification",
"Nasal mucosa produces ~1 litre of fluid/day",
"Serous and mucous glands + transepithelial fluid transfer",
"Dry air (desert, winter heating) impairs ciliary function",
"##Particle Filtration",
"Vibrissae in vestibule: filter large particles (>10 microns)",
"Turbulent airflow + mucus layer: trap medium particles (2-10 microns)",
"Mucociliary transport: removes trapped particles to nasopharynx",
"Fine particles (<2 microns) reach lower airways (role of mucociliary barrier in sinuses)",
"##Impairment",
"Septal perforations, total rhinectomy, laryngectomy - lose conditioning function",
"Atrophic rhinitis, dry environments, smoking disrupt humidification",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 8 — MUCOCILIARY CLEARANCE
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Mucociliary Clearance",
bullets=[
"##Mucus Blanket - Two-Layer System",
"Periciliary layer (sol layer): aqueous, low viscosity - cilia move freely",
"Gel layer (mucous blanket): viscous upper layer - traps particles",
"Cilia tips have small hooks to engage viscous gel layer during propulsive stroke",
"##Ciliary Ultrastructure",
"9+2 axonemal structure: 9 outer doublet microtubules + 1 central pair",
"Outer pairs linked by nexin bridges; connected to inner pair by radial spokes",
"Inner & outer dynein arms: Mg2+-dependent ATPase - convert ATP to ADP",
"Sliding of outer doublets generates ciliary motion",
"##Ciliary Beat",
"Beat frequency: 7-16 Hz at body temperature (32-40°C range: constant frequency)",
"Propulsive (effective) stroke: cilium straightens, tip engages viscous layer",
"Recovery (preparatory) stroke: cilium bends in aqueous layer (power-saving)",
"Metachronous coordination: wave-like pattern propels mucus posteriorly",
"##Clearance Pathway",
"From anterior nose posteriorly - through middle meatus - around Eustachian orifice",
"Sinus mucus joins lateral nasal wall mucus at middle meatus (OMC)",
"Finally swallowed (not expectorated under normal conditions)",
],
col2_bullets=[
"##Factors Affecting Ciliary Function",
"Optimal temperature: 32-40°C (stops below 10°C and above 45°C)",
"Optimal pH: > 6.4, up to pH 8.5 (alkaline medium tolerated)",
"Isotonic saline preserves function",
"Hyperosmolar (>5% above) or hypoosmolar (>2% below) isotonic: ciliary paralysis",
"Dry conditions: stop ciliary action",
"Smoking: direct toxic damage, impairs beat, reduces frequency",
"URTI: cilia damaged by viruses - contributes to secondary bacterial infection",
"Potassium ions: affect only at non-physiological concentrations",
"##Clinical Conditions",
"Primary Ciliary Dyskinesia (PCD / Kartagener syndrome)",
"-- Absent dynein arms → immotile cilia → mucus stasis",
"-- Presents: recurrent sinusitis, bronchiectasis, otitis media",
"-- Situs inversus in 50% (Kartagener triad)",
"Cystic Fibrosis: abnormally thick mucus overwhelms normal cilia",
"Chronic Rhinosinusitis: impaired mucociliary clearance → perpetuates infection",
"##Tests",
"Saccharin clearance test: saccharin placed on anterior inferior turbinate",
"Normal: taste perceived in <30 min",
"Electron microscopy of biopsy: diagnose PCD",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 9 — OLFACTION
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Olfaction: Physiology of Smell",
bullets=[
"##Olfactory Epithelium",
"Located: superior conchae, nasal roof (cribriform plate region)",
"Pseudostratified epithelium - thicker than respiratory epithelium",
"Cell types: olfactory receptor cells, sustentacular (supporting) cells, basal cells",
"Bowman's glands: serous secretion dissolves odorant molecules",
"##Olfactory Receptor Neurons (ORN)",
"Bipolar neurons with a single thin dendrite ending in a knob",
"Olfactory cilia extend from the knob (6-8 per neuron) bearing G-protein-coupled receptors",
"~400 functional olfactory receptor genes in humans",
"One olfactory receptor type per neuron",
"##Signal Transduction",
"Odorant binds receptor → Gs protein → adenylyl cyclase → cAMP ↑",
"cAMP opens cyclic nucleotide-gated (CNG) channels → Na+/Ca2+ influx",
"Depolarization → action potential in CN I fibers",
"##Neural Pathway",
"ORN axons (CN I) → cribriform plate → olfactory bulb (glomeruli)",
"Olfactory bulb → olfactory tract → primary olfactory cortex (piriform cortex)",
"Connections to: amygdala, entorhinal cortex, orbitofrontal cortex, hypothalamus",
"Only special sense NOT relayed through thalamus first (direct cortical access)",
"##Regeneration",
"ORNs are among the few neurons capable of regeneration (replaced by basal cells)",
"Supporting cells release neurotrophic factors stimulating new ORN genesis",
],
col2_bullets=[
"##Types of Olfactory Loss",
"Anosmia: complete loss of smell",
"Hyposmia: diminished smell",
"Hyperosmia: heightened sensitivity",
"Dysosmia / Parosmia: distorted smell",
"Phantosmia: smell without stimulus",
"##Causes of Anosmia",
"Conductive: nasal obstruction, polyps, CRS (blockage of odorant access)",
"Sensorineural: URTI (post-viral), head injury, neurodegenerative (Alzheimer's)",
"Post-viral: SARS-CoV-2 infects supporting cells → ORN damage",
"-- Virus binds/depletes sustentacular cells",
"-- ORNs not directly infected but suffer secondary damage",
"Toxic/drug: methotrexate, intranasal cocaine",
"Cribriform plate fracture: shearing of CN I filaments",
"##Testing Olfaction",
"Sniffin' Sticks: threshold, discrimination, identification (TDI score)",
"UPSIT (University of Pennsylvania Smell Identification Test)",
"Connecticut Chemosensory Clinical Research Center (CCCRC) test",
"MRI: olfactory bulb volume (reduced in PD, Alzheimer's)",
"##Clinical Pearl",
"Olfactory dysfunction may be earliest sign of Parkinson's disease",
"Post-COVID hyposmia: most cases recover within weeks-months",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 10 — NASAL REFLEXES & IMMUNE FUNCTION
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Nasal Reflexes & Immunological Functions",
bullets=[
"##Nasal Reflexes",
"Nasobronchial reflex: nasal irritation → bronchoconstriction (nasonasal & nasopulmonary)",
"Sneezing reflex: irritant → afferent V1/V2 → brainstem → efferent forced expiration",
"Diving reflex: cold water on face → apnea, bradycardia, peripheral vasoconstriction",
"Nasocardiac reflex: pressure on nasal mucosa → vagal bradycardia (anesthesia concern)",
"##Immunological Role",
"Nasal mucosa: first line of adaptive and innate immune defence",
"IgA secreted into nasal mucus - neutralizes pathogens",
"Nasal-associated lymphoid tissue (NALT): equivalent of Waldeyer's ring",
"Mast cells, eosinophils, dendritic cells in lamina propria",
"Nasal mucosa: site of allergic sensitization (IgE-mediated Type I hypersensitivity)",
"##Nasal Nitric Oxide",
"Paranasal sinuses are major source of nasal nitric oxide (NO)",
"NO: bacteriostatic, antifungal, vasodilator",
"Nasal NO used diagnostically: LOW in Primary Ciliary Dyskinesia",
"##Nasal Secretions",
"~1 L/day total produced; mostly reabsorbed or swallowed",
"Lysozyme, lactoferrin, IgA, defensins in nasal secretions",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 11 — PARANASAL SINUSES: ANATOMY & OMC
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Paranasal Sinuses: Anatomy & Osteomeatal Complex",
bullets=[
"##Maxillary Sinus (largest)",
"Volume: ~15 mL; floor = alveolar process; roof = orbital floor",
"Ostium: medial wall - opens into middle meatus via ethmoid infundibulum",
"Accessory ostia common; ostium positioned superiorly (poor gravity drainage)",
"##Frontal Sinus",
"Drains via nasofrontal duct → frontal recess → middle meatus",
"Variable size; absent in 5%, may be unilateral; has inner table and outer table",
"##Ethmoid Sinuses",
"Anterior ethmoid (agger nasi, uncinate, ethmoid bulla): drain to middle meatus",
"Posterior ethmoid: drains to superior meatus",
"Paper-thin lamina papyracea separates ethmoid from orbit",
"##Sphenoid Sinus",
"Drains via sphenoethmoidal recess → posterior nasal cavity",
"Surrounded by: optic nerve, ICA, pituitary, CN III-VI (clinically significant)",
"##Osteomeatal Complex (OMC)",
"Functional unit draining frontal, anterior ethmoid, maxillary sinuses",
"Components: uncinate process, ethmoid infundibulum, hiatus semilunaris, ethmoid bulla",
"Blockage of OMC: central event in chronic rhinosinusitis",
"FESS targets OMC to restore drainage and ventilation",
],
col2_bullets=[
"##Development of PNS",
"Maxillary: present at birth, reaches adult size by 18-20 years",
"Ethmoid: present at birth (air cells visible on X-ray by age 2)",
"Frontal: begins at age 2, pneumatizes up to age 12-20",
"Sphenoid: begins age 3, complete by early teens",
"##Why Sinuses Develop?",
"Reduce skull weight (lighter cranium without compromising strength)",
"Increase nasal mucosal surface area for humidification/conditioning",
"Vocal resonance (debated - sinuses contribute minimally)",
"Mucosal reserve and immune surveillance",
"Insulation of brain from thermal extremes",
"Shock absorption in facial trauma (crumple zones)",
"##Clinical Anatomy",
"Maxillary sinus roof: infraorbital nerve runs through it",
"Dental roots of 1st and 2nd molars may project into sinus floor",
"Frontal sinus drainage disrupted by agger nasi cells (anterior ethmoid variant)",
"Onodi cell: posterior ethmoid adjacent to optic nerve - surgical hazard",
"Haller cell: infra-orbital ethmoid cell - narrows maxillary infundibulum",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 12 — PNS PHYSIOLOGY: FUNCTIONS
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Physiology of Paranasal Sinuses",
bullets=[
"##Mucociliary Drainage from Sinuses",
"Sinus mucosa lined with ciliated pseudostratified columnar epithelium",
"Ciliary beat directed toward natural ostium (NOT toward dependent wall)",
"Mucus transported in a spiral pattern to the ostium, regardless of head position",
"Maxillary sinus: mucus ascends to superior ostium against gravity",
"Blocked ostium = stasis = secondary infection = CRS",
"##Sinus Ventilation & Pressure",
"Normal sinuses are aerated - air freely exchanges with nasal cavity",
"Sinus mucosa reabsorbs O2 slightly faster than it is replaced (slight negative pressure)",
"Obstruction → negative pressure → barotrauma → mucosal edema (vicious cycle)",
"Aerosinusitis: pain during aircraft descent (rapid pressure changes)",
"##Nitric Oxide Production",
"Paranasal sinuses produce the highest nasal NO concentrations",
"NO diffuses into nasal airstream during breathing",
"Functions: microbicidal, ciliostimulatory, vasodilatory",
"Nasal NO measurement: screening tool for PCD (<77 ppb = abnormal)",
"##Immune Functions",
"Sinus mucosa: IgA secretion, mucosal mast cells, subepithelial lymphocytes",
"Sinuses warm and humidify air reaching the lower respiratory tract",
"##Nasal NO Values",
"Normal nasal NO: 77-2000 ppb",
"PCD: < 77 ppb (very low - defect in mucociliary-dependent clearance)",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 13 — CRS & MUCOCILIARY DYSFUNCTION (Clinical Correlate)
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Clinical Correlates: Chronic Rhinosinusitis (CRS)",
bullets=[
"##Pathophysiology",
"Trigger: viral URTI → mucosal edema → OMC obstruction → stasis",
"Reduced pO2 in sinuses → impairs ciliary function further",
"Bacterial colonization: Strep. pneumoniae, H. influenzae, S. aureus",
"Chronic inflammation → mucosal thickening → polyp formation",
"##Mucociliary Component",
"CRS patients: reduced ciliary beat frequency",
"Mucus composition altered: thicker, more viscous (CF-like picture in severe CRS)",
"Delayed saccharin clearance test",
"Secondary PCD-like appearance on electron microscopy (reversible with treatment)",
"##Nasal Polyps",
"Type 2 eosinophilic inflammation dominates in CRS with nasal polyps (CRSwNP)",
"IL-5, IL-13, eotaxin-driven eosinophilia",
"Superantigen hypothesis: S. aureus enterotoxins stimulate massive IgE response",
"##Treatment Rationale Based on Physiology",
"Topical nasal steroids: reduce mucosal edema → open OMC → restore drainage",
"Nasal saline irrigation: directly improves mucociliary clearance",
"FESS: surgically widens OMC → restores aeration and drainage",
"Biologics (dupilumab, mepolizumab): target IL-4R/IL-13/IL-5 in refractory CRSwNP",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 14 — NASAL VALVE & SEPTAL DEVIATION (Clinical Correlate)
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "Clinical Correlates: Nasal Valve, Septal Deviation & Turbinate Hypertrophy",
bullets=[
"##Turbinate Hypertrophy",
"Mucosal type: bilateral, responsive to decongestants (allergic / vasomotor rhinitis)",
"Bony type: unilateral, unresponsive to decongestants - compensatory hypertrophy",
"Compensatory hypertrophy: turbinate enlarges to fill space opened by septal deviation",
"Correcting septum without turbinate: obstruction persists on contralateral side",
"Treatment: antihistamines, topical steroids; turbinoplasty if unresponsive",
"##Internal Nasal Valve",
"Most common site of fixed nasal obstruction",
"Area < 0.4 cm2 = significant obstruction",
"Spreader grafts: widen the internal valve angle (open rhinoplasty approach)",
"##External Nasal Valve",
"Collapsible alar cartilage (LLC) - dynamic collapse on inspiration",
"Treated with: lateral crural strut grafts, alar batten grafts",
"##Paradoxical Nasal Obstruction (recap)",
"Deviated septum → fixed obstruction on deviated side",
"Nasal cycle turgescence on open side → perceived as obstruction on normal side",
"Patient complains of obstruction contralateral to anatomic deviation",
"##Objective Measurement",
"Acoustic rhinometry: maps cross-sectional area at nasal valve + turbinate level",
"Rhinomanometry: measures resistance before and after decongestion",
"Normal combined resistance: < 3 cm H2O/L/s",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 15 — SUMMARY TABLE
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
# Background + header
add_rect(slide, 0, 0, 13.333, 7.5, LIGHT_GRAY)
add_rect(slide, 0, 0, 13.333, 1.1, NAVY)
add_rect(slide, 0, 1.1, 13.333, 0.06, TEAL)
add_text(slide, "Summary: Functions of the Nose & Paranasal Sinuses",
0.3, 0.08, 12.5, 0.95, font_size=26, bold=True, color=WHITE,
align=PP_ALIGN.LEFT, anchor=MSO_ANCHOR.MIDDLE)
# Table data
rows = [
("Function", "Structure", "Mechanism", "Clinical Relevance"),
("Airflow", "Nasal valve + turbinates", "Ohm's law; 10-15° valve angle", "Septal deviation, turbinate Hx"),
("Warming", "Turbinate blood vessels", "Countercurrent heat exchange", "Atrophic rhinitis, ENL"),
("Humidification", "Nasal glands + mucosa", "~1 L/day fluid produced", "Dry environments, smokers"),
("Filtration", "Vibrissae + mucus blanket", "Impaction of particles in mucus", "Mucociliary dysfunction, PCD"),
("Mucociliary", "Ciliated epithelium", "9+2 axoneme, 7-16 Hz beat", "CRS, PCD, cystic fibrosis"),
("Olfaction", "Olfactory epithelium", "G-protein coupled ORN / cAMP", "Post-viral, PD, head trauma"),
("Immunity", "NALT, IgA, mast cells", "Innate + adaptive first-line", "Allergic rhinitis, CRS"),
("NO production", "Paranasal sinuses", "High conc; microbicidal", "Low NO in PCD (diagnostic)"),
("Sinus drainage", "OMC + ciliated mucosa", "Spiral mucociliary to ostium", "CRS, OMC blockage, FESS"),
("Vocal resonance", "Sinuses (minor role)", "Air-filled resonance cavities", "Sinonasal voice change"),
("Skull lightening", "Pneumatized sinuses", "Replace bone with air", "Sinus aplasia variants"),
]
# Table dimensions
col_widths = [2.2, 2.8, 3.8, 3.8]
col_xs = [0.15, 2.35, 5.15, 8.95]
row_h = 0.44
start_y = 1.2
for ri, row in enumerate(rows):
for ci, cell in enumerate(row):
is_header = (ri == 0)
bg = NAVY if is_header else (LIGHT_TEAL if ri % 2 == 0 else WHITE)
fc = WHITE if is_header else DARK_GRAY
add_rect(slide, col_xs[ci], start_y + ri * row_h,
col_widths[ci] - 0.05, row_h - 0.02, bg)
add_text(slide, cell,
col_xs[ci] + 0.05, start_y + ri * row_h + 0.02,
col_widths[ci] - 0.1, row_h - 0.04,
font_size=10.5 if not is_header else 11.5,
bold=is_header, color=fc,
align=PP_ALIGN.LEFT, wrap=True,
anchor=MSO_ANCHOR.MIDDLE)
add_rect(slide, 0, 7.25, 13.333, 0.25, NAVY)
add_text(slide, "Physiology of Nose & PNS | Postgraduate ENT", 0.2, 7.26, 10, 0.22,
font_size=9, color=RGBColor(0xBB, 0xCC, 0xDD), align=PP_ALIGN.LEFT)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 16 — EXAM TIPS & KEY POINTS
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "High-Yield Exam Points",
header_color=RGBColor(0x1E, 0x5C, 0x3A), # dark green
accent=RGBColor(0x2E, 0xA8, 0x5A),
bullets=[
"##Nasal Valve",
"Nasal valve angle = 10-15° between ULC and septum - NARROWEST part of airway",
"Resistance is inversely exponential to lumen area",
"##Nasal Cycle",
"80% of population; period ~2.5 hours; total resistance constant",
"Paradoxical nasal obstruction: obstruction felt on OPEN side",
"##Mucociliary",
"Ciliary ultrastructure: 9+2 axoneme; propulsive stroke in gel layer; recovery in sol layer",
"Beat frequency 7-16 Hz; stops below 10°C, above 45°C",
"PCD: absent dynein arms; Kartagener = PCD + situs inversus + bronchiectasis",
"Nasal NO < 77 ppb = diagnostic for PCD",
"##Olfaction",
"Only special sense bypassing thalamus (direct to piriform cortex)",
"Basal cells regenerate ORNs - unique capacity for neuronal regeneration",
"Post-viral anosmia: sustentacular cell damage (COVID-19 mechanism)",
"##PNS",
"Sinus mucus transported to natural ostium, not dependent wall (against gravity in maxillary)",
"OMC blockage = central pathology in CRS",
"Sphenoid sinus surrounded by optic nerve, ICA, pituitary, cavernous sinus",
"Onodi cell: posterior ethmoid adjacent to optic nerve - surgical danger zone",
])
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 17 — REFERENCES
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_bullet_slide(slide, "References",
header_color=RGBColor(0x3A, 0x3A, 0x3A),
bullets=[
"Flint PW et al. Cummings Otolaryngology: Head and Neck Surgery, 7th Ed. Elsevier, 2021",
"-- Chapter on Nasal Physiology: Resistance, Airflow, Nasal Cycle (pp. 568-573)",
"Scott-Brown's Otorhinolaryngology Head & Neck Surgery - Vol 1. CRC Press, 2018",
"-- Chapter: Nose, Mucociliary Clearance, Ciliary Ultrastructure, Smoking Effects",
"Ganong WR. Review of Medical Physiology, 26th Ed. McGraw-Hill, 2019",
"-- Chapter: Olfaction, Nasal Reflexes",
"Neuroscience: Exploring the Brain, 5th Ed. Bear, Connors, Paradiso. Wolters Kluwer, 2020",
"-- Chapter 8: Olfactory Receptor Neurons, Signal Transduction",
"Junqueira's Basic Histology, 17th Ed. McGraw-Hill, 2021",
"-- Olfactory Epithelium, Respiratory Epithelium",
"Fishman's Pulmonary Diseases and Disorders, 5th Ed. McGraw-Hill",
"-- Nasopharyngeal Airways, Mucociliary Clearance",
"Harrison's Principles of Internal Medicine, 22nd Ed. McGraw-Hill, 2025",
"-- Disorders of Olfaction",
"Fokkens WJ et al. EPOS 2020: European Position Paper on Rhinosinusitis. Rhinology 2020;58(S29)",
])
# ── Save ─────────────────────────────────────────────────────────────────────
out_path = "/tmp/workspace/nose-pns-ppt/Physiology_Nose_PNS_Postgraduate.pptx"
buf = BytesIO()
prs.save(buf)
with open(out_path, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out_path}")
print(f"Slides: {len(prs.slides)}")
cd /tmp/workspace/nose-pns-ppt && python build_ppt.py
ls -lh /tmp/workspace/nose-pns-ppt/Physiology_Nose_PNS_Postgraduate.pptx
Physiology Nose PNS Postgraduate
Presentation · PPTX
| Slide | Topic |
|---|---|
| 1 | Title slide with topic checklist |
| 2 | Why study nasal physiology? Overview |
| 3 | Surgical anatomy quick review (blood supply, nerve supply, turbinates, meati) |
| 4 | Nasal airflow dynamics & nasal valve (Ohm's law, valve angle, Venturi effect) |
| 5 | Regulation of nasal resistance (autonomic, erectile tissue, rhinometry) |
| 6 | Nasal cycle - Heetderks, 2.5 h period, paradoxical obstruction explained |
| 7 | Air conditioning - warming, humidification, filtration mechanisms |
| 8 | Mucociliary clearance - 9+2 axoneme, beat frequency, 2-layer mucus, PCD |
| 9 | Olfaction - ORN structure, cAMP signal transduction, neural pathway, anosmia |
| 10 | Nasal reflexes (nasobronchial, sneezing, nasocardiac) + immune function |
| 11 | PNS anatomy + OMC in detail; sinus development; Onodi cell, Haller cell |
| 12 | PNS physiology - mucociliary drainage, NO production, ventilation, pressure |
| 13 | CRS clinical correlate - pathophysiology, mucociliary link, treatment rationale |
| 14 | Nasal valve, septal deviation, turbinate hypertrophy - clinical applications |
| 15 | Master summary table (Function / Structure / Mechanism / Clinical relevance) |
| 16 | High-yield exam points - everything examiners love to ask |
| 17 | References (Cummings, Scott-Brown's, Ganong's, Harrison's, EPOS 2020) |