Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - kbknudsen/PyEIS: PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer · GitHub
Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kbknudsen/PyEIS: PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer · GitHub
Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kbknudsen/PyEIS: PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer · GitHub
Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - kbknudsen/PyEIS: PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer · GitHub
Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kbknudsen/PyEIS: PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer · GitHub
Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - kbknudsen/PyEIS: PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer · GitHub
Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - kbknudsen/PyEIS: PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer · GitHub
Skip to content

Latest commit

History

72 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This repository contains PyEIS, A Python-based Electrochemical Impedance Spectroscopy analyzer and simulator. The software is designed to perform impedance simulations and analyze experimental data through the application of circuit elements. Physical processes in electrochemical systems can be represented by analog circuits containing capacitors (C), resistors (R), inductors (I), and some distributed elements such as constant-phase- (Q) and Warburg elements (W). These features make it possible to understand kinetics, double-layers, and mass-transport for a large range of electrochemical applications.

PyEIS has nine main features:

  • Currently contains 26 built-in equivalent circuits
  • Automated graphical representation in Nyquist and Bode plots with a number of plotting options
  • Capable of importing experimental data from Bio-Logic's EC-Lab '.mpt', Gamry's '.DTA', and Solartron's '.z' files
  • Experimental data validation and quality assessment through Boukamp's linear Kramers-Kronig analysis [1] with an automated optimization function that ensures an optimal number of -(RC)- elements ensuring data is neither over- or under-fitted [2]
  • Ability to fit experimental data through the weighed complex non-linear least squares fitting procedure using the lmfit package [3] with any built-in equivalent circuit
  • Batch fitting capabilities that do not require any additional key strokes
  • Extraction of fitted parameters for fast post-analysis
  • Open-source platform that makes it feasible to include any new equivalent circuit
  • Tutorials for simulating impedance, importing experimental data, and fitting experimental data

Following the license agreement, please use the following citation: DOI

Author: Kristian B. Knudsen (kknu@berkeley.edu || kristianbknudsen@gmail.com)

How to use PyEIS

PyEIS works in a python 3 environment. It was built, tested, and automated in Jupyter lab and Spyder. To use PyEIS, an independent interface is not available as impedance fitting and post analysis of fitted parameters would become a two-step process. Instead PyEIS works directly in a Python interface and fitted parameters are automatically output in variables directly accessible to plot or analyze vs. potential, current, state-of-charge, cycle number, time, etc. allowing for fast analysis.

The following command overview and two notebooks are tutorials that in a step-by-step manner introduce the functionality of PyEIS:

The PyEIS command overview gives a brief overview of the main functionalities and their dependents. The Simulations with PyEIS notebook covers simulating and plotting impedance spectra’s with different built-in equivalent circuits, fitting generated data with equivalent circuits, and extracting fitted parameters. The Experimental Data Extraction and Fitting with PyEIS notebook covers how to import experimental data, perform linear Kramers-Kronig analysis of the experimental data to assess data quality, how to mask data, fitting and plotting experimental data using equivalent circuits, assessing quality of fit using relative residuals, and extracting fitted parameters such as resistors and capacitors for further post-analysis.

The built-in equivalent circuits are illustrated in the following figure. Here Boukamp's simple notation of circuits [5] is used in the "trivial term", while "Simulation function" describes the function that needs to be called to perform simulations, and "Fit string" describes a circuit string that needs be called in the fitting function.

Software and Installation

PyEIS is available on PyPI and can be install using the following command

  • pip install PyEIS==1.0.10

Dependencies

The following libraries are required by PyEIS

  • numpy >= 1.13.3
  • scipy >= 1.0.1
  • pandas >= 0.22.0
  • mpmath >= 1.1.0
  • lmfit >= 0.9.7
  • matplotlib >= 2.2.2
  • seaborn >= 0.8.1

License

All files in this repository including code, readme, logos, and figures are released under the Apache 2.0 License. Learn more at the Open Source Initiative.

Acknowledgements

PyEIS is the accumulation of Kristian's work studying kinetics, double-layer and capacitive effects, and mass transport limitations in electrochemical cells with Electrochemical Impedance Spectroscopy during his PhD at The Technical University of Denmark, Department of Energy under the supervision of Ass. Prof. Johan Hjelm. He currently maintains a Post Doctoral position at the University of California, Berkeley at the Department of Chemical Engineering with Ass. Prof. Bryan D. McCloskey.

Funding is acknowledged from NASA ARMD Convergent Aeronautics Solutions (CAS) Project (Cooperative Agreement NNX16AR82A).

Google scholar site.

References

[1] Boukamp B.A., Solid State Ionics 20, 31-44 (1986), "A Linear Kronig-Kramers Transform Test for Immittance Data Validation"

[2] M. Schönleber, D. Klotz, and E. Ivers-Tiffée, Electrochimica Acta, 131, 20–27 (2014).

[3] Newville M., et al. "LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python" (2014) https://doi.org/10.5281/zenodo.11813

[4] Oliphant T.E (2006) "A guide to NumPy" Trelgol Publishing

[5] Boukamp B.A., "Equivalent Circuit. User Manual" University of Twente, The Netherlands, 1989, 2nd edn.

[6] Johansson F. (2013) "Mpmath: A Python Library for arbitrary-precision floating-point arithmetric" v. 0.18, http://mpmath.org

[7] McKinney W., Proceedings of the 9th Python in Science Conference, 51-56 (2010) "Data Structures for Statistical Computing in Python"

[8] Hunter, J.D. Computing in Science & Engineering, 9, 90-95 (2007) "Matplotlib: A 2D Graphics Environment", DOI:10.1109/MCSE.2007.55

About

PyEIS: A Python-based Electrochemical Impedance Spectroscopy simulator and analyzer

Topics

Resources

Stars

227 stars

Watchers

12 watching

Forks

Releases

Packages

Used by

Contributors

Languages