Need ppt on physiology of nose and PNS for post graduates

Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Finding Sources
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Running Command

mkdir -p /tmp/workspace/nose-pns-ppt

Writing File

~/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)}")
Running Command

cd /tmp/workspace/nose-pns-ppt && python build_ppt.py

Running Command

ls -lh /tmp/workspace/nose-pns-ppt/Physiology_Nose_PNS_Postgraduate.pptx

Your presentation is ready! Download it here:

Physiology Nose PNS Postgraduate

Presentation · PPTX


What's inside - 17 slides, postgraduate-level content

SlideTopic
1Title slide with topic checklist
2Why study nasal physiology? Overview
3Surgical anatomy quick review (blood supply, nerve supply, turbinates, meati)
4Nasal airflow dynamics & nasal valve (Ohm's law, valve angle, Venturi effect)
5Regulation of nasal resistance (autonomic, erectile tissue, rhinometry)
6Nasal cycle - Heetderks, 2.5 h period, paradoxical obstruction explained
7Air conditioning - warming, humidification, filtration mechanisms
8Mucociliary clearance - 9+2 axoneme, beat frequency, 2-layer mucus, PCD
9Olfaction - ORN structure, cAMP signal transduction, neural pathway, anosmia
10Nasal reflexes (nasobronchial, sneezing, nasocardiac) + immune function
11PNS anatomy + OMC in detail; sinus development; Onodi cell, Haller cell
12PNS physiology - mucociliary drainage, NO production, ventilation, pressure
13CRS clinical correlate - pathophysiology, mucociliary link, treatment rationale
14Nasal valve, septal deviation, turbinate hypertrophy - clinical applications
15Master summary table (Function / Structure / Mechanism / Clinical relevance)
16High-yield exam points - everything examiners love to ask
17References (Cummings, Scott-Brown's, Ganong's, Harrison's, EPOS 2020)

Sources used: Cummings Otolaryngology 7e, Scott-Brown's ORL Vol 1, Ganong's Review of Medical Physiology, Neuroscience Exploring the Brain 5e, Junqueira's Histology, Harrison's 22e, Fishman's Pulmonary Diseases - all from the authoritative medical library.
This is a shared conversation. Sign in to Orris to start your own chat.