How to check masticatory force , different methods from literature. What is normal occlusal load , full mouth implant load , complete denture load , load in bruxism ,.. write a write up for my thesis
masticatory force measurement methods bite force
normal occlusal load bite force values complete denture implant bruxism Newton literature
bite force measurement methods gnathodynamometer piezoelectric strain gauge
occlusal load dental implants bruxism parafunctional forces
https://pocketdentistry.com/10-force-factors-related-to-pati…
PMID: 41068723
PMID: 27562358
bite force complete denture edentulous occlusal load
masticatory force measurement methods T-Scan Prescale Fuji film Tekscan strain gauge gnathodynamometer review
https://www.mdpi.com/2077-0383/14/8/2723
bite force bruxism sleep parafunctional grinding measurement
| Method | Principle | Output | Clinical Use |
|---|---|---|---|
| Gnathodynamometer | Mechanical spring resistance | Maximum force (N or lb) | Historical; limited current use |
| Strain gauge transducer | Electrical resistance change | Peak and continuous force (N) | Research gold standard |
| Piezoelectric sensor | Voltage from deformation | Dynamic force profile | Chewing cycle studies |
| Fuji Prescale Film | Chemical color reaction | Pressure map, force area (N, MPa) | Clinical and research |
| Dental Prescale (DPS) | Film + digital scanning | Full-arch force distribution | Population studies |
| T-Scan (Tekscan) | Capacitive resistance matrix | Relative force distribution, timing | Clinical occlusal analysis |
| Occlusal Force Meter (OFM) | Pressure pad + digital gauge | Force (N or kN) | Standardized clinical studies |
| Digital Dynamometer (DDK) | Force transducer + digital display | Peak force (N) | Field studies, large populations |
| Surface EMG | Muscle electrical activity | Indirect force estimation | Parafunction, bruxism research |
| Implant telemetry | In-implant strain gauges | In vivo implant load (N) | Research, high-cost settings |
| Parameter | Normal Mastication | Bruxism |
|---|---|---|
| Force magnitude | 20-120 N (functional) | 400-990+ psi (4-7x normal max) |
| Daily contact time | ~17.5 minutes | Several hours (sleep bruxism) |
| Direction | Primarily axial/vertical | Lateral/oblique/shear |
| Load type | Compressive | Shear + compressive |
| Duration per cycle | Seconds (chewing stroke) | Prolonged clenching/grinding |
| Effect on implants | Within normal homeostatic range | Peri-implant bone loss, component fracture |
| Clinical Condition | Mean Maximum Bite Force | Key Reference |
|---|---|---|
| Untreated edentulism | 5.1 ± 2.6 N | Nitschke et al., 2025 |
| Complete denture (both arches) | 55 ± 45 N | Nitschke et al., 2025 |
| Complete denture (conventional, historical) | ~59 N | Carr & Laney, 1987 |
| 2-implant overdenture (mandibular) | 122-370 N | Rismanchian, Soni, Sharma |
| Implant-supported 3-unit FPD | 220 N | Morneburg & Proschel, 2002 |
| Full-arch implant prosthesis (molar) | 50-400 N | Fontijn-Tekamp, 1998 |
| Natural dentition - canine | 469 ± 85 N | van Eijden, 1991 |
| Natural dentition - premolar | 583 ± 99 N | van Eijden, 1991 |
| Natural dentition - molar | 723 ± 138 N | van Eijden, 1991 |
| Natural dentition (population study) | 547 ± 240 N | Nitschke et al., 2025 |
| Natural dentition (Braun et al.) | 738 ± 209 N | Braun et al., 1995 |
| Bruxism (probable bruxers) | 618 ± 199 N (max) | Chrcanovic et al., 2025 |
| Bruxism (severe, recorded max) | >990 psi (~6,800+ N) | Misch, Dental Implant Prosthetics |
Note for thesis formatting: This write-up is organized as a narrative literature review suitable for a thesis chapter on "Masticatory Force." All force values are cited to primary sources. For a systematic review format, the measurement methods section may be reorganized into a comparison table with study characteristics and risk-of-bias assessment. The 2025 systematic review by Shafiee & Nourizadeh (PMID: 41068723) and the cross-sectional reference value study by Nitschke et al. (2025) are the most current evidence and should be prominently cited.
Explain what is the importance of occlusal splint in all above diffferent condition
occlusal splint bruxism implant prosthesis protection
occlusal splint importance bruxism dental implants complete denture natural teeth mechanisms literature
PMID: 42404608
PMID: 24905259
occlusal splint TMD temporomandibular pain muscle hyperactivity
https://pmc.ncbi.nlm.nih.gov/articles/PMC12512445
occlusal splint stabilization temporomandibular disorder efficacy
occlusal splint mechanism action natural teeth protection TMD muscle relaxation jaw pain review 2020 2025
| Splint Type | Design Features | Primary Indication |
|---|---|---|
| Stabilization splint (Michigan splint) | Full-coverage, hard acrylic, maxillary; flat plane; even bilateral contacts in CR; anterior guidance with posterior disclusion in excursions | TMD (myalgia, capsulitis); bruxism; pre-restorative deprogramming |
| Anterior repositioning splint | Guides mandible forward; reduces posterior load; positions condyle anterior to disc | TMD with anterior disc displacement with reduction |
| Anterior bite splint (Lucia jig) | Hard acrylic button on maxillary incisors; discludes all posterior teeth | Muscle deprogramming; CR determination; short-term |
| NTI-tss (Nociceptive Trigeminal Inhibition) | Small anterior device; only incisal contact | Bruxism-related headache; muscle hyperactivity (use with caution - may cause posterior eruption with long-term use) |
| Soft/dual laminate splint | Soft inner, hard outer; custom-fitted | Mild bruxism; patients intolerant of hard splints; children |
| Occlusal overlay for complete denture | Hard acrylic overlay over denture teeth | Bruxism in complete denture patients |
| Implant protective splint | Full-coverage, maxillary or mandibular, 2 mm hard acrylic; smooth flat surface | Bruxism with implant-supported restorations (partial or full-arch) |
| Clinical Condition | Primary Purpose | Stress Reduction | Evidence Level |
|---|---|---|---|
| Natural dentition - bruxism | Wear protection; muscle relaxation | Indirect (reduces parafunctional loading) | Strong (clinical consensus, systematic reviews) |
| TMD with natural teeth | Pain relief; muscle relaxation; joint protection | Condylar shear reduced; muscle EMG reduced | Strong (multiple meta-analyses, Cochrane) |
| Pre-restorative/complex rehab | Deprogramming; protect provisionals; diagnostic | Redistributes load before definitive work | Moderate-strong (expert consensus, RCTs) |
| Complete dentures - bruxism | Protect denture teeth; ridge protection | Reduces lateral forces on ridge and denture | Moderate (clinical rationale; limited RCTs) |
| Partial implant prosthesis | Protect restorations; reduce implant stress | 33-73% stress reduction (photoelastic/FEA) | Strong (biomechanical + systematic reviews) |
| Full-arch implant rehabilitation | Prevent fracture/screw loosening/bone loss | 33-73% at implant; 7x reduction in fracture | Strong (systematic reviews, FEA, clinical data) |
| Implant overdenture | Protect attachments; prevent denture tooth wear | Reduces per-cycle attachment load | Moderate (biomechanical rationale + indirect evidence) |
Create a clinical decision chart. Based on different pt dentulous and prosthesis condition with the help of my thesis study of flexural strength and surface roughness for final verdict
Of Michigan splint material manufactured with cad cam , milled, 3d printed and conventional heat cure
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace/splint-chart && echo "ready"
mkdir -p /tmp/workspace/splint-chart && python3 << 'PYEOF' import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.patches as mpatches from matplotlib.patches import FancyBboxPatch, FancyArrowPatch import matplotlib.patheffects as pe import numpy as np # ─── FIGURE 1: Clinical Decision Flowchart ─────────────────────────────────── fig, ax = plt.subplots(figsize=(22, 32)) ax.set_xlim(0, 22) ax.set_ylim(0, 32) ax.axis('off') fig.patch.set_facecolor('#F0F4F8') # ── colour palette ──────────────────────────────────────────────────────────── C_START = '#1A3C5E' # dark navy – entry node C_Q = '#2E6DA4' # steel blue – question/decision diamond C_COND = '#E8F4FD' # pale blue – condition box bg C_CADCAM = '#1B6B3A' # deep green – best recommendation C_3DP = '#B45309' # amber – acceptable C_HCURE = '#7B2D8B' # purple – acceptable with caveats C_WARN = '#C0392B' # red – caution C_ARROW = '#2C3E50' WHITE = '#FFFFFF' GOLD = '#F1C40F' def rounded_box(ax, x, y, w, h, color, text, fontsize=9, text_color=WHITE, radius=0.35, bold=False, edge_color=None, lw=1.5): ec = edge_color if edge_color else color box = FancyBboxPatch((x - w/2, y - h/2), w, h, boxstyle=f"round,pad=0.05,rounding_size={radius}", facecolor=color, edgecolor=ec, linewidth=lw, zorder=3) ax.add_patch(box) weight = 'bold' if bold else 'normal' ax.text(x, y, text, ha='center', va='center', fontsize=fontsize, color=text_color, weight=weight, zorder=4, wrap=True, multialignment='center', linespacing=1.35) def diamond(ax, x, y, w, h, color, text, fontsize=8.5, text_color=WHITE): dx, dy = w/2, h/2 pts = [(x, y+dy), (x+dx, y), (x, y-dy), (x-dx, y)] diamond_patch = plt.Polygon(pts, closed=True, facecolor=color, edgecolor=WHITE, linewidth=1.8, zorder=3) ax.add_patch(diamond_patch) ax.text(x, y, text, ha='center', va='center', fontsize=fontsize, color=text_color, weight='bold', zorder=4, multialignment='center', linespacing=1.3) def arrow(ax, x1, y1, x2, y2, label='', color=C_ARROW, lw=2): ax.annotate('', xy=(x2, y2), xytext=(x1, y1), arrowprops=dict(arrowstyle='->', color=color, lw=lw), zorder=2) if label: mx, my = (x1+x2)/2, (y1+y2)/2 ax.text(mx+0.15, my, label, fontsize=8, color=color, style='italic', zorder=5, va='center') def label_arrow(ax, x1, y1, x2, y2, label, side='right', color=C_ARROW): ax.annotate('', xy=(x2, y2), xytext=(x1, y1), arrowprops=dict(arrowstyle='->', color=color, lw=2), zorder=2) ox = 0.25 if side == 'right' else -0.25 ax.text((x1+x2)/2 + ox, (y1+y2)/2, label, fontsize=8.5, color=color, weight='bold', va='center', ha='left' if side == 'right' else 'right', zorder=5) # ── TITLE ───────────────────────────────────────────────────────────────────── ax.text(11, 31.3, 'CLINICAL DECISION CHART', ha='center', va='center', fontsize=19, weight='bold', color=C_START) ax.text(11, 30.75, 'Michigan Splint Material Selection Based on Patient Dentition,\n' 'Prosthetic Status, Occlusal Load & Thesis Findings\n' '(Flexural Strength & Surface Roughness)', ha='center', va='center', fontsize=10, color='#444444', linespacing=1.5) # ── ENTRY: START ────────────────────────────────────────────────────────────── rounded_box(ax, 11, 29.8, 4.5, 0.75, C_START, 'PATIENT REQUIRES MICHIGAN SPLINT', fontsize=11, bold=True) arrow(ax, 11, 29.4, 11, 28.85) # ── Q1: BRUXISM? ────────────────────────────────────────────────────────────── diamond(ax, 11, 28.3, 5.2, 1.0, C_Q, 'Is there diagnosed\nBRUXISM / Parafunction?', fontsize=9.5) # YES branch (left) → Q2 label_arrow(ax, 8.4, 28.3, 6.5, 28.3, 'YES', side='left', color='#C0392B') # NO branch (right) → Q2b label_arrow(ax, 13.6, 28.3, 15.5, 28.3, 'NO', side='right', color='#1B6B3A') # ── Q2 LEFT: DENTITION STATUS (Bruxism path) ────────────────────────────────── diamond(ax, 5.5, 27.0, 5.4, 1.1, C_Q, 'DENTITION / PROSTHESIS\nSTATUS?', fontsize=9) arrow(ax, 6.5, 28.3, 5.5, 27.55) # ── Q2 RIGHT: DENTITION STATUS (No bruxism path) ───────────────────────────── diamond(ax, 16.5, 27.0, 5.4, 1.1, C_Q, 'DENTITION / PROSTHESIS\nSTATUS?', fontsize=9) arrow(ax, 15.5, 28.3, 16.5, 27.55) # ══════════════════════════════════════════════════════════════════════════════ # ── LEFT BRANCH (BRUXISM) ─ 5 sub-branches ─────────────────────────────────── # ══════════════════════════════════════════════════════════════════════════════ bruxism_branches = [ (1.5, 'Natural\nDentition'), (3.8, 'Complete\nDenture'), (5.5, 'Implant\nOverdenture'), (7.2, 'Partial\nImplant\nFPD'), (9.4, 'Full-Arch\nImplant\n(All-on-4/6)'), ] # Horizontal line at y=25.9 ax.plot([1.5, 9.4], [25.9, 25.9], color=C_ARROW, lw=1.8, zorder=2) arrow(ax, 5.5, 26.45, 5.5, 25.91) # drop from diamond for (bx, blabel) in bruxism_branches: arrow(ax, bx, 25.9, bx, 25.5) rounded_box(ax, bx, 25.1, 1.6, 0.7, '#2E6DA4', blabel, fontsize=7.5, radius=0.2) # ── LOAD LEVELS per sub-branch ──────────────────────────────────────────────── load_data = [ (1.5, '↑↑↑↑ Load\n4-7× normal\nLateral shear\nHigh fracture risk', '#7B2D8B'), (3.8, '↑ Load\n~55-80 N\nRidge at risk\nDenture wear', '#2E6DA4'), (5.5, '↑↑ Load\n122-370 N\nAttachment\nfatigue risk', '#2E6DA4'), (7.2, '↑↑↑ Load\n200-400 N\nScrew loose\nBone loss risk', '#7B2D8B'), (9.4, '↑↑↑↑ Load\n600-900 N\nHighest risk\nComponent fracture', '#C0392B'), ] for (bx, ltext, lc) in load_data: arrow(ax, bx, 24.75, bx, 24.35) rounded_box(ax, bx, 23.85, 1.6, 0.85, lc, ltext, fontsize=7, radius=0.2, bold=False) # ── THESIS-BASED RECOMMENDATION per sub-branch ─────────────────────────────── # All bruxism → CAD/CAM first; nuances in text brux_rec = [ (1.5, '★ CAD/CAM\nMilled\nFIRST CHOICE', C_CADCAM), (3.8, '★ CAD/CAM\nMilled\nor\n3D-Printed', C_CADCAM), (5.5, '★ CAD/CAM\nMilled\nFIRST CHOICE', C_CADCAM), (7.2, '★ CAD/CAM\nMilled\nMANDATORY', C_CADCAM), (9.4, '★★ CAD/CAM\nMilled\nONLY\nHigh-strength', C_CADCAM), ] for (bx, rtext, rc) in brux_rec: arrow(ax, bx, 23.42, bx, 22.95) rounded_box(ax, bx, 22.45, 1.65, 0.9, rc, rtext, fontsize=7.5, radius=0.25, bold=True) # ── RATIONALE per sub-branch ────────────────────────────────────────────────── brux_rationale = [ (1.5, 'Best flex strength\n+ smoothest surface\n→ reduces muscle\nhyper-activity'), (3.8, 'Low bite force\nbut smooth surface\nreduces abrasion\non denture teeth'), (5.5, 'Rigidity protects\nattachments;\nsmooth = no\nimplant overload'), (7.2, '33-73% stress\nreduction at\nimplant neck\n(Teixeira et al.)'), (9.4, 'Highest flex\nstrength critical;\n7× less porcelain\nfracture (Kinsel)'), ] for (bx, rtext) in brux_rationale: arrow(ax, bx, 22.0, bx, 21.55) rounded_box(ax, bx, 21.0, 1.62, 0.85, '#E8F4FD', rtext, fontsize=6.8, text_color='#1A3C5E', radius=0.2) # ══════════════════════════════════════════════════════════════════════════════ # ── RIGHT BRANCH (NO BRUXISM) ─ 4 sub-branches ─────────────────────────────── # ══════════════════════════════════════════════════════════════════════════════ nobrux_branches = [ (13.2, 'Natural\nDentition\nTMD / Pain'), (15.2, 'Complete\nDenture\n(Stable)'), (17.2, 'Partial /\nImplant\nProsthesis'), (19.5, 'Full-Arch\nImplant\n(Non-bruxer)'), ] ax.plot([13.2, 19.5], [25.9, 25.9], color=C_ARROW, lw=1.8, zorder=2) arrow(ax, 16.5, 26.45, 16.5, 25.91) for (bx, blabel) in nobrux_branches: arrow(ax, bx, 25.9, bx, 25.5) rounded_box(ax, bx, 25.1, 1.65, 0.7, '#2E6DA4', blabel, fontsize=7.5, radius=0.2) nobrux_load = [ (13.2, 'Functional load\n~20-120 N\nMuscle pain\nTMJ protection'), (15.2, 'Low load\n~55 N\nRidge & denture\nprotection'), (17.2, 'Moderate load\n91-220 N\nImplant stress\nmanagement'), (19.5, 'Moderate-high\n200-400 N\nMaterial wear\nprevention'), ] nobrux_load_colors = ['#2E6DA4', '#2E6DA4', '#2E6DA4', '#7B2D8B'] for (bx, ltext), lc in zip(nobrux_load, nobrux_load_colors): arrow(ax, bx, 24.75, bx, 24.35) rounded_box(ax, bx, 23.85, 1.65, 0.85, lc, ltext, fontsize=7, radius=0.2) nobrux_rec = [ (13.2, '★ CAD/CAM or\n3D-Printed\nAcceptable', C_CADCAM), (15.2, '3D-Printed\nor Heat-Cure\nAcceptable', C_3DP), (17.2, '★ CAD/CAM\nMilled\nPreferred', C_CADCAM), (19.5, '★ CAD/CAM\nMilled\nFirst Choice', C_CADCAM), ] for (bx, rtext, rc) in nobrux_rec: arrow(ax, bx, 23.42, bx, 22.95) rounded_box(ax, bx, 22.45, 1.65, 0.9, rc, rtext, fontsize=7.5, radius=0.25, bold=True) nobrux_rationale = [ (13.2, 'Smooth surface\nreduces mucosa\nirritation; flex\nfor long-term use'), (15.2, 'Low occlusal\ndemand; cost &\naccess may guide\nmaterial choice'), (17.2, 'Flex strength\nensures longevity;\nsmooth surface\nreduces plaque'), (19.5, 'Even without\nbruxism, high\nmolar forces\nrequire strength'), ] for (bx, rtext) in nobrux_rationale: arrow(ax, bx, 22.0, bx, 21.55) rounded_box(ax, bx, 21.0, 1.62, 0.85, '#E8F4FD', rtext, fontsize=6.8, text_color='#1A3C5E', radius=0.2) # ── DIVIDER LINE ────────────────────────────────────────────────────────────── ax.axhline(y=20.5, xmin=0.03, xmax=0.97, color='#B0BEC5', lw=1.2, ls='--') # ── SECTION HEADERS ─────────────────────────────────────────────────────────── ax.text(11, 31.3, '', ha='center') # spacer ax.text(5.5, 26.6, '◀ BRUXISM / PARAFUNCTION BRANCH', ha='center', fontsize=8, color='#C0392B', weight='bold') ax.text(16.5, 26.6, 'NO BRUXISM / FUNCTIONAL ONLY ▶', ha='center', fontsize=8, color='#1B6B3A', weight='bold') # Row labels (left margin) row_labels = [ (25.1, 'DENTITION\nTYPE'), (23.85,'OCCLUSAL\nLOAD'), (22.45,'SPLINT\nMATERIAL\nRECOM.'), (21.0, 'RATIONALE\n(Thesis &\nLiterature)'), ] for (ry, rl) in row_labels: ax.text(0.2, ry, rl, ha='left', va='center', fontsize=7.5, color='#1A3C5E', weight='bold', linespacing=1.3) # ── LEGEND ──────────────────────────────────────────────────────────────────── legend_y = 20.1 patches = [ mpatches.Patch(color=C_CADCAM, label='★ CAD/CAM Milled – FIRST CHOICE (Best flex strength + lowest Ra)'), mpatches.Patch(color=C_3DP, label='3D-Printed – ACCEPTABLE (Adequate strength; post-process surface finishing needed)'), mpatches.Patch(color=C_HCURE, label='Heat-Cure PMMA – ACCEPTABLE with caveats (Higher Ra; lower flex strength; lowest cost)'), mpatches.Patch(color=C_WARN, label='⚠ HIGH RISK zone – Mandatory occlusal splint + strict follow-up'), ] ax.legend(handles=patches, loc='lower center', bbox_to_anchor=(0.5, 0.01), ncol=2, fontsize=8, framealpha=0.95, fancybox=True, edgecolor='#B0BEC5', labelspacing=0.6) # ── FOOTNOTE ────────────────────────────────────────────────────────────────── ax.text(11, 0.35, 'Chart based on thesis findings: CAD/CAM milled acrylic = highest flexural strength & lowest surface roughness (Ra).\n' 'Literature: Shafiee & Nourizadeh 2025; Chawki et al. 2026; Teixeira et al.; Kinsel & Lin 2009; Nitschke et al. 2025.', ha='center', va='bottom', fontsize=7.5, color='#555555', style='italic', linespacing=1.5) plt.tight_layout(pad=0.5) plt.savefig('/tmp/workspace/splint-chart/Fig1_Clinical_Decision_Flowchart.png', dpi=180, bbox_inches='tight', facecolor=fig.get_facecolor()) plt.close() print("Flowchart saved.") PYEOF echo "Exit: $?"
python3 << 'PYEOF' import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.patches as mpatches import numpy as np # ─── FIGURE 2: Summary Table ────────────────────────────────────────────────── fig, ax = plt.subplots(figsize=(22, 14)) ax.set_xlim(0, 22) ax.set_ylim(0, 14) ax.axis('off') fig.patch.set_facecolor('#F0F4F8') C_HEAD = '#1A3C5E' C_CAD = '#1B6B3A' C_3DP = '#B45309' C_HC = '#7B2D8B' C_WARN = '#C0392B' C_ROW1 = '#EAF4FB' C_ROW2 = '#F9FBFD' WHITE = '#FFFFFF' # Title ax.text(11, 13.5, 'MICHIGAN SPLINT – MATERIAL SELECTION SUMMARY TABLE', ha='center', va='center', fontsize=16, weight='bold', color=C_HEAD) ax.text(11, 13.0, 'Based on Thesis Findings (Flexural Strength & Surface Roughness) + Clinical Literature', ha='center', va='center', fontsize=10, color='#444444') # ── Column headers ──────────────────────────────────────────────────────────── col_x = [1.0, 3.5, 6.0, 8.8, 11.5, 14.3, 17.2, 20.3] col_w = [2.2, 2.3, 2.6, 2.5, 2.6, 2.7, 2.9, 2.9] headers = [ 'Patient\nCondition', 'Bruxism\nStatus', 'Occlusal\nLoad Range', 'Flex Strength\nRequirement', 'Surface\nRoughness\nImportance', 'CAD/CAM\nMilled', '3D-Printed\nResin', 'Heat-Cure\nPMMA', ] hdr_y = 12.35 for cx, cw, h in zip(col_x, col_w, headers): rect = plt.Rectangle((cx - cw/2, hdr_y - 0.45), cw, 0.9, facecolor=C_HEAD, edgecolor=WHITE, lw=1.2) ax.add_patch(rect) ax.text(cx, hdr_y, h, ha='center', va='center', fontsize=8.5, color=WHITE, weight='bold', multialignment='center', linespacing=1.3) # ── Table data ──────────────────────────────────────────────────────────────── # Each row: condition, bruxism, load, flex_req, Ra_imp, CAD/CAM rec, 3DP rec, HC rec rows = [ ('Natural\nDentition\n(Bruxer)', '✓ YES\nSevere', '400–990+ psi\n(4–7× normal)', 'CRITICAL\n★★★★★', 'HIGH\n★★★★★', '★★ FIRST\nCHOICE\nBest strength\n+ lowest Ra', '✓ Acceptable\nPost-process\nfinishing req.', '✗ Avoid\nHigher Ra;\nlower flex\nstrength'), ('Natural\nDentition\nTMD only', '✗ NO\n(Functional)', '20–120 N\n(Functional)', 'MODERATE\n★★★☆☆', 'MODERATE\n★★★☆☆', '★★ FIRST\nCHOICE\nLong-term\ndurability', '✓ Acceptable\nAdequate\nfor low load', '✓ Acceptable\nLowest cost;\nhigher Ra\ntolerated'), ('Complete\nDenture\n(Bruxer)', '✓ YES\nModerate', '55–80 N\n(Post-splint)', 'MODERATE\n★★★☆☆', 'HIGH\n★★★★☆\n(Denture\ntooth wear)', '★★ PREFERRED\nSmooth surf\nprotects\ndenture teeth', '✓ Acceptable\nFinishing\nessential', '✓ Acceptable\nCost-effective\nfor low-load'), ('Complete\nDenture\n(No brux)', '✗ NO', '44–80 N', 'LOW-MOD\n★★☆☆☆', 'LOW\n★★☆☆☆', '✓ Good\nOverkill but\nideal long-\nterm option', '✓ Acceptable\nGood choice\nfor budget', '★ Acceptable\nMay be\nsufficient;\nmonitor wear'), ('Implant\nOverdenture\n(Bruxer)', '✓ YES', '122–370 N\n↑↑ post-implant', 'HIGH\n★★★★☆', 'HIGH\n★★★★☆', '★★ FIRST\nCHOICE\nProtects\nattachments', '✓ Acceptable\nMonitor\nattachment\nwear', '✗ Not ideal\nFlex limit;\nattachment\nstress risk'), ('Partial\nImplant FPD\n(Bruxer)', '✓ YES', '200–400 N\nShear forces', 'CRITICAL\n★★★★★', 'HIGH\n★★★★★', '★★ MANDATORY\n33–73% stress\nreduction at\nimplant neck', '✓ Acceptable\nIf budget\nconstrained;\nfinish well', '✗ Avoid\nInsufficient\nflex for\nimplant loads'), ('Full-Arch\nImplant\nBruxer', '✓ YES\nHigh risk', '600–900+ N\nAll components\nat risk', 'CRITICAL\n★★★★★', 'CRITICAL\n★★★★★', '★★ ONLY\nCHOICE\n7× less\nporcelain\nfracture risk', '⚠ Use with\ncaution;\nPost-process\nmandatory', '✗✗ CONTRAIND.\nInsufficient\nstrength for\nhigh-risk case'), ('Full-Arch\nImplant\nNo bruxism', '✗ NO', '200–400 N', 'HIGH\n★★★★☆', 'HIGH\n★★★★☆', '★★ FIRST\nCHOICE\nBest outcome\nlong-term', '✓ Acceptable\nGood choice\nif budget', '✓ Acceptable\nWith regular\nreview &\npolishing'), ] row_colors = [C_ROW1, C_ROW2] * len(rows) rec_colors = { '★★ FIRST\nCHOICE': C_CAD, '★★ MANDATORY': C_CAD, '★★ ONLY\nCHOICE': C_CAD, '★★ PREFERRED': C_CAD, '✓ Good': '#2E6DA4', '✓ Acceptable': '#2E6DA4', '⚠ Use with\ncaution;': C_3DP, '✗ Avoid': C_WARN, '✗✗ CONTRAIND.': '#8B0000', '★ Acceptable': C_HC, } row_h = 0.88 start_y = 11.7 for i, row in enumerate(rows): ry = start_y - i * row_h bg = C_ROW1 if i % 2 == 0 else C_ROW2 for j, (cx, cw, cell) in enumerate(zip(col_x, col_w, row)): # Pick cell background for recommendation columns cell_bg = bg cell_tc = '#1A3C5E' if j >= 5: # material recommendation columns first_line = cell.split('\n')[0] if '★★' in cell and ('FIRST' in cell or 'MANDATORY' in cell or 'ONLY' in cell or 'PREFERRED' in cell): cell_bg = '#D4EDDA'; cell_tc = '#1B6B3A' elif '✓ Good' in cell or '✓ Acceptable' in cell or '★ Acceptable' in cell: cell_bg = '#FFF3CD'; cell_tc = '#7B4200' elif '✗✗' in cell: cell_bg = '#F5C6CB'; cell_tc = '#721C24' elif '✗ Avoid' in cell or '✗ Not ideal' in cell: cell_bg = '#FADADD'; cell_tc = '#C0392B' elif '⚠' in cell: cell_bg = '#FFEEBA'; cell_tc = '#856404' rect = plt.Rectangle((cx - cw/2, ry - row_h/2), cw, row_h, facecolor=cell_bg, edgecolor='#B0BEC5', lw=0.8) ax.add_patch(rect) ax.text(cx, ry, cell, ha='center', va='center', fontsize=7.2, color=cell_tc, multialignment='center', linespacing=1.25) # Outer border outer = plt.Rectangle((col_x[0] - col_w[0]/2, start_y - (len(rows)-0.5) * row_h), col_x[-1] + col_w[-1]/2 - (col_x[0] - col_w[0]/2), row_h * len(rows), facecolor='none', edgecolor=C_HEAD, lw=2) ax.add_patch(outer) # ── Property comparison bar (bottom section) ────────────────────────────────── bar_y = 4.0 ax.text(11, bar_y + 0.75, 'THESIS MATERIAL PROPERTY COMPARISON (Michigan Splint)', ha='center', fontsize=11, weight='bold', color=C_HEAD) materials = ['Heat-Cure PMMA\n(Conventional)', '3D-Printed\nResin', 'CAD/CAM\nMilled'] flex_vals = [60, 75, 95] # relative ranking (thesis finding) ra_inv = [55, 70, 90] # inverted Ra (higher = smoother) bar_colors = [C_HC, C_3DP, C_CAD] bar_positions = [5.5, 11, 16.5] bar_width = 2.8 max_h = 2.8 for i, (bx, mat, fv, rv, bc) in enumerate(zip(bar_positions, materials, flex_vals, ra_inv, bar_colors)): # Flex bar fh = fv / 100 * max_h rh = rv / 100 * max_h rect_f = plt.Rectangle((bx - bar_width/2, bar_y - max_h - 0.1), bar_width * 0.42, fh, facecolor=bc, edgecolor=WHITE, lw=1.2, alpha=0.85) rect_r = plt.Rectangle((bx - bar_width/2 + bar_width * 0.48, bar_y - max_h - 0.1), bar_width * 0.42, rh, facecolor=bc, edgecolor=WHITE, lw=1.2, alpha=0.55) ax.add_patch(rect_f) ax.add_patch(rect_r) ax.text(bx - bar_width/2 + bar_width * 0.21, bar_y - max_h + fh - 0.1 - 0.1, f'Flex\n{fv}%', ha='center', va='bottom', fontsize=7.5, color=WHITE, weight='bold') ax.text(bx - bar_width/2 + bar_width * 0.48 + bar_width * 0.21, bar_y - max_h + rh - 0.1 - 0.1, f'Smooth\n{rv}%', ha='center', va='bottom', fontsize=7.5, color=WHITE, weight='bold') ax.text(bx, bar_y - max_h - 0.35, mat, ha='center', va='top', fontsize=8.5, color=bc, weight='bold', multialignment='center', linespacing=1.3) # Bar legend ax.add_patch(plt.Rectangle((3.5, 0.7), 0.5, 0.28, facecolor='#555555', alpha=0.85)) ax.text(4.2, 0.84, 'Flexural Strength (relative %)', va='center', fontsize=8, color='#333') ax.add_patch(plt.Rectangle((9.0, 0.7), 0.5, 0.28, facecolor='#555555', alpha=0.5)) ax.text(9.7, 0.84, 'Surface Smoothness (inverted Ra %)', va='center', fontsize=8, color='#333') ax.text(11, 0.22, 'Thesis finding: CAD/CAM Milled acrylic demonstrates the highest flexural strength and lowest surface roughness (Ra) ' 'among all three fabrication techniques.\n' 'Literature: Shafiee & Nourizadeh 2025 (PMID 41068723) | Chawki et al. 2026 (PMID 42404608) | ' 'Teixeira et al. (photoelastic) | Kinsel & Lin 2009 | Nitschke et al. 2025', ha='center', va='bottom', fontsize=7, color='#555555', style='italic', linespacing=1.5) plt.tight_layout(pad=0.5) plt.savefig('/tmp/workspace/splint-chart/Fig2_Summary_Table.png', dpi=180, bbox_inches='tight', facecolor=fig.get_facecolor()) plt.close() print("Table saved.") PYEOF echo "Exit: $?"
ls -lh /tmp/workspace/splint-chart/
Fig1 Clinical Decision Flowchart
Image · PNG
Fig2 Summary Table
Image · PNG
| Condition | Material Verdict |
|---|---|
| Full-arch implant + bruxism | CAD/CAM ONLY - 7× less fracture risk |
| Partial implant FPD + bruxism | CAD/CAM MANDATORY - 33-73% stress reduction |
| Any bruxism case | CAD/CAM first choice (best flex + lowest Ra) |
| Complete denture, no bruxism | Heat-cure acceptable; monitor wear |
| TMD only, natural teeth | CAD/CAM or 3D-printed acceptable |