Toolkit for PPMS data processing
Project description
PPMS Toolkit
⚠️ Development Notice
This project is currently under active development and primarily developed and tested on macOS. It is a pure Python application built with Qt (PySide6), so it should be cross-platform in principle. However, minor GUI display issues may occur on Windows or Linux systems.
A Python toolkit for PPMS (Physical Property Measurement System) data analysis
📖 Overview
PPMS Toolkit is a modern, user-friendly application designed for researchers working with Quantum Design's Physical Property Measurement System (PPMS). It provides both a powerful GUI application and a flexible Python library for:
- 📂 Data Management: Import, organize, and manage PPMS
.datfiles with SQLite database - 📊 Interactive Plotting: Visualize VSM
and Heat Capacity measurementswith Matplotlib 🔬 Advanced Analysis: Curie temperature fitting, background subtraction, susceptibility analysis- 💾 Efficient Storage: Parquet-based file format for fast data loading and minimal disk usage
- 🎨 Cross-Platform: Built with PySide6 (Qt6) for cross-platform compatibility
✨ Features
🖥️ GUI Application
-
Sample Management
- Create and edit sample metadata (name, mass, orientation, chemical formula)
- Track multiple measurements per sample
- Delete samples and associated data files
-
Measurement Management
- Batch import of
.datfiles from PPMS - Support for VSM (Vibrating Sample Magnetometer) measurements:
- MH mode: Magnetization vs. Field
- MT mode: Magnetization vs. Temperature
Support for Heat Capacity measurements- Automatic deduplication based on file content hash
- Batch import of
-
Interactive Plotting
- Plot multiple measurements with customizable legends
- Click-to-hide curves for easy comparison
- Switch between susceptibility (χ) and moment views
- Zoom, pan, and export plots
-
Data Filtering
- Multi-column filtering in measurement tables
- Filter by sample, mode, field, temperature, or condition
🚀 Installation
Option 1: Conda Environment (Recommended)
# Clone the repository
git clone https://github.com/AlbertRyu/PPMS_ToolKit.git
cd PPMS_ToolKit
# Create and activate conda environment
conda env create -f environment.yml
conda activate ppms_toolkit
# Install the package in development mode
pip install -e ".[gui]"
# Launch the GUI
ppms-toolkit
Option 2: pip + venv
# Clone the repository
git clone https://github.com/AlbertRyu/PPMS_ToolKit.git
cd PPMS_ToolKit
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install with GUI support
pip install -e ".[gui]"
# Launch the GUI
ppms-toolkit
🎯 Quick Start
GUI Workflow
-
Launch Application
ppms-toolkit
-
Select/Create Project
- Choose an existing project folder or create a new one
- All data will be stored in this folder
-
Add Samples
- Navigate to "Samples" tab
- Click "Add Sample" and enter metadata (name, mass, orientation)
-
Import Measurements
- Go to "Plots" tab
- Click "Add Measurement"
- Select multiple
.datfiles (batch import supported) - Choose the sample and measurement mode (MH/MT)
📁 File Naming for MT Mode
The toolkit automatically detects measurement conditions from filenames:
Filename Contains Detected Condition ZFC(case-insensitive)Zero Field Cooling FC(case-insensitive)Field Cooling Neither Unknown Condition Examples:
✅ sample_ZFC_100Oe.dat → Condition: ZFC ✅ data_FC.dat → Condition: FC ⚠️ measurement.dat → Condition: Unknown
-
Visualize Data
- Select measurements from the table
- Click "Plot" to visualize
- Use legend to toggle curves
- Toggle χ/Moment view with checkbox
📊 Supported Measurement Types
VSM (Vibrating Sample Magnetometer)
| Mode | Description | Analysis Tools |
|---|---|---|
| MH | Magnetization vs. Field | fit_MH() - Coercivity extraction~~ |
| MT | Magnetization vs. Temperature | fit_MT() - Curie temperature fitting |
🗂️ Project Structure
PPMS_ToolKit/
├── src/
│ ├── ppms_toolkit/ # Core library
│ │ ├── sample.py # Sample class
│ │ └── measurement/
│ │ ├── base.py # Base Measurement class
│ │ ├── vsm.py # VSM analysis
│ │ └── heat_capacity.py # Heat Capacity analysis
│ │
│ ├── ppms_toolkit_gui/ # GUI application
│ │ ├── app.py # Entry point
│ │ ├── main_window.py # Main window
│ │ ├── controller/ # MVC controllers
│ │ ├── widgets/ # Qt widgets
│ │ └── dialogs/ # Dialog windows
│ │
│ └── infrastructure/
│ └── db/
│ └── db.py # SQLite database wrapper
│
├── examples/
│ └── code_example.ipynb # Jupyter notebook examples
│
├── pyproject.toml # Project metadata & dependencies
├── environment.yml # Conda environment specification
└── README.md # This file
🔧 Dependencies
Core Dependencies
- numpy ≥ 1.21 - Numerical computing
- pandas ≥ 1.3 - Data manipulation
- scipy ≥ 1.7 - Scientific computing
- matplotlib ≥ 3.4 - Plotting
GUI Dependencies (Optional)
- PySide6 ≥ 6.4 - Qt6 GUI framework
- pyarrow ≥ 10.0 - Parquet file I/O
Development Dependencies
- ipykernel - Jupyter notebook support
- IPython - Enhanced interactive shell
📚 Documentation
Database Structure
The toolkit uses SQLite for data management with two main tables:
samples
id,name,mass,chemical,orientation,created_at,notes
measurements
id,sample_id(FK),measurement_type,modeconst_field,const_temperatureoriginal_filepath,data_filepath,processed_data_filepathcontent_hash(for deduplication)extra_parameters(JSON),comment,created_at
📄 License
This project is licensed under the MIT License.
You are free to use, modify, and distribute this software, provided that:
- You include the original copyright notice and license text in any copies
- You do not hold the author liable for any damages
See LICENSE file for full details.
🙏 Acknowledgments
- Built with PySide6 (Qt for Python)
- Data storage powered by Apache Arrow (Parquet format)
- Scientific computing with NumPy, SciPy, and pandas
Made with ❤️ for the research community
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 ppms_toolkit-0.2.1.tar.gz.
File metadata
- Download URL: ppms_toolkit-0.2.1.tar.gz
- Upload date:
- Size: 4.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50b02efbf70bb7f7d4ffa45c0ba91acec5e6cd03f1ffe6f6f9dbc9b0c36541a2
|
|
| MD5 |
41b91ad7a24cfd61ba966242633aafff
|
|
| BLAKE2b-256 |
459e6d5a636bcc9a1e9824ab5f0ae83a2e41c6f5dae09358f5e67d085faa2927
|
File details
Details for the file ppms_toolkit-0.2.1-py3-none-any.whl.
File metadata
- Download URL: ppms_toolkit-0.2.1-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f56e9846288a06ff7e6275f9cd683cb152e43eef0fd2d0e242b235c3170e3ac9
|
|
| MD5 |
93d648b358ead8ed0411dff62dbfd3e1
|
|
| BLAKE2b-256 |
9b53cc91c1933948ec1df148701d924f80444f76495e6fa60436f817d7cd396a
|