Open-source desktop tool for tree-ring cross-dating, measurement, and master chronology building.
Project description
Fritts — Dendrochronology Analysis Platform
An open-source desktop tool for tree-ring cross-dating, measurement, and master chronology building. Built with Python, PyQt6, and PyQtGraph. Named in honor of Harold C. Fritts, a pioneer of dendroclimatology.
Table of Contents
- Why Fritts?
- Features
- Installation
- Usage
- ITRDB Integration
- Supported Formats
- Project Structure
- Development
- User Guide
- Target Users
- Tech Stack
- License
Why Fritts?
Existing dendrochronology software is often dated, proprietary, Windows-only, or splits critical workflows across multiple applications. Fritts unifies format parsing, interactive visual plotting, statistical cross-dating, and chronology building into a single, modern, cross-platform interface.
Features
- Multi-format import — Tucson (.rwl/.tuc), Heidelberg (.fh), TRiDaS XML
- Interactive plotting — PyQtGraph-powered canvas with smooth zoom, pan, and multi-series overlay
- Statistical cross-dating — Baillie-Pilcher t-value, Hollstein t-value, Gleichläufigkeit (GLK) with Buras-Wilmking 2015 correction
- AI Image Segmentation — DeepCS-TRD stub for automatic boundary detection
- Regional Curve Standardisation (RCS) — Advanced cambial-age detrending
- COFECHA-Style Quality Control — Sliding correlation reports for finding dating errors
- Interactive Chronology Builder — Real-time EPS and R-bar metrics while building your master curve
- Geometric Pith Estimator — Visual tool to estimate missing distances to the pith
- Standard export — Write to .rwl, .xml, and automatically generate R scripts (
dplR) - ITRDB Search — Search and download tree-ring data directly from the NOAA International Tree-Ring Data Bank
Installation
# Clone the repository
git clone https://github.com/mabo-du/fritts.git
cd fritts
# Create a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
# Install in development mode
pip install -e ".[dev]"
Dependencies
| Package | Minimum Version | Purpose |
|---|---|---|
| PyQt6 | 6.6 | GUI framework |
| pyqtgraph | 0.13 | Interactive plotting |
| pandas | 2.1 | Data manipulation |
| numpy | 1.26 | Numerical computation |
| scipy | 1.12 | Statistical algorithms |
| lxml | 5.0 | XML parsing (TRiDaS format) |
| torch | 2.2 | AI image segmentation (stub) |
| torchvision | 0.17 | AI image segmentation (stub) |
Usage
# Launch the application
fritts
# Or run directly
python -m dendro.main
Quick Start
- Launch Fritts from the command line.
- Import ring-width data via File > Import (supports .rwl, .tuc, .fh, .xml).
- Visualize your series in the interactive plot panel.
- Run cross-dating analysis using Tools > Cross-Date.
- Build a master chronology via Tools > Build Chronology.
- Export results through File > Export.
ITRDB Data Search
- Open Tools > Search ITRDB.
- Enter a search term (e.g., "oak", "colorado", "douglas fir").
- Browse results and download matching .rwl series directly.
- Imported data is immediately available for analysis.
ITRDB Integration
Fritts connects to the NOAA International Tree-Ring Data Bank (ITRDB) API to search and download tree-ring measurement series directly.
Supported API features:
- Keyword search across all published ITRDB studies
- Automatic detection of .rwl download URLs
- Direct import of series into the analysis workspace
- Graceful handling of missing metadata and network errors
API endpoint: https://www.ncei.noaa.gov/access/paleo-search/study/search.json
Supported Formats
| Format | Extensions | Read | Write |
|---|---|---|---|
| Tucson Decadal | .rwl, .tuc, .crn | ✅ | ✅ |
| Heidelberg | .fh | ✅ | — |
| TRiDaS | .xml | ✅ | ✅ |
Project Structure
fritts/
├── assets/ # Static assets (screenshots, icons)
├── docs/ # Documentation
│ ├── USER_GUIDE.md # End-user documentation
│ ├── scope.md # Project scope and roadmap
│ ├── research-papers/ # Reference papers
│ └── research-prompts/#
├── src/
│ └── dendro/
│ ├── io/ # Format parsers (Tucson, Heidelberg, TRiDaS, ITRDB)
│ ├── models/ # Data models (RingWidthSeries, etc.)
│ ├── stats/ # Statistical algorithms
│ ├── ui/ # PyQt6 interface components
│ └── main.py # Application entry point
├── tests/ # Test suite (pytest)
├── pyproject.toml # Build configuration
└── README.md
Development
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
ruff check src/
# Format code
ruff format src/
Contributing
- Fork the repository on GitHub or GitLab.
- Create a feature branch from
master. - Make your changes with tests.
- Run the full test suite:
pytest. - Submit a merge request / pull request.
User Guide
See docs/USER_GUIDE.md for comprehensive documentation including:
- Installation troubleshooting
- Importing and exporting data
- Cross-dating workflows
- Chronology building
- ITRDB data search
- Interpreting statistical results
Known Issues
NOAA ITRDB API limit
The ITRDB search API returns HTTP 500 errors when the limit parameter is 46 or higher. Fritts defaults to limit=30 to avoid this. If you need more results, run multiple searches with different keywords.
pyqtgraph version
Fritts requires pyqtgraph>=0.13,<0.14. Version 0.14 removed a method that pyqtgraph's own internal plotting code still calls, causing AttributeError spam on plot interactions. This is pinned in pyproject.toml.
Target Users
- Dendrochronologists dating archaeological timbers
- Climate researchers building proxy records from tree rings
- Wood specialists in archaeology and heritage
Tech Stack
- GUI: PyQt6
- Visualization: PyQtGraph (75–150× faster than Matplotlib for interactive use)
- Data: Pandas, NumPy, SciPy
- AI: PyTorch
- XML: lxml
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fritts-0.1.1.tar.gz.
File metadata
- Download URL: fritts-0.1.1.tar.gz
- Upload date:
- Size: 61.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
049332d6bb0874ae873092eebf3eb6c35778d60bf1f8fdb6fa55934d6efcb05f
|
|
| MD5 |
ad95e78f0f7f4254d5d7adb0e7436e13
|
|
| BLAKE2b-256 |
9c63b36798b9c88d6426a11464898c94fbec1c256a4f599eee6d365968dfe662
|
File details
Details for the file fritts-0.1.1-py3-none-any.whl.
File metadata
- Download URL: fritts-0.1.1-py3-none-any.whl
- Upload date:
- Size: 69.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a0fb2cde3b43878535f7a710b836d346b646656faea8c2c4656d19429308716
|
|
| MD5 |
5efa9555e824fe0aff961724083609be
|
|
| BLAKE2b-256 |
781b712bdce1a726d44bba985cabaabe59a5e59f58d413bb7d690bd9e899a0a5
|