The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

tooth is an R package for dental public health research. It computes standardised caries indices and produces publication-ready odontogram heatmaps from clinical examination data.
An odontogram is a whole-mouth dental chart that arranges every tooth in its anatomical position across the four quadrants. tooth renders each tooth as a five-surface crown diagram with optional root-surface bars, then maps your surface values onto a colour gradient — so caries patterns, treatment outcomes, or any per-tooth-surface metric are visible at a glance across the whole arch.
| Abbreviation | Surface | Description |
|---|---|---|
| B | Buccal | Cheek-facing surface |
| L | Lingual | Tongue-facing surface |
| M | Mesial | Forward-facing interproximal surface |
| D | Distal | Backward-facing interproximal surface |
| O | Occlusal | Biting/chewing surface |
| Abbreviation | Surface | Description |
|---|---|---|
| RB | Root-Buccal | Root surface on the cheek side |
| RL | Root-Lingual | Root surface on the tongue side |
| RM | Root-Mesial | Root surface on the mesial side |
| RD | Root-Distal | Root surface on the distal side |
Dental epidemiological studies routinely compute DMFT/DMFS indices and visualise caries distributions, yet there is no dedicated R package for these tasks. Researchers write ad-hoc scripts with hardcoded ICDAS thresholds and manual ggplot layouts for every new project. tooth replaces those one-off scripts with tested, documented, flexible functions that work across study designs — primary or permanent dentition, 5 to 8 teeth per quadrant, coronal and root caries, long or wide data formats.
RDT, RDS) independently from coronal
indicesmin_val/max_val for consistent colour scales
across multiple plotsshow_labels = FALSE for clean exportstooth_label_size for readabilitystrata_labels
to rename panel headingsfootnote# From GitHub
devtools::install_github("ddmsel/tooth")
# From local tarball
install.packages("tooth_0.5.0.tar.gz", repos = NULL, type = "source")Each tooth is a five-wedge crown (B, L, M, D, O) with optional root bars (RB, RL), labelled by surface and coloured by value.

build_odontogram(
data = decay_data,
teeth_per_quadrant = 7,
surfaces = c("buc", "lin", "mes", "dis", "occ")
)
build_odontogram(
data = decay_data,
surfaces = c("buc", "lin", "mes", "dis", "occ", "rootb", "rootl")
)
stats_df <- data.frame(
treatment = c("SDF", "ART"),
n = c(120, 115),
mean_DT = c(2.3, 2.8),
mean_DMFT = c(5.1, 5.6)
)
build_odontogram(
data = decay_by_trt,
strata = "treatment",
stats = stats_df,
footnote = "B=Buccal, L=Lingual, M=Mesial, D=Distal, O=Occlusal.\n* p<0.05, ** p<0.01, *** p<0.001."
)
build_odontogram(data = decay_data, numbering = "fdi")
build_odontogram(data = decay_data, show_labels = FALSE)
library(tooth)
data(sim_exam)
# Basic DMFT
dmft <- calc_dmft(sim_exam)
# With stratification
dmft <- calc_dmft(sim_exam, strata = "treatment")
# Separate root caries
dmft <- calc_dmft(sim_exam, root_lesion_col = "lesion_code")
# Returns DT (coronal) + RDT (root) separatelybuild_odontogram(
data = decay_data,
value_col = "prop",
teeth_per_quadrant = 7,
title = "Caries Distribution",
surfaces = c("buc", "lin", "mes", "dis", "occ"),
show_labels = TRUE,
tooth_label_size = 3,
numbering = "fdi",
min_val = 0, max_val = 0.5,
strata = "treatment",
strata_labels = c("1" = "SDF", "2" = "ART + FV"),
stats = stats_df,
stats_test = "wilcox",
stats_var = "mean_DMFT",
stats_raw = raw_patient_data,
footnote = paste0(
"B=Buccal, L=Lingual, M=Mesial, D=Distal, O=Occlusal.\n",
"* p<0.05, ** p<0.01, *** p<0.001 (Wilcoxon rank-sum test)."
)
)tooth_convert("11", from = "fdi", to = "quadrant")
#> "ur1"
tooth_convert("ur1", from = "quadrant", to = "fdi")
#> "11"| Function | Description |
|---|---|
build_odontogram() |
Full-arch heatmap with stratification, stats, numbering |
draw_tooth() |
Single tooth polygon geometry (up to 9 surfaces) |
calc_dmft() |
DMFT/dmft with root/coronal separation |
calc_dmfs() |
DMFS/dmfs with root/coronal separation |
pivot_to_long() |
Wide → long format converter |
tooth_config() |
Arch layout configuration |
tooth_convert() |
FDI ↔︎ Universal ↔︎ quadrant numbering |
David Selvaraj, MBA, PhD — author, maintainer Department of Community Dentistry, Case Western Reserve University School of Dental Medicine, Cleveland, OH. dms256@case.edu · ORCID: 0000-0003-4055-9493
Suchitra Nelson, PhD — author Department of Community Dentistry, Case Western Reserve University School of Dental Medicine, Cleveland, OH; and Department of Population and Quantitative Health Sciences, Case Western Reserve University School of Medicine, Cleveland, OH.
If you use tooth in published research, please cite:
Selvaraj D, Nelson S (2026). tooth: Dental Public Health Indices and
Odontogram Visualizations. R package version 0.5.0.
https://github.com/ddmsel/tooth
MIT
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.