⚠️ Development NoticeThis 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
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
-
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
# 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# 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-
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)
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
| Mode | Description | Analysis Tools |
|---|---|---|
| MH | Magnetization vs. Field | fit_MH() - Coercivity extraction~~ |
| MT | Magnetization vs. Temperature | fit_MT() - Curie temperature fitting |
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
- numpy ≥ 1.21 - Numerical computing
- pandas ≥ 1.3 - Data manipulation
- scipy ≥ 1.7 - Scientific computing
- matplotlib ≥ 3.4 - Plotting
- PySide6 ≥ 6.4 - Qt6 GUI framework
- pyarrow ≥ 10.0 - Parquet file I/O
- ipykernel - Jupyter notebook support
- IPython - Enhanced interactive shell
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
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.
- 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
