A comprehensive graphical interface for electrical measurements using Keithley sourcemeters with advanced four-point probe capabilities.
Version: 1.2.0 Author: Brenden Ferland Based on: ResistaMet v0.9.2
ResistaMet GUI is a powerful PyQt5-based application for electrical characterization using Keithley instruments (2400/2450 series). Originally designed for resistance measurements, it has evolved into a full-featured measurement suite with support for multiple measurement modes, advanced data analysis, and a modular architecture.
- 2-wire and 4-wire measurement support
- Configurable test current (up to 3A)
- Voltage compliance (up to 200V)
- Auto-ranging capability
- Real-time resistance monitoring
- Programmable DC voltage output (-200V to +200V)
- Current compliance monitoring (up to 3A)
- Time-based measurements with configurable duration
- Negative bias support for advanced characterization
- Plot current, voltage, or calculated resistance
- Programmable DC current output (-3A to +3A)
- Voltage compliance monitoring (up to 200V)
- Time-based measurements
- Bidirectional current sourcing
- Plot voltage, current, or calculated resistance
- Full van der Pauw and linear 4-point probe support
- Real-time sheet resistance (Rs), resistivity (ρ), and conductivity (σ) calculations
- Configurable probe geometry (spacing in cm)
- Thin film and bulk material models
- Advanced options:
- Custom K correction factor (default 4.532)
- Alpha multiplier for thin films
- Thickness input (µm) for resistivity calculations
- Sample averaging (continuous or fixed count)
- Live statistics: mean, standard deviation, RSD
- Measurement table with individual data points
- Summary export with averaged results
- Remote sensing automatically enabled
-
Real-time Plotting:
- Live updating matplotlib graphs
- Interactive controls (zoom, pan, save)
- Configurable plot variables per mode
- Dynamic axis labels
- Optional plot hiding for data-only workflows
-
Results Viewer: ⭐ New in v1.2.0
- Built-in CSV viewer for analyzing past measurements
- Plot any column from historical data
- Integrated into main window
-
Statistics Display:
- Min/max/average for standard modes
- Mean/std/RSD for 4PP measurements
- Live updates during measurement
-
Resizable Panels:
- QSplitter-based layout for flexible workspace
- Adjustable Parameters, Plot, Controls, and Status Log sections
- Persistent splitter positions
-
View Menu Toggles:
- Hide/show Parameters panel
- Hide/show Controls panel
- Hide/show Status Log
- Maximize plot area when needed
-
4PP Optimized Layout:
- Horizontal split: Parameters left, Summary/Table right
- Efficient use of screen real estate
- Windows-compatible rendering
-
Automatic Data Export:
- CSV format with timestamps
- UTF-8 encoding with BOM (Excel-compatible special characters: Ω, µ, ρ)
- Separate data and summary exports for 4PP
- Configurable auto-save intervals
-
Profiles System: ⭐ New in v1.2.0
- Save measurement configurations per mode
- Load profiles for repeatable experiments
- JSON format for easy sharing
- Per-mode profile management
-
Multi-user Support:
- Per-user configuration settings
- User-specific data storage directories
- Quick user switching
- Pause/Resume: Temporarily halt measurements without losing data
- Event Marking: Press 'M' to mark important events during measurement
- Compliance Stop: Automatic measurement termination on compliance
- Quick GPIB Selection: Popup selector on connection errors
- Settings Persistence: All configurations saved between sessions
- Python 3.6 or higher
- PyQt5
- PyVISA
- Matplotlib
- NumPy
-
Clone the repository:
git clone https://github.com/PEEKPerformer/ResistaMet-GUI.git cd ResistaMet-GUI -
Install required Python packages:
pip install pyqt5 pyvisa pyvisa-py numpy matplotlib
-
Hardware-specific dependencies:
Depending on your GPIB interface:
- National Instruments GPIB: Install NI-VISA
- Prologix GPIB-USB: Use pyvisa-py (included above)
- Other adapters: Install appropriate drivers
-
Run the application:
python resistamet-gui.py
- Launch the application and select or create a user profile
- Connect your instrument:
- File → Connect to Device
- Select the correct GPIB address (default: GPIB0::24::INSTR)
- Choose a measurement mode from the tabs
- Select "Resistance" tab
- Configure:
- Test Current (e.g., 1 mA = 0.001 A)
- Voltage Compliance (e.g., 10 V)
- Measurement Type (2-wire or 4-wire)
- Enter a sample name
- Click "Start Measurement"
- Select "Four Point Probe" tab
- Configure probe geometry:
- Probe Spacing (e.g., 0.1 cm)
- Thickness (optional, in µm)
- Model (infinite/semi-infinite/thin film)
- Set measurement parameters:
- Source Current (typical: 1-100 µA)
- Voltage Compliance
- Samples (0 = continuous, or set count)
- Click "Start Measurement"
- View live Rs, ρ, σ in the summary panel
- Export summary statistics when complete
- Save a profile: File → Profiles → Save Current Profile
- Load a profile: File → Profiles → Load Profile
- Profiles store all mode-specific settings for easy reuse
- M: Mark event during measurement
- Ctrl+S: Save current plot
- Standard shortcuts for zoom, pan in matplotlib toolbar
ResistaMet GUI supports the full capabilities of modern Keithley sourcemeters:
| Parameter | Range | Notes |
|---|---|---|
| Voltage Output | -200V to +200V | Keithley 2450/2400 dependent |
| Current Output | -3A to +3A | Full instrument range |
| Voltage Compliance | 0.1V to 200V | Protection limit |
| Current Compliance | 1e-7A to 3A | Protection limit |
| Measurement Modes | 2-wire, 4-wire | Remote sensing for 4PP |
The codebase has been modularized into a clean package structure:
ResistaMet-GUI/
├── resistamet-gui.py # Entry point
├── resistamet_gui/ # Main package
│ ├── __init__.py
│ ├── constants.py # Global constants
│ ├── config.py # Configuration management
│ ├── buffers.py # Data buffer classes
│ ├── workers.py # Measurement worker threads
│ ├── instrument.py # Keithley VISA wrapper
│ └── ui/ # UI modules
│ ├── __init__.py
│ ├── main_window.py # Main application window
│ ├── dialogs.py # Settings and dialogs
│ └── canvas.py # Matplotlib integration
├── README.md
└── requirements.txt
This modular design improves:
- Code maintainability
- Testability
- Future extensibility
- Separation of concerns
- Test Current / Source Current: Applied current (A)
- Voltage Compliance / Source Voltage: Voltage limit or output (V)
- Sampling Rate: Measurements per second (Hz)
- NPLC: Power line cycle integration (0.01 - 10)
- Settling Time: Pre-measurement delay (seconds)
- Duration: Time-based measurement length (hours)
- Stop on Compliance: Auto-stop when limits reached
- Plot Update Interval: Refresh rate (ms)
- Plot Color: Line color selection
- Buffer Size: Data points in memory
- Auto-save Interval: Automatic save frequency (seconds)
- Data Directory: Base folder for CSV exports
-
GPIB not found:
- Verify GPIB interface is connected
- Check drivers (NI-VISA or pyvisa-py)
- Try:
python -m visa info
-
Wrong GPIB address:
- Use File → Connect to Device
- Try auto-detection or manual entry
- Common addresses: 22, 23, 24
-
Timeout errors:
- Increase timeout in settings
- Check instrument is not in local mode
- Verify cable connections
-
Compliance errors:
- Increase compliance limit
- Reduce source level
- Check sample connections
-
Noisy data:
- Increase NPLC (slower but more accurate)
- Use 4-wire measurement
- Enable auto-range
- Check for ground loops
-
4PP calculations seem wrong:
- Verify probe spacing is correct (cm)
- Check thickness input (µm, not cm)
- Ensure correct model selected
- Verify K factor (default 4.532 for linear array)
-
Windows: Panels too small:
- v1.2.0 includes fixes for zero-size rendering
- Drag splitter handles to resize
- Use View menu to hide/show sections
-
Plot not updating:
- Check "Enable Plot" is on
- Verify plot isn't hidden (View menu)
- Reduce update interval if CPU is slow
Timestamp,Elapsed Time (s),Resistance (Ω),Voltage (V),Current (A),Event
2025-11-19 10:30:00,0.0,1234.56,1.23,0.001,
2025-11-19 10:30:01,1.0,1234.58,1.23,0.001,
2025-11-19 10:30:05,5.0,1235.12,1.23,0.001,Max Compression
Timestamp,Elapsed Time (s),V/I (Ω),Rs (Ω/sq),ρ (Ω·cm),σ (S/cm)
2025-11-19 10:30:00,0.0,100.5,45.2,1.2e-3,833.3
Parameter,Mean,Std Dev,RSD (%)
Sheet Resistance (Ω/sq),45.23,0.15,0.33
Resistivity (Ω·cm),1.23e-3,4.2e-6,0.34
Conductivity (S/cm),812.5,2.8,0.34
- Added Four-Point Probe measurement mode
- Modularized codebase architecture
- Instrument abstraction and profiles system
- Results viewer for CSV analysis
- Enhanced UI with splitters and view toggles
- Increased instrument limits to 200V/3A
- Windows compatibility improvements
- Numerous bug fixes
- Added voltage and current source modes
- Enhanced data buffering
- Improved CSV export
- Initial release
- Basic resistance measurement
- 2-wire and 4-wire support
Contributions are welcome! Please feel free to submit issues or pull requests.
ResistaMet GUI is provided under the MIT License with Academic Citation Clause.
If you use ResistaMet GUI in your research, please cite:
Ferland, B. (2025). ResistaMet GUI: A Comprehensive Electrical Measurement Suite
for Keithley Sourcemeters (Version 1.2.0) [Software].
https://github.com/PEEKPerformer/ResistaMet-GUI
For questions, bug reports, or feature requests:
- Open an issue on GitHub
- Contact: [email protected]
Happy measuring! 🔬⚡