An Igor Pro procedure package for analysis of automated patch clamp data acquired with the Nanion Patchliner system using PatchMaster software.
Targets the electrophysiology research community. Intended for submission to IgorExchange (WaveMetrics community platform).
- Igor Pro 8 or later
- Data acquired with Nanion Patchliner / PatchMaster (exported as Igor binary waves)
- Copy all
.ipffiles into your Igor Pro User Procedures folder
(Igor Pro User Files/User Procedures/) - In Igor Pro: File → Open File → Procedure, open
Analysis_Menus.ipf
(remaining modules are included automatically via#include— pending) - From the menu bar: Analysis → Nanion → Panel
- Load your PatchMaster-exported waves into Igor Pro
- Open the toolkit: Analysis → Nanion → Panel
- In the Organize tab: click Organize data and enter your wave prefix
(e.g.Cellfor waves namedCell_001,Cell_002, …) - Navigate to an experiment folder and select the appropriate protocol tab
- Use the Export tab to send data to NeuroMatic for further analysis
| File | Responsibility |
|---|---|
Analysis_Menus.ipf |
Entry point, main panel, tab control, menu functions |
Analysis_Utils.ipf |
Logger, global variable helpers, folder path helpers, wave utilities, graph window helpers |
Analysis_Common.ipf |
Signal preprocessing, wave organization (sorting_hat), passive property estimation (pasivas) |
Analysis_Ramp.ipf |
Ramp protocol analysis (tempresponse) |
Analysis_IV.ipf |
IV protocol analysis (AnalizarIVporCanal), IV and raw trace graphs |
Analysis_Amplitude.ipf |
Amplitude extraction from ramp fits, result wave management, cursor hook |
Analysis_IVCurves.ipf |
Reversal potential, chord conductance, G-V curve, Boltzmann fit, IV normalization |
Analysis_Kinetics.ipf |
Temperature-dependent kinetics: Q10 and Arrhenius analysis |
Analysis_NMExport.ipf |
NeuroMatic export: copies all Patchliner channels into a single NM-compatible folder |
After running Organize data, waves are moved into the following structure:
root:
└── chan_X: ← per channel (e.g. chan_A, chan_B)
├── Packages: ← channel globals (Wave_prefix, chanexp)
├── Ramp_Analysis: ← result waves for ramp protocol
├── IV_Analysis: ← result waves for IV protocol
└── exp_Y: ← per experiment
├── Trace: ← current traces
├── Stim: ← stimulus amplitude and duration waves
├── Packages: ← experiment globals (ramp_temp, etc.)
└── Analysis: ← intermediate analysis waves
| Rule | Description |
|---|---|
| R1 | Administrative folders (Packages, Trace, Stim) — created by sorting_hat / prefix_detector only |
| R2 | Intermediate folders (exp_Y:Analysis:) — created by the analysis function that needs them |
| R3 | Result folders (chan_X:Ramp_Analysis:, chan_X:IV_Analysis:) — created by CheckDataFolder on first use |
| R4 | Path resolution — functions receive folder paths as parameters; no internal resolution |
| R5 | exp_type as explicit parameter — no function detects protocol type automatically |
prefix_detector() → organize waves into folder hierarchy
plot_raw_panel() → visualize traces and stimulus
menu_tempresponse() → baseline fit + peak extraction + passive properties
plot_amp("raw") → amplitude panel with cursor-based selection
Result waves (in chan_X:Ramp_Analysis:):
| Wave | Columns | Units |
|---|---|---|
MutantName_Prefix_Chan_Amp |
[0] baseline, [1] peak, [2] delta | pA |
chan_fitpeak_T |
[0] mode 0 (linear fit), [2] mode 2 (no fit) | same as input |
chan_pasives_T |
[0] Cm, [1] tau, [2] Rs | pF, ms, MΩ |
prefix_detector() → organize waves
AnalizarIVporCanal() → current, voltage, passive properties per sweep
IV_graph() → current vs voltage plot
Result wave IV_Results (in exp_Y:Analysis:):
| Column | Quantity | Unit |
|---|---|---|
| [0] | Current | A |
| [1] | Voltage | V |
| [2] | Cm | F |
| [3] | tau | s |
| [4] | Rs | Ω |
reversal_potential_fit(IV_res, Rs_corr) → V_rev by zero-crossing interpolation
conductance_calc(IV_res, V_rev_mV) → chord conductance G = I / (V - V_rev)
GV_curve(G_chord, IV_res) → normalized G-V: G_norm = G / G_max
boltzmann_fit(GV_norm, IV_res, pkg_folder)→ V_half and slope k
IV_normalize(IV_res) → normalized IV curve
prefix_detector() → organize waves into folder hierarchy
ExportChannelToNM() → export all Patchliner channels to a single NM folder
Maps each chan_X folder to a NeuroMatic channel letter (alphabetical order):
| Patchliner channel | NM channel |
|---|---|
chan_1 |
A |
chan_2 |
B |
chan_3 |
C |
chan_4 |
D |
All waves are copied — the source folder structure is preserved. Experiments within each channel are sorted alphabetically so wave sequence numbers are stable across runs.
Output folder at root: nm_{expName}
Stimulus export (voltage command reconstruction from
_Amp/_Durpairs) is pending.
Every graph that uses cursors for analysis stores the active wave's full path in:
root:Packages:[graph_name]_wave_path
obtained via GetWavesDataFolder(w, 2). This is required because CsrWave() does not work reliably with hosted subgraphs (# syntax). The path is consumed by CursorMovedHook and button procedures.
nvar_storer(name, value, folder) uses NaN as the retrieve-mode sentinel, so legitimate stored zero values are preserved correctly.
All cursor placement uses /P (point-based) flags to avoid XY-axis scaling mismatches.
Estimated from the capacitive transient in response to a voltage step:
Rs = ΔV / I₀ (I₀ = peak current at step onset)
Rtot = ΔV / Iss (Iss = steady-state current)
Rm = Rtot − Rs
τ = RC fit time constant
Cm = τ / Rpar (Rpar = Rs ∥ Rm)
G(V) = I(V) / (V − V_rev) [nA/mV = µS]
Linear interpolation at the zero-current crossing of the IV curve, with optional Rs correction following Beyder & Bhargava 2021 Sci Rep.
G_norm(V) = 1 / (1 + exp((V_half − V) / k))
Q10 = (A_j / A_i) ^ (10 / (T_j − T_i))
ln(A) = ln(A₀) − Ea / (R · T) → Ea (kJ/mol) = −slope × R
R = 8.314 J/(mol·K); linear fit of ln(amplitude) vs 1/T (K⁻¹).
- Molleman A (2003). Patch Clamping: An Introductory Guide to Patch Clamp Electrophysiology. Wiley.
- Bhatt DL et al. (2017). Chord conductance analysis in Nanion SyncroPatch. PLOS ONE.
- Beyder A & Bhargava A (2021). Series resistance errors in whole-cell recordings. Scientific Reports.
- Zgrablic G et al. (2020). Patch clamp with temperature control on Patchliner. Bioengineering.
| Feature | Status |
|---|---|
Wave organization (sorting_hat) |
✅ Complete |
Ramp analysis (tempresponse) |
✅ Complete |
| Amplitude extraction | ✅ Complete |
IV analysis (AnalizarIVporCanal) |
✅ Complete |
| IV curves — Scenario 2 (experimental V_rev) | ✅ Complete |
| IV curves — Scenario 1 (Nernst/GHK V_rev) | 🔲 Stub |
| IV curves — Scenario 3 (blocker conditions) | 🔲 Stub |
| Q10 / Arrhenius kinetics | |
| Ramp mode 1 (fit near 0 mV) | 🔲 TODO |
| NeuroMatic export — current traces (Ch A–D) | |
| NeuroMatic export — voltage command reconstruction | 🔲 Pending |
nT, t0, dt from Packages globals |
🔲 TODO (currently hardcoded in amp_saver) |
| IPT lint + format pass | 🔲 Before IgorExchange submission |
#include wiring between modules |
🔲 Before IgorExchange submission |
- Timing parameters in
AnalizarIVporCanal()andtempresponse()are hardcoded for the current Nanion Patchliner square-pulse and ramp protocols. Adaptation to other protocols requires manual adjustment. nT,t0,dt(temperature grid) are hardcoded as6,20,5inamp_saver()andamp_retreiver(). Will be refactored to read from Packages globals before publication.Arrhenius_calculator()fit range is hardcoded to indices[2, 4].
To be defined prior to IgorExchange submission.