Open-source Igor Pro toolkit for PatchMaster/Nanion Patchliner electrophysiology analysis

Hi everyone,

I would like to share an open-source Igor Pro toolkit that we are developing for the analysis of electrophysiological recordings exported from HEKA PatchMaster, with a particular focus on data generated using automated patch-clamp systems such as the Nanion Patchliner.

Repository:
https://github.com/Gfernandezv/CBIB_igor_patchmaster

The goal of the project is to provide a reproducible Igor Pro workflow for common post-acquisition analysis steps in patch-clamp experiments, including:

  • batch processing of PatchMaster-exported traces;
  • baseline correction and drift removal;
  • peak current extraction;
  • analysis of current–voltage relationships;
  • estimation of passive membrane properties such as capacitance and series resistance;
  • organization of output waves and summary values for downstream analysis.

The toolkit is currently written as a set of Igor Pro procedure files (.ipf) and is being actively developed. At this stage, it is mainly intended for users working with PatchMaster exports who want to standardize repetitive analysis steps and reduce manual processing.

We would be very interested in feedback from the Igor Pro community, especially regarding:

  • best practices for structuring larger Igor Pro procedure projects;
  • compatibility across Igor Pro versions;
  • suggestions for documentation and example datasets;
  • ways to improve usability for users outside our own laboratory workflow;
  • recommendations for testing or validating Igor Pro analysis code.

The project is released under the GPL-3.0 license. Contributions, issues, suggestions, and critical feedback are very welcome.

Best regards,
Germán Fernández

jjweimer

Congratulations on the posting! 

I am glad to comment briefly to address some of your requests about package distribution and management. Start by reading the section on Creating a Package in the IP User Manual. Also, download and review the existing packages posted here for insights on how they structure their procedure files and their parameter sets. With regard to procedures, pay attention to establish consistent documentation using headers and comments (I see you have implemented generous and well-framed comments).

As for documentation, consider that focused "How To Do This" video tutorials are likely to garner greater appreciation than making users have to read a manual to get the same instructions.

Finally, rather than hosting on Github, consider posting the files here as a self-contained package to make them accessible via the Project Updater package and the Procedure Loader package.

Hope these comments are useful as you plan further developments.

gfernandezv

Thank you both for the constructive and practical feedback!

Regarding package structure and distribution (first comment), here is what I plan to address in the next revision:

1. File headers: I will adopt the standard pragma block across all three procedure files, including #pragma rtFunctionErrors=1, #pragma IgorVersion, version number, and author metadata following the template you linked.

2. Documentation: All inline comments and user-facing strings will be translated to English. Function headers will follow a consistent structured format (Purpose, Inputs, Outputs, Notes).

3. Incomplete features: Two functions currently under development (leak subtraction and a second baseline correction mode) will be clearly stubbed out with a user-facing message so they do not silently fail.

4. Distribution: I will prepare the package for submission to IgorExchange with the constants required by the Project Updater and Procedure Loader. GitHub will remain as a parallel development repository.

5. Video tutorials: Noted — I will prioritize a short screen-capture walkthrough over written documentation.

Regarding the Igor Programming Tool (second comment): thank you for the recommendation. I was not aware of IPT and will run ipt lint and ipt format on the procedure files as part of the cleanup pass before the next release. This looks like exactly the kind of automated check that will catch issues I might otherwise overlook.

I will post an updated version once these changes are in place.

gfernandezv

Thank you both for the constructive and practical feedback!

Regarding package structure and distribution (first comment), here is what I plan to address in the next revision:

1. File headers: I will adopt the standard pragma block across all three procedure files, including #pragma rtFunctionErrors=1, #pragma IgorVersion, version number, and author metadata following the template you linked.

2. Documentation: All inline comments and user-facing strings will be translated to English. Function headers will follow a consistent structured format (Purpose, Inputs, Outputs, Notes).

3. Incomplete features: Two functions currently under development (leak subtraction and a second baseline correction mode) will be clearly stubbed out with a user-facing message so they do not silently fail.

4. Distribution: I will prepare the package for submission to IgorExchange with the constants required by the Project Updater and Procedure Loader. GitHub will remain as a parallel development repository.

5. Video tutorials: Noted — I will prioritize a short screen-capture walkthrough over written documentation.

Regarding the Igor Programming Tool (second comment): thank you for the recommendation. I was not aware of IPT and will run ipt lint and ipt format on the procedure files as part of the cleanup pass before the next release. This looks like exactly the kind of automated check that will catch issues I might otherwise overlook.

I will post an updated version once these changes are in place.

chozo

Just a brief addition: Depending on your preferences, you may or may not want to skip 'ipt format', which brings all your code to a consistent style, but also erases any personal style such as indentation you got used to. So it has benefits and drawbacks. If you do this in an early stage and get used to the particular style, perfect. I personally don't go that far, since this would make the code less readable for me personally. If you use ipt lint it might be overwhelming at first, since the list of issues may be very long. But you can get at it bit by bit while you are working on your other points.