Skip to content

Commit ebe1269

Browse files
made README short
1 parent 42c2224 commit ebe1269

1 file changed

Lines changed: 0 additions & 164 deletions

File tree

README.md

Lines changed: 0 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,9 @@
77
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"></a>
88
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/Python-3.9+-brightgreen.svg" alt="Python 3.9+"></a>
99
<a href="#"><img src="https://img.shields.io/badge/Status-Active-success.svg" alt="Project Status: Active"></a>
10-
</p>
11-
<p>
12-
<a href="https://github.com/prathameshnium/PICA-Python-Instrument-Control-and-Automation"><img src="https://img.shields.io/github/last-commit/prathameshnium/PICA-Python-Instrument-Control-and-Automation" alt="Last Commit"></a>
13-
<a href="https://github.com/prathameshnium/PICA-Python-Instrument-Control-and-Automation"><img src="https://img.shields.io/github/repo-size/prathameshnium/PICA-Python-Instrument-Control-and-Automation" alt="Repo Size"></a>
1410
<a href="https://github.com/prathameshnium/PICA-Python-Instrument-Control-and-Automation/stargazers"><img src="https://img.shields.io/github/stars/prathameshnium/PICA-Python-Instrument-Control-and-Automation?style=social" alt="GitHub Stars"></a>
1511
<a href="https://github.com/prathameshnium/PICA-Python-Instrument-Control-and-Automation/network/members"><img src="https://img.shields.io/github/forks/prathameshnium/PICA-Python-Instrument-Control-and-Automation?style=social" alt="GitHub Forks"></a>
1612
</p>
17-
<p>
18-
<img src="https://komarev.com/ghpvc/?username=prathameshnium&repo=PICA-Python-Instrument-Control-and-Automation&color=brightgreen&style=flat" alt="Profile views">
19-
</p>
2013
</div>
2114

2215
---
@@ -30,7 +23,6 @@ A key architectural feature is the use of isolated process execution for each me
3023
PICA is designed with a clear separation between the user interface (frontend) and the instrument control logic (backend). This modular approach makes the system easy to maintain, extend, and debug.
3124

3225
<div align="center">
33-
<img src="_assets/Images/PICA_Laucher_V6.png" alt="PICA Launcher Screenshot" width="800"/>
3426
<img src="_assets/Images/PICA_Launcher_v6.png" alt="PICA Launcher Screenshot" width="800"/>
3527
</div>
3628

@@ -41,7 +33,6 @@ PICA is designed with a clear separation between the user interface (frontend) a
4133
The core design philosophy of PICA is the separation of concerns, implemented through a distinct **Frontend-Backend** architecture for each measurement module.
4234

4335
- **Frontend:** Each measurement has a dedicated GUI script (e.g., `IV_K2400_Frontend_v5.py`) built with `Tkinter` and the `CustomTkinter` library. It is responsible for all user interaction, parameter input, and data visualization (live plotting). It runs in the main process.
44-
- **Frontend:** Each measurement has a dedicated GUI script (e.g., `IV_K2400_Frontend_v5.py`) built with Python's standard `Tkinter` library. It is responsible for all user interaction, parameter input, and data visualization (live plotting). It runs in the main process.
4536
- **Backend:** The instrument control logic is encapsulated in a separate class (e.g., `Keithley2400_Backend`). This class handles all `PyVISA` communication, instrument configuration, and data acquisition commands.
4637
- **Process Isolation:** When a measurement is started, the frontend launches its corresponding backend logic in a separate, isolated process using Python's `multiprocessing` library. This is the key to PICA's stability: a crash or error in one measurement script will not affect the main launcher or any other running experiments.
4738
- **Communication:** The frontend and backend communicate via `multiprocessing.Queue` for thread-safe data exchange. The backend performs a measurement and places the data into a queue, which the frontend then reads to update plots and save to a file.
@@ -79,162 +70,71 @@ The core design philosophy of PICA is the separation of concerns, implemented th
7970

8071
The core of PICA is built with a stack of robust and widely-used Python libraries.
8172

82-
<p align="center">
83-
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/Python-3.9+-blue.svg?logo=python&logoColor=white" alt="Python"></a> <a href="https://docs.python.org/3/library/tkinter.html"><img src="https://img.shields.io/badge/Tkinter-GUI-orange.svg" alt="Tkinter"></a>
84-
<a href="https://github.com/TomSchimansky/CustomTkinter"><img src="https://img.shields.io/badge/CustomTkinter-Modern%20GUI-orange.svg" alt="CustomTkinter"></a>
85-
<a href="https://pyvisa.readthedocs.io/en/latest/"><img src="https://img.shields.io/badge/PyVISA-Instrument%20Control-yellow.svg" alt="PyVISA"></a>
86-
<a href="https://numpy.org/"><img src="https://img.shields.io/badge/NumPy-Data%20Handling-blueviolet.svg?logo=numpy&logoColor=white" alt="NumPy"></a>
87-
<a href="https://pandas.pydata.org/"><img src="https://img.shields.io/badge/Pandas-Data%20Manipulation-purple.svg?logo=pandas&logoColor=white" alt="Pandas"></a>
88-
<a href="https://matplotlib.org/"><img src="https://img.shields.io/badge/Matplotlib-Plotting-green.svg?logo=matplotlib&logoColor=white" alt="Matplotlib"></a>
89-
</p>
90-
9173
- **Primary Language:** **Python 3.9+**
92-
- **Graphical User Interface:** **Tkinter** (with the **CustomTkinter** library for a modern look and feel)
9374
- **Graphical User Interface:** **Tkinter**
9475
- **Instrument Communication:** **PyVISA** (a Python wrapper for the NI-VISA library)
9576
- **Numerical Operations:** **NumPy**
96-
- **Data Structuring:** **Pandas**
9777
- **Data Visualization:** **Matplotlib**
9878
- **Concurrency:** **Multiprocessing** (a native Python library for process isolation)
9979

10080
All required packages are listed in the `requirements.txt` file for easy one-step installation.
10181

10282
---
10383
## Available Measurement Modules
104-
## Available Scripts & Modules
10584

10685
The PICA suite is organized into modules, each containing a frontend GUI application and its corresponding backend logic for instrument control.
10786

10887
#### Low Resistance (Keithley 6221 / 2182)
10988
* **Delta Mode I-V Sweep**
110-
* **Frontend:** `Delta_mode_Keithley_6221_2182/IV_K6221_DC_Sweep_Frontend_V10.py`
111-
* **Backend:** `Delta_mode_Keithley_6221_2182/Backends/Delta_K6221_K2182_Simple_v7.py`
11289
* **Delta Mode R vs. T (Active Control)**
113-
* **Frontend:** `Delta_mode_Keithley_6221_2182/Delta_RT_K6221_K2182_L350_T_Control_Frontend_v5.py`
114-
* **Backend:** `Delta_mode_Keithley_6221_2182/Backends/Delta_K6221_K2182_Simple_v7.py`
11590
* **Delta Mode R vs. T (Passive Sensing)**
116-
* **Frontend:** `Delta_mode_Keithley_6221_2182/Delta_RT_K6221_K2182_L350_Sensing_Frontend_v5.py`
117-
* **Backend:** (Internal to Frontend)
11891

11992
#### Mid Resistance (Keithley 2400)
12093
* **I-V Sweep**
121-
* **Frontend:** `Keithley_2400/IV_K2400_Frontend_v5.py`
122-
* **Backend:** `Keithley_2400/Backends/IV_K2400_Loop_Backend_v10.py`
12394
* **R vs. T (Active Control)**
124-
* **Frontend:** `Keithley_2400/RT_K2400_L350_T_Control_Frontend_v3.py`
125-
* **Backend:** (Internal to Frontend)
12695
* **R vs. T (Passive Sensing)**
127-
* **Frontend:** `Keithley_2400/RT_K2400_L350_T_Sensing_Frontend_v4.py`
128-
* **Backend:** (Internal to Frontend)
12996

13097
#### Mid Resistance, High Precision (Keithley 2400 / 2182)
13198
* **I-V Sweep**
132-
* **Frontend:** `Keithley_2400_Keithley_2182/IV_K2400_K2182_Frontend_v3.py`
133-
* **Backend:** `Keithley_2400_Keithley_2182/Backends/IV_K2400_K2182_Backend_v1.py`
13499
* **R vs. T (Active Control)**
135-
* **Frontend:** `Keithley_2400_Keithley_2182/RT_K2400_K2182_T_Control_Frontend_v3.py`
136-
* **Backend:** (Internal to Frontend)
137100
* **R vs. T (Passive Sensing)**
138-
* **Frontend:** `Keithley_2400_Keithley_2182/RT_K2400_2182_L350_T_Sensing_Frontend_v2.py`
139-
* **Backend:** (Internal to Frontend)
140101

141102
#### High Resistance (Keithley 6517B)
142103
* **I-V Sweep**
143-
* **Frontend:** `Keithley_6517B/High_Resistance/IV_K6517B_Frontend_v11.py`
144-
* **Backend:** `Keithley_6517B/High_Resistance/Backends/IV_K6517B_Simple_Backend_v10.py`
145104
* **R vs. T (Active Control)**
146-
* **Frontend:** `Keithley_6517B/High_Resistance/RT_K6517B_L350_T_Control_Frontend_v13.py`
147-
* **Backend:** `Keithley_6517B/High_Resistance/Backends/IV_K6517B_L350_T_Control_Backend_v6.py`
148105
* **R vs. T (Passive Sensing)**
149-
* **Frontend:** `Keithley_6517B/High_Resistance/RT_K6517B_L350_T_Sensing_Frontend_v14.py`
150-
* **Backend:** (Internal to Frontend)
151106

152107
#### Pyroelectric Measurement (Keithley 6517B)
153108
* **PyroCurrent vs. T**
154-
* **Frontend:** `Keithley_6517B/Pyroelectricity/Pyroelectric_K6517B_L350_Frontend_v4.py`
155-
* **Backend:** `Keithley_6517B/Pyroelectricity/Backends/Pyroelectric_K6517B_Working_Backend_v10.py`
156109

157110
#### Capacitance (Keysight E4980A)
158111
* **C-V Measurement**
159-
* **Frontend:** `LCR_Keysight_E4980A/CV_KE4980A_Frontend_v3.py`
160-
* **Backend:** `LCR_Keysight_E4980A/Backends/CV_KE4980A_Simple_Backend_v10.py`
161112

162113
#### Temperature Utilities (Lakeshore 350)
163114
* **Temperature Ramp**
164-
* **Frontend:** `Lakeshore_350_340/T_Control_L350_RangeControl_Frontend_v8.py`
165-
* **Backend:** `Lakeshore_350_340/Backends/T_Control_L350_Simple_Backend_v10.py`
166115
* **Temperature Monitor**
167-
* **Frontend:** `Lakeshore_350_340/T_Sensing_L350_Frontend_v4.py`
168-
* **Backend:** (Internal to Frontend)
169116

170117
---
171118

172119
## Instrument Specifications
173120

174-
Here is a meticulously verified summary of the key measurement specifications for the instruments used in the PICA project. All values have been cross-referenced with the provided instrument manuals to ensure accuracy.
175121
PICA supports a range of common laboratory instruments. For a detailed summary of their measurement specifications, please see the Instrument Specifications Guide.
176122

177-
#### Keithley 6221 Current Source + 2182A Nanovoltmeter System (Low Resistance)
178-
**Primary Use:** High-precision, low-resistance I-V and R-T measurements via **Delta Mode**.
179123
- **Source-Measure Units:** Keithley 2400, Keithley 6221, Keithley 6517B
180124
- **Nanovoltmeters:** Keithley 2182A
181125
- **LCR Meters:** Keysight E4980A
182126
- **Temperature Controllers:** Lakeshore 340, Lakeshore 350
183127

184-
| Parameter | Lower Limit | Higher Limit | Best Resolution |
185-
| :------------------------ | :------------------------------------------------ | :-------------- | :------------------------------------------ |
186-
| **Resistance** | **~10 nΩ** (Practical limit set by system noise) | **200 MΩ** | **Derived** (from V/I in Delta Mode) |
187-
| **Current Source (6221)** | **100 fA** | **105 mA** | **100 fA** (on the 2 nA range) |
188-
| **Voltage Measure (2182A)** | **1 nV** | **100 V** | **1 nV** (on the 10 mV range) |
189128
---
190129

191-
#### Keithley 2400 SourceMeter (Mid-Range Resistance)
192-
**Primary Use:** Versatile four-probe I-V and R-T measurements for a broad range of materials.
193130
## 🚀 Getting Started
194131

195-
| Parameter | Lower Limit (Source / Measure) | Higher Limit (Source / Measure) | Best Resolution (Source / Measure) |
196-
| :----------------------------- | :----------------------------- | :------------------------------ | :----------------------------------- |
197-
| **Resistance** | **&lt; 0.2 Ω** | **&gt; 200 MΩ** | **100 µΩ** (on the 20Ω range) |
198-
| **Voltage** | **5 µV / 1 µV** | **±210 V / ±210 V** | **5 µV / 100 nV** (6.5-digit mode) |
199-
| **Current** | **50 pA / 10 pA** | **±1.05 A / ±1.05 A** | **50 pA / 10 pA** |
200-
#### Keithley 6517B Electrometer (High Resistance & Pyroelectric)
201-
**Primary Use:** Characterizing highly insulating materials and measuring pyroelectric currents.
202-
203-
| Parameter | Lower Limit | Higher Limit | Best Resolution |
204-
| :----------------------------- | :---------------------------------------- | :------------------------------ | :--------------------------------------------- |
205-
| **Resistance** | **1 Ω** | **&gt; 10 PΩ** ($10^{16}$ Ω) | **Derived** (from I-measure) |
206-
| **Current (Pyroelectric)** | **10 aA** ($10 \times 10^{-18}$ A) | **20 mA** | **10 aA** |
207-
| **Voltage** | **1 µV** | **200 V** | **1 µV** |
208-
| **Charge** | **1 fC** | **2 µC** | **10 fC** |
209-
210-
---
211-
#### Keysight E4980A Precision LCR Meter (C-V Measurements)
212-
**Primary Use:** Capacitance-Voltage (C-V) and impedance characterization.
213-
214-
| Parameter | Lower Limit | Higher Limit | Best Resolution |
215-
| :------------------- | :----------------------------------------- | :----------------------------------------- | :----------------------------------------- |
216-
| **Basic Accuracy** | Varies with conditions | Varies with conditions | **0.05%** (under optimal conditions) |
217-
| **Frequency** | **20 Hz** | **2 MHz** | **Tiered** (e.g., 0.01 Hz at low freq.) |
218-
| **DC Bias** | **-40 V** | **+40 V** | **0.3 mV** (Requires Option 001) |
219-
220-
---
221-
222-
#### Lake Shore 350 Temperature Controller
223-
**Primary Use:** Precise temperature control and monitoring for temperature-dependent measurements.
224-
| Sensor Type | Lower Temp. Limit | Higher Temp. Limit | Best Resolution (Temp) | Notes |
225-
| :--------------- | :---------------- | :----------------- | :------------------------- | :----------------------------------------- |
226-
| **Diode (DT-670)** | **1.4 K** | **500 K** | **&lt; 0.1 mK** | At cryogenic temperatures |
227-
| **Platinum RTD** | **14 K** | **873 K** | **&lt; 1 mK** | At cryogenic temperatures |
228-
229-
## Getting Started
230-
231132
### Prerequisites
232133

233134
1. **Python:** Python 3.9 or newer is recommended.
234135
2. **NI-VISA Driver:** You must install the [National Instruments VISA Driver](https://www.ni.com/en/support/downloads/drivers/download.ni-visa.html) for your operating system. This is required for Python's `pyvisa` library to communicate with the instruments.
235136

236137
### Installation Steps
237-
h
238138

239139
1. **Clone the Repository**
240140
git clone https://github.com/prathameshnium/PICA-Python-Instrument-Control-and-Automation.git
@@ -268,77 +168,14 @@ h
268168
269169
---
270170
271-
## Extending PICA: Adding a New Module
272171
## 🛠️ Extending PICA: Adding a New Module
273172
274173
The modular architecture makes it straightforward to add support for new instruments or measurement types. Here is a simplified example of the required structure.
275174
276-
#### 1. Create a Backend Class
277175
1. **Create a Backend Class:** Encapsulate all direct instrument communication (`PyVISA` commands) in a dedicated class.
278176
2. **Create a Frontend GUI:** Build a `Tkinter` GUI to gather user parameters and display live data. This GUI will instantiate and control the backend.
279177
3. **Integrate with the Launcher:** Add a button and the script path to `PICA_v6.py` to make your new module accessible from the main dashboard.
280178
281-
The backend class handles all direct communication with the instrument.
282-
283-
```python
284-
# In a file like "MyInstrument/Backend.py"
285-
import pyvisa
286-
import time
287-
288-
class MyInstrument_Backend:
289-
def __init__(self):
290-
self.instrument = None
291-
self.rm = pyvisa.ResourceManager()
292-
293-
def connect(self, visa_address):
294-
self.instrument = self.rm.open_resource(visa_address)
295-
print(f"Connected to: {self.instrument.query('*IDN?')}")
296-
297-
def configure(self, voltage):
298-
self.instrument.write(f":SOURCE:VOLTAGE {voltage}")
299-
self.instrument.write(":OUTPUT ON")
300-
301-
def measure(self):
302-
current = self.instrument.query(":READ?")
303-
return float(current)
304-
305-
def disconnect(self):
306-
if self.instrument:
307-
self.instrument.write(":OUTPUT OFF")
308-
self.instrument.close()
309-
```
310-
311-
#### 2. Create a Frontend GUI
312-
313-
The frontend provides the user interface and manages the measurement loop in a separate thread.
314-
315-
```python
316-
# In a file like "MyInstrument/Frontend.py"
317-
import tkinter as tk
318-
from threading import Thread
319-
from MyInstrument.Backend import MyInstrument_Backend
320-
321-
class MyInstrument_GUI(tk.Frame):
322-
def __init__(self, master=None):
323-
super().__init__(master)
324-
self.backend = MyInstrument_Backend()
325-
# ... (GUI widget setup: entries, buttons, plots) ...
326-
327-
def start_measurement(self):
328-
# This method runs in a new thread to keep the GUI responsive
329-
self.backend.connect("GPIB0::1::INSTR")
330-
self.backend.configure(voltage=1.5)
331-
for _ in range(100):
332-
current = self.backend.measure()
333-
# Use a queue to send data back to the GUI for plotting
334-
# ...
335-
self.backend.disconnect()
336-
```
337-
338-
#### 3. Integrate with the PICA Launcher
339-
340-
Finally, add the path to your new frontend script in `PICA_v6.py` and `Setup/Picachu.py` to make it accessible from the main dashboard.
341-
342179
---
343180
344181
## Resources & Documentation
@@ -351,7 +188,6 @@ For a quick reference on instrument addresses, see the `GPIB_Address_Guide.md` f
351188
352189
---
353190
354-
## 🤝 Contributing
355191
## 🤝 How to Contribute
356192
Contributions are welcome! If you have suggestions for improvements or want to add a new instrument module, please feel free to:
357193
1. Fork the repository.

0 commit comments

Comments
 (0)