Skip to content

Releases: Tecush/ZScope

ZScope v3.0.2

Choose a tag to compare

@Tecush Tecush released this 09 Sep 16:19
60cfc37
Icon

Stable release for Windows. Includes all core EIS fitting features.

What's New in v3.0.2

ZScope 2.x.x was a very good tool for fitting one spectrum. This release is about everything around that: understanding what your circuit is doing, controlling how it is fitted, deciding which circuit is right, and — the reason for the major version — treating a set of spectra as the series it actually is.

A temperature sweep is no longer twelve unrelated files. Record what varied, fit the whole set in one pass, and read the activation energy off a plot ZScope makes for you. The numbers along the way carry their units, their uncertainties, and the sample geometry that turns ohms into a material property.

✨ New Features

Series analysis

Your spectra are a series, and ZScope now treats them as one A dataset used to be a spectrum and nothing else. It can now record what it was measured at — temperature, bias, elapsed time, concentration, current density, cycle number, partial pressure, pH — entered for the whole set in one grid rather than one dialog per file. Values can be read out of the file names, and if a name carries the number without a unit (cell_A_873_run1.txt), type the first one and ZScope learns where it sits and fills the rest. Units are converted for you: enter 600 °C and an Arrhenius plot receives 873.15 K.

Fit the whole series in one pass ⚡ Fit All Datasets (Ctrl+Shift+A) applies the circuit on the canvas to every spectrum, seeding each fit from the previous one's result. Ordered by your series variable, consecutive spectra differ by one step, so the last fit is genuinely close to the next — much faster and far steadier than a set of independent fits, and the reason the run is sequential rather than parallel. A spectrum that fails is marked and skipped rather than stopping the run, and a failed fit is never carried forward as a seed.

Series Analysis — the physics a single spectrum cannot give you 📈 F7. Plot any fitted parameter against whatever varied and fit a trend: Arrhenius for activation energy in eV and kJ/mol, Mott–Schottky for flat-band potential and dopant density, power law for a reaction order, exponential for a degradation rate, plus plain linear. Y can be a single parameter, the automatic sum of every resistance, or a combination you build by clicking — R2_R + R3_R for a partial sum, Rct_R * Cdl_C for a time constant reported in seconds — and combinations can be named and kept.

The window is careful about what it will and will not claim: datasets you exclude are listed separately from ones that could not supply a point, a series where every spectrum shares the same X value is refused rather than fitted, an uncertainty as large as its own value is reported as not determined instead of printed as a measurement, and a two-point fit says outright that its R² of 1 means nothing.

Getting the model right

Compare circuit models ⚖ Ctrl+M. Adding a component almost always lowers χ² — that is not evidence it is real. Every fit is now remembered as a candidate, ranked by AICc (or AIC, or BIC), with Δ and Akaike weights, so "two arcs or three?" gets an answer instead of a lower residual. Any candidate can be put back on the canvas. Crucially, models fitted to different data are refused rather than ranked: a truncated fit has a lower AIC simply because it has less to explain, and differencing them would name it the winner.

Separate DRT peaks that overlap 🔬 Peak detection finds maxima and integrates between the valleys either side. Two processes less than about a decade apart merge into one bump, and the valley split assigns an arbitrary share of the area to each — which, since the area is the resistance, means a wrong R that does not look wrong, because the total is still right. On two processes 0.3 decades apart, detection reports one of 330 Ω where there are really two, of 120 and 200 Ω.

Deconvolution fits the whole γ(τ) curve with a sum of R‖CPE peaks instead, separating them by shape, and recovers both exactly. Each fitted term is a circuit element, so the result drops straight into a circuit — with α fitted rather than inferred from a peak width.

And you can do it by hand, on the plot Deciding how many processes there are and roughly where is a judgement your eye makes better than any criterion — a criterion can only ever say "more terms fit better". So the peaks are draggable: sideways moves a time constant, up and down changes a resistance (a ZARC's apex height is a direct function of R, inverted exactly, so the handle height is the resistance). Click the curve to add a peak where the model falls short, remove one you do not believe, then Refit to optimise the numbers with your count and positions taken as given. The components are drawn dashed against the measured curve throughout, because a peak sitting where there is no shoulder looks obviously wrong on a plot and perfectly reasonable in a table.

The window is explicit about what not to over-read: R is the reliable output, α comes back biased low because the DRT's own regularisation broadens peaks, and the peak count is a judgement rather than a result.

Build a circuit from the DRT 🧩 Ctrl+Shift+D. The DRT already knows how many processes there are and where they sit; this turns that into a starting circuit instead of making you transcribe it. Each peak becomes an R‖CPE branch with R from the peak area, τ from its position, and α recovered from its width — a ZARC has an analytic DRT whose width depends only on α, so the measured width inverts to the exponent that produced it.

Control where the fit searches By default, fitting spreads its restarts across each parameter's whole allowed range, which means the result barely depends on what you entered. A new Search scope control changes that: Anchored draws restarts near your values, Local runs a single fit from them. Useful when you already know roughly where the answer is — and it is what makes a DRT-derived circuit and a sequential sweep worth doing.

Understanding one spectrum

See what a component does Double-click a part on the canvas and the plots show you where it acts: the stretch of the Nyquist curve it governs is redrawn thick and bright, the frequency band it dominates is shaded on Bode and Phase, and faint ghost curves show the spectrum with that component ten times larger and ten times smaller. The status bar puts it in words. Computed from your actual circuit rather than a textbook rule, so it stays correct for nested ladders, transmission lines and custom components. A component that turns out to have no measurable effect says so — a quick way to spot an element left dangling.

Change a parameter by dragging the plot The marker at the point of strongest influence can be dragged, and the component's value follows with the curve updating live. Because one parameter can only move that point along one line through the plane, ZScope uses the part of your drag that lies along it and ignores the rest. One undo step for the whole gesture.

Simulation Report (F6) The fit report stops at the edge of your data. This one covers the full simulation grid, updates live, and labels every row fitted, measured or extrapolated — so a number predicted beyond your measurement is never mistaken for one the fit was constrained by.

Reports that state what they mean

Normalize by your sample geometry An impedance in ohms describes your specimen, not your material. Enter the geometry once and the whole report converts: area-specific resistance, resistivity, conductivity, and for corrosion work the corrosion current density and penetration rate per ASTM G102. Eight applications: solid pellets, single cells and electrodes, membranes, liquid conductivity cells, corrosion and coatings, batteries and supercapacitors, and in-plane thin films.

The conversion follows each quantity's unit rather than its name, so resistances scale up, capacitances and CPE admittances scale down, and a CPE exponent or a relaxation time is correctly left alone. The symmetric-cell convention ASR = R·A/2 applies to the electrode resistance, not the electrolyte, so nothing is halved on its own: you tick which components are electrode processes and every halved parameter is marked (÷2). Geometry is stored per dataset, so a series of pellets each keeps its own.

Effective capacitance from a CPE Q is an admittance in S·sα and means nothing on its own. The report now converts it by both the Brug and Hsu–Mansfeld formulas, with τ and fpeak, and states which resistances each used — they can differ by tens of percent, and which applies is a modelling assumption that belongs to you. The manual used to instruct users to do this by hand.

Choose the imaginary sign, once Reports can show Z″ or −Z″, switched with one checkbox in both report windows. Headers always state which convention you are looking at, experimental and fitted always flip together, and phase follows. Exports record the convention too.

Every value states its unit, and derived values carry their uncertainty The fit report has a Unit column and labelled data columns; units travel into the TXT and JSON exports. Conductivity, icorr and effective capacitance now carry the uncertainty of the parameter they came from — a derived value with a blank error column beside a fitted one that has an error reads as the more certain of the two.

Smaller, but you will notice

DRT against τ or frequency, switchable instantly, with peak markers following. Scientific notation everywhere: type 1e-12, 1E-12, 1*10^-12 or a decimal comma; log-scaled parameters step ten clicks per ...

Read more

ZScope v3.0.1

Choose a tag to compare

@Tecush Tecush released this 07 Sep 18:07
60cfc37
Icon

Stable release for Windows. Includes all core EIS fitting features.

What's New in v3.0.1

ZScope 2.x.x was a very good tool for fitting one spectrum. This release is about everything around that: understanding what your circuit is doing, controlling how it is fitted, deciding which circuit is right, and — the reason for the major version — treating a set of spectra as the series it actually is.

A temperature sweep is no longer twelve unrelated files. Record what varied, fit the whole set in one pass, and read the activation energy off a plot ZScope makes for you. The numbers along the way carry their units, their uncertainties, and the sample geometry that turns ohms into a material property.

✨ New Features

Series analysis

Your spectra are a series, and ZScope now treats them as one A dataset used to be a spectrum and nothing else. It can now record what it was measured at — temperature, bias, elapsed time, concentration, current density, cycle number, partial pressure, pH — entered for the whole set in one grid rather than one dialog per file. Values can be read out of the file names, and if a name carries the number without a unit (cell_A_873_run1.txt), type the first one and ZScope learns where it sits and fills the rest. Units are converted for you: enter 600 °C and an Arrhenius plot receives 873.15 K.

Fit the whole series in one pass ⚡ Fit All Datasets (Ctrl+Shift+A) applies the circuit on the canvas to every spectrum, seeding each fit from the previous one's result. Ordered by your series variable, consecutive spectra differ by one step, so the last fit is genuinely close to the next — much faster and far steadier than a set of independent fits, and the reason the run is sequential rather than parallel. A spectrum that fails is marked and skipped rather than stopping the run, and a failed fit is never carried forward as a seed.

Series Analysis — the physics a single spectrum cannot give you 📈 F7. Plot any fitted parameter against whatever varied and fit a trend: Arrhenius for activation energy in eV and kJ/mol, Mott–Schottky for flat-band potential and dopant density, power law for a reaction order, exponential for a degradation rate, plus plain linear. Y can be a single parameter, the automatic sum of every resistance, or a combination you build by clicking — R2_R + R3_R for a partial sum, Rct_R * Cdl_C for a time constant reported in seconds — and combinations can be named and kept.

The window is careful about what it will and will not claim: datasets you exclude are listed separately from ones that could not supply a point, a series where every spectrum shares the same X value is refused rather than fitted, an uncertainty as large as its own value is reported as not determined instead of printed as a measurement, and a two-point fit says outright that its R² of 1 means nothing.

Getting the model right

Compare circuit models ⚖ Ctrl+M. Adding a component almost always lowers χ² — that is not evidence it is real. Every fit is now remembered as a candidate, ranked by AICc (or AIC, or BIC), with Δ and Akaike weights, so "two arcs or three?" gets an answer instead of a lower residual. Any candidate can be put back on the canvas. Crucially, models fitted to different data are refused rather than ranked: a truncated fit has a lower AIC simply because it has less to explain, and differencing them would name it the winner.

Separate DRT peaks that overlap 🔬 Peak detection finds maxima and integrates between the valleys either side. Two processes less than about a decade apart merge into one bump, and the valley split assigns an arbitrary share of the area to each — which, since the area is the resistance, means a wrong R that does not look wrong, because the total is still right. On two processes 0.3 decades apart, detection reports one of 330 Ω where there are really two, of 120 and 200 Ω.

Deconvolution fits the whole γ(τ) curve with a sum of R‖CPE peaks instead, separating them by shape, and recovers both exactly. Each fitted term is a circuit element, so the result drops straight into a circuit — with α fitted rather than inferred from a peak width.

And you can do it by hand, on the plot Deciding how many processes there are and roughly where is a judgement your eye makes better than any criterion — a criterion can only ever say "more terms fit better". So the peaks are draggable: sideways moves a time constant, up and down changes a resistance (a ZARC's apex height is a direct function of R, inverted exactly, so the handle height is the resistance). Click the curve to add a peak where the model falls short, remove one you do not believe, then Refit to optimise the numbers with your count and positions taken as given. The components are drawn dashed against the measured curve throughout, because a peak sitting where there is no shoulder looks obviously wrong on a plot and perfectly reasonable in a table.

The window is explicit about what not to over-read: R is the reliable output, α comes back biased low because the DRT's own regularisation broadens peaks, and the peak count is a judgement rather than a result.

Build a circuit from the DRT 🧩 Ctrl+Shift+D. The DRT already knows how many processes there are and where they sit; this turns that into a starting circuit instead of making you transcribe it. Each peak becomes an R‖CPE branch with R from the peak area, τ from its position, and α recovered from its width — a ZARC has an analytic DRT whose width depends only on α, so the measured width inverts to the exponent that produced it.

Control where the fit searches By default, fitting spreads its restarts across each parameter's whole allowed range, which means the result barely depends on what you entered. A new Search scope control changes that: Anchored draws restarts near your values, Local runs a single fit from them. Useful when you already know roughly where the answer is — and it is what makes a DRT-derived circuit and a sequential sweep worth doing.

Understanding one spectrum

See what a component does Double-click a part on the canvas and the plots show you where it acts: the stretch of the Nyquist curve it governs is redrawn thick and bright, the frequency band it dominates is shaded on Bode and Phase, and faint ghost curves show the spectrum with that component ten times larger and ten times smaller. The status bar puts it in words. Computed from your actual circuit rather than a textbook rule, so it stays correct for nested ladders, transmission lines and custom components. A component that turns out to have no measurable effect says so — a quick way to spot an element left dangling.

Change a parameter by dragging the plot The marker at the point of strongest influence can be dragged, and the component's value follows with the curve updating live. Because one parameter can only move that point along one line through the plane, ZScope uses the part of your drag that lies along it and ignores the rest. One undo step for the whole gesture.

Simulation Report (F6) The fit report stops at the edge of your data. This one covers the full simulation grid, updates live, and labels every row fitted, measured or extrapolated — so a number predicted beyond your measurement is never mistaken for one the fit was constrained by.

Reports that state what they mean

Normalize by your sample geometry An impedance in ohms describes your specimen, not your material. Enter the geometry once and the whole report converts: area-specific resistance, resistivity, conductivity, and for corrosion work the corrosion current density and penetration rate per ASTM G102. Eight applications: solid pellets, single cells and electrodes, membranes, liquid conductivity cells, corrosion and coatings, batteries and supercapacitors, and in-plane thin films.

The conversion follows each quantity's unit rather than its name, so resistances scale up, capacitances and CPE admittances scale down, and a CPE exponent or a relaxation time is correctly left alone. The symmetric-cell convention ASR = R·A/2 applies to the electrode resistance, not the electrolyte, so nothing is halved on its own: you tick which components are electrode processes and every halved parameter is marked (÷2). Geometry is stored per dataset, so a series of pellets each keeps its own.

Effective capacitance from a CPE Q is an admittance in S·sα and means nothing on its own. The report now converts it by both the Brug and Hsu–Mansfeld formulas, with τ and fpeak, and states which resistances each used — they can differ by tens of percent, and which applies is a modelling assumption that belongs to you. The manual used to instruct users to do this by hand.

Choose the imaginary sign, once Reports can show Z″ or −Z″, switched with one checkbox in both report windows. Headers always state which convention you are looking at, experimental and fitted always flip together, and phase follows. Exports record the convention too.

Every value states its unit, and derived values carry their uncertainty The fit report has a Unit column and labelled data columns; units travel into the TXT and JSON exports. Conductivity, icorr and effective capacitance now carry the uncertainty of the parameter they came from — a derived value with a blank error column beside a fitted one that has an error reads as the more certain of the two.

Smaller, but you will notice

DRT against τ or frequency, switchable instantly, with peak markers following. Scientific notation everywhere: type 1e-12, 1E-12, 1*10^-12 or a decimal comma; log-scaled parameters step ten clicks per ...

Read more

ZScope v3.0.0

Choose a tag to compare

@Tecush Tecush released this 05 Sep 08:23
f6723f2
Icon

Stable release for Windows. Includes all core EIS fitting features.

What's New in v3.0.0

ZScope 2.x.x was a very good tool for fitting one spectrum. This release is about everything around that: understanding what your circuit is doing, controlling how it is fitted, deciding which circuit is right, and — the reason for the major version — treating a set of spectra as the series it actually is.

A temperature sweep is no longer twelve unrelated files. Record what varied, fit the whole set in one pass, and read the activation energy off a plot ZScope makes for you. The numbers along the way carry their units, their uncertainties, and the sample geometry that turns ohms into a material property.

✨ New Features

Series analysis

Your spectra are a series, and ZScope now treats them as one A dataset used to be a spectrum and nothing else. It can now record what it was measured at — temperature, bias, elapsed time, concentration, current density, cycle number, partial pressure, pH — entered for the whole set in one grid rather than one dialog per file. Values can be read out of the file names, and if a name carries the number without a unit (cell_A_873_run1.txt), type the first one and ZScope learns where it sits and fills the rest. Units are converted for you: enter 600 °C and an Arrhenius plot receives 873.15 K.

Fit the whole series in one pass ⚡ Fit All Datasets (Ctrl+Shift+A) applies the circuit on the canvas to every spectrum, seeding each fit from the previous one's result. Ordered by your series variable, consecutive spectra differ by one step, so the last fit is genuinely close to the next — much faster and far steadier than a set of independent fits, and the reason the run is sequential rather than parallel. A spectrum that fails is marked and skipped rather than stopping the run, and a failed fit is never carried forward as a seed.

Series Analysis — the physics a single spectrum cannot give you 📈 F7. Plot any fitted parameter against whatever varied and fit a trend: Arrhenius for activation energy in eV and kJ/mol, Mott–Schottky for flat-band potential and dopant density, power law for a reaction order, exponential for a degradation rate, plus plain linear. Y can be a single parameter, the automatic sum of every resistance, or a combination you build by clicking — R2_R + R3_R for a partial sum, Rct_R * Cdl_C for a time constant reported in seconds — and combinations can be named and kept.

The window is careful about what it will and will not claim: datasets you exclude are listed separately from ones that could not supply a point, a series where every spectrum shares the same X value is refused rather than fitted, an uncertainty as large as its own value is reported as not determined instead of printed as a measurement, and a two-point fit says outright that its R² of 1 means nothing.

Getting the model right

Compare circuit models ⚖ Ctrl+M. Adding a component almost always lowers χ² — that is not evidence it is real. Every fit is now remembered as a candidate, ranked by AICc (or AIC, or BIC), with Δ and Akaike weights, so "two arcs or three?" gets an answer instead of a lower residual. Any candidate can be put back on the canvas. Crucially, models fitted to different data are refused rather than ranked: a truncated fit has a lower AIC simply because it has less to explain, and differencing them would name it the winner.

Separate DRT peaks that overlap 🔬 Peak detection finds maxima and integrates between the valleys either side. Two processes less than about a decade apart merge into one bump, and the valley split assigns an arbitrary share of the area to each — which, since the area is the resistance, means a wrong R that does not look wrong, because the total is still right. On two processes 0.3 decades apart, detection reports one of 330 Ω where there are really two, of 120 and 200 Ω.

Deconvolution fits the whole γ(τ) curve with a sum of R‖CPE peaks instead, separating them by shape, and recovers both exactly. Each fitted term is a circuit element, so the result drops straight into a circuit — with α fitted rather than inferred from a peak width.

And you can do it by hand, on the plot Deciding how many processes there are and roughly where is a judgement your eye makes better than any criterion — a criterion can only ever say "more terms fit better". So the peaks are draggable: sideways moves a time constant, up and down changes a resistance (a ZARC's apex height is a direct function of R, inverted exactly, so the handle height is the resistance). Click the curve to add a peak where the model falls short, remove one you do not believe, then Refit to optimise the numbers with your count and positions taken as given. The components are drawn dashed against the measured curve throughout, because a peak sitting where there is no shoulder looks obviously wrong on a plot and perfectly reasonable in a table.

The window is explicit about what not to over-read: R is the reliable output, α comes back biased low because the DRT's own regularisation broadens peaks, and the peak count is a judgement rather than a result.

Build a circuit from the DRT 🧩 Ctrl+Shift+D. The DRT already knows how many processes there are and where they sit; this turns that into a starting circuit instead of making you transcribe it. Each peak becomes an R‖CPE branch with R from the peak area, τ from its position, and α recovered from its width — a ZARC has an analytic DRT whose width depends only on α, so the measured width inverts to the exponent that produced it.

Control where the fit searches By default, fitting spreads its restarts across each parameter's whole allowed range, which means the result barely depends on what you entered. A new Search scope control changes that: Anchored draws restarts near your values, Local runs a single fit from them. Useful when you already know roughly where the answer is — and it is what makes a DRT-derived circuit and a sequential sweep worth doing.

Understanding one spectrum

See what a component does Double-click a part on the canvas and the plots show you where it acts: the stretch of the Nyquist curve it governs is redrawn thick and bright, the frequency band it dominates is shaded on Bode and Phase, and faint ghost curves show the spectrum with that component ten times larger and ten times smaller. The status bar puts it in words. Computed from your actual circuit rather than a textbook rule, so it stays correct for nested ladders, transmission lines and custom components. A component that turns out to have no measurable effect says so — a quick way to spot an element left dangling.

Change a parameter by dragging the plot The marker at the point of strongest influence can be dragged, and the component's value follows with the curve updating live. Because one parameter can only move that point along one line through the plane, ZScope uses the part of your drag that lies along it and ignores the rest. One undo step for the whole gesture.

Simulation Report (F6) The fit report stops at the edge of your data. This one covers the full simulation grid, updates live, and labels every row fitted, measured or extrapolated — so a number predicted beyond your measurement is never mistaken for one the fit was constrained by.

Reports that state what they mean

Normalize by your sample geometry An impedance in ohms describes your specimen, not your material. Enter the geometry once and the whole report converts: area-specific resistance, resistivity, conductivity, and for corrosion work the corrosion current density and penetration rate per ASTM G102. Eight applications: solid pellets, single cells and electrodes, membranes, liquid conductivity cells, corrosion and coatings, batteries and supercapacitors, and in-plane thin films.

The conversion follows each quantity's unit rather than its name, so resistances scale up, capacitances and CPE admittances scale down, and a CPE exponent or a relaxation time is correctly left alone. The symmetric-cell convention ASR = R·A/2 applies to the electrode resistance, not the electrolyte, so nothing is halved on its own: you tick which components are electrode processes and every halved parameter is marked (÷2). Geometry is stored per dataset, so a series of pellets each keeps its own.

Effective capacitance from a CPE Q is an admittance in S·sα and means nothing on its own. The report now converts it by both the Brug and Hsu–Mansfeld formulas, with τ and fpeak, and states which resistances each used — they can differ by tens of percent, and which applies is a modelling assumption that belongs to you. The manual used to instruct users to do this by hand.

Choose the imaginary sign, once Reports can show Z″ or −Z″, switched with one checkbox in both report windows. Headers always state which convention you are looking at, experimental and fitted always flip together, and phase follows. Exports record the convention too.

Every value states its unit, and derived values carry their uncertainty The fit report has a Unit column and labelled data columns; units travel into the TXT and JSON exports. Conductivity, icorr and effective capacitance now carry the uncertainty of the parameter they came from — a derived value with a blank error column beside a fitted one that has an error reads as the more certain of the two.

Smaller, but you will notice

DRT against τ or frequency, switchable instantly, with peak markers following. Scientific notation everywhere: type 1e-12, 1E-12, 1*10^-12 or a decimal comma; log-scaled parameters step ten clicks per ...

Read more

ZScope v2.2.0

Choose a tag to compare

@Tecush Tecush released this 15 Aug 09:43
741ab2e
Icon

Stable release for Windows. Includes all core EIS fitting features.

What's New

This release is about keeping your work. A whole session, every dataset, its circuit, its fits, its DRT results and its import settings, now saves into a single project file and reopens exactly as you left it. Importing got faster too: load a whole batch of files at once instead of one at a time, with columns detected automatically and only the awkward files asking for your attention.

✨ New Features

Save & Open Project Your entire session now fits in one .zscope file: every loaded dataset, its circuit, its fit and Bayesian results, its DRT analysis, and its import column mapping. Reopen it and everything is where you left it. The file is an ordinary ZIP archive with a readable manifest inside, so a colleague can inspect it without ZScope, and numerical data is stored exactly — reloading a project gives you bit-for-bit the same numbers you saved.

Export datasets as separate project files Split a batch into one independently-reopenable project per dataset. Unlike CSV export, which keeps only the raw numbers, each file carries that dataset's circuit, fit and DRT results with it.

Paste data from the clipboard Copy a block of cells in Excel, LibreOffice, Origin or a text editor and press Ctrl+V in ZScope; the import dialog opens on the pasted table and the rest of the procedure is identical to importing a file. The separator and decimal convention are worked out automatically, including semicolon-separated European spreadsheet exports with decimal commas (1,0E+05;10,5;0,21) — a table a naive parser reads off by a factor of ten. Pasted data is saved to a timestamped file so the analysis stays reproducible, rather than depending on a clipboard buffer that has since moved on.

Import several files at once Select or drag in a whole folder's worth of spectra. ZScope reads each one, detects its columns, and shows you a review list with point counts and frequency ranges before anything is loaded. Files from the same instrument share a layout, so a typical batch needs one click. Any file that needs attention opens the full import editor on its own, and one file's column mapping can be applied across the whole batch at once.

Import source tracking Every spectrum records how it was obtained: columns detected automatically, columns chosen by you, or data values edited by hand. It's shown while importing, written to the log, and saved into the project file so months later you can still tell which curves are the file as measured and which carry a human decision.

🔧 Improvements

Drag and drop now asks what you meant Dropping files onto the window offers Add (keep what's loaded and bring the new data in alongside) or Replace (start over from the new data). Previously a drop always added, with no way to say you meant to start fresh. The question is skipped when nothing is loaded yet.

Help manual updated New chapters cover projects and the .zscope format, batch importing, and pasting from the clipboard; the keyboard shortcut reference has been regrouped and now lists every shortcut in the application.

Unsaved work is visible, and you're asked before it's lost The window title marks a session with unsaved changes, and closing the app offers to save first. It only asks when there's genuinely something to lose, so it stays worth reading. If saving fails or you back out of the file dialog, closing is cancelled rather than going ahead without your work.

Standard save shortcuts Ctrl+S saves straight back to the current project file, asking for a location only the first time. Ctrl+Shift+S saves to a new file. Ctrl+Shift+I imports multiple files.

🐛 Fixes

DRT results no longer lost when switching datasets A computed DRT was previously held only for whichever dataset was active, so switching away silently discarded it. DRT results now belong to their dataset, follow it as you switch, and save with the project.

Dropping multiple files imported only one Dragging in several files at once quietly loaded the first and ignored the rest, with no message. All dropped files are now handled, and anything in an unsupported format is reported rather than skipped in silence.


🔄 Also New: From v2.1.0

This release focused on intelligent automation and core performance. We supercharged the circuit proposer with AI capabilities, allowed you to connect your own AI accounts, and significantly improved the evaluation tools for Fitting, DRT, and Kramers–Kronig. Along with new benchmarks and a major boost to fitting speed for large circuits, this update made building and validating your models faster and smarter.

✨ New Features

  • AI-Enhanced Circuit Proposer We've integrated both local and online AI directly into the circuit proposer to help analyze your data and suggest smarter, more accurate equivalent circuit models.
  • Custom Circuit Proposer Accounts You now have the option to import and connect your own AI account directly into the app. This gives you the flexibility to use your personal or enterprise AI accounts to power the circuit proposer.
  • New Performance Benchmarks We've prepared and integrated a new suite of benchmarks to help you rigorously evaluate, compare, and validate the performance of your circuit models.

🔧 Improvements

  • Refined Circuit Proposer Mechanism Beyond the new AI integrations, the underlying architecture of the circuit proposer has been fundamentally improved for better baseline accuracy and reliability.
  • Upgraded Fitting, DRT, and KK Evaluation Core evaluation and validation tools have been enhanced. Expect improved accuracy, better handling of edge cases, and more robust metrics across standard Fitting, Distribution of Relaxation Times (DRT), and Kramers–Kronig (KK) checks.

🐛 Fixes

  • Improved Speed of Fitting Fixed the slow Trust-Region Reflective (TRF) fitting for large circuits. This resolves a major performance bottleneck, drastically improving the overall speed of fitting so that complex and large models process much faster.

🔄 From v2.0.0

This pass focused heavily on data traceability, fitting reliability, and getting your circuit models out of the app and into your reports.

✨ New Features

  • Multi-dataset comparison on import Load several experimental datasets side by side for direct comparison, instead of working through them one at a time.
  • Circuit export as image / vector / notation Export your equivalent circuit as a raster image, vector graphic, or plain-text notation, both from the canvas and inside generated reports. A new toggle lets you choose whether the circuit diagram is included in the report at all.
  • Undo Step back through recent parameter changes, so you can experiment with values without losing a good result.
  • 1:1 view Jump the canvas to true 1:1 scale for precise, undistorted viewing of your circuit.
  • Editable imported data Data brought in through the import dialog can now be edited directly, rather than requiring a fresh re-import to fix a value.
  • Fit scoring settings New settings let you configure how fit quality is scored, so the metric better matches how you evaluate a good fit.

🔧 Improvements

  • Data file name now shown in the UI The name of the currently loaded data file is now visible, so you always know which dataset you're looking at.
  • Expanded instrument format support Broader coverage of potentiostat export formats on import, reducing the need to pre-process files before loading them into ZScope.
  • CPE exponent range The CPE exponent now defaults to the physically standard 0–1 range, with the option to expand it to 0–2 for cases that call for it.
  • Copy applied to the import dialog Copy behavior now works correctly from within the import dialog.
  • Menu bar updated All recent feature additions are now properly wired into the menu bar, so nothing is reachable only through a hidden shortcut.
  • Help manual updated The in-app help manual has been revised to reflect every change in this release.

🐛 Fixes

  • Bayesian MCMC step count mismatch Fixed an inconsistency where the maximum number of MCMC steps shown in the log (25,000) didn't match the actual maximum available in the settings menu (50,000). The two are now consistent.
  • Kramers–Kronig check fixed Resolved an issue affecting the accuracy/behavior of the KK validation check.
  • Export mechanisms fixed across the app Cleaned up and corrected the various export pathways (figures, data, reports) that had inconsistent or broken behavior.

Have a feature request or found something that doesn't work as expected? [Open an issue](https://github.com/Tecush/ZScope/issues), it shapes what comes next.

ZScope v2.1.0

Choose a tag to compare

@Tecush Tecush released this 11 Aug 17:10
fd1c85a
Icon

Stable release for Windows. Includes all core EIS fitting features.

What's New

This release focuses on intelligent automation and core performance. We've supercharged the circuit proposer with AI capabilities, allowed you to connect your own AI accounts, and significantly improved the evaluation tools for Fitting, DRT, and Kramers–Kronig. Along with new benchmarks and a major boost to fitting speed for large circuits, this update makes building and validating your models faster and smarter.

✨ New Features

AI-Enhanced Circuit Proposer — We've integrated both local and online AI directly into the circuit proposer to help analyze your data and suggest smarter, more accurate equivalent circuit models.
Custom Circuit Proposer Accounts — You now have the option to import and connect your own AI account directly into the app. This gives you the flexibility to use your personal or enterprise AI accounts to power the circuit proposer.
New Performance Benchmarks — We've prepared and integrated a new suite of benchmarks to help you rigorously evaluate, compare, and validate the performance of your circuit models.

🔧 Improvements

Refined Circuit Proposer Mechanism — Beyond the new AI integrations, the underlying architecture of the circuit proposer has been fundamentally improved for better baseline accuracy and reliability.
Upgraded Fitting, DRT, and KK Evaluation — Core evaluation and validation tools have been enhanced. Expect improved accuracy, better handling of edge cases, and more robust metrics across standard Fitting, Distribution of Relaxation Times (DRT), and Kramers–Kronig (KK) checks.

🐛 Fixes

Improved Speed of Fitting — Fixed the slow Trust-Region Reflective (TRF) fitting for large circuits. This resolves a major performance bottleneck, drastically improving the overall speed of fitting so that complex and large models process much faster.

🔄 Also New: From our previous release

Here is everything else that is new in ZScope right now. This recent pass focused heavily on data traceability, fitting reliability, and getting your circuit models out of the app and into your reports.

✨ New Features

  • Multi-dataset comparison on import — Load several experimental datasets side by side for direct comparison, instead of working through them one at a time.
  • Circuit export as image / vector / notation — Export your equivalent circuit as a raster image, vector graphic, or plain-text notation, both from the canvas and inside generated reports. A new toggle lets you choose whether the circuit diagram is included in the report at all.
  • Undo — Step back through recent parameter changes, so you can experiment with values without losing a good result.
  • 1:1 view — Jump the canvas to true 1:1 scale for precise, undistorted viewing of your circuit.
  • Editable imported data — Data brought in through the import dialog can now be edited directly, rather than requiring a fresh re-import to fix a value.
  • Fit scoring settings — New settings let you configure how fit quality is scored, so the metric better matches how you evaluate a good fit.

🔧 Improvements

  • Data file name now shown in the UI — The name of the currently loaded data file is now visible, so you always know which dataset you're looking at.
  • Expanded instrument format support — Broader coverage of potentiostat export formats on import, reducing the need to pre-process files before loading them into ZScope.
  • CPE exponent range — The CPE exponent now defaults to the physically standard 0–1 range, with the option to expand it to 0–2 for cases that call for it.
  • Copy applied to the import dialog — Copy behavior now works correctly from within the import dialog.
  • Menu bar updated — All recent feature additions are now properly wired into the menu bar, so nothing is reachable only through a hidden shortcut.
  • Help manual updated — The in-app help manual has been revised to reflect every change in this release.

🐛 Fixes

  • Bayesian MCMC step count mismatch — Fixed an inconsistency where the maximum number of MCMC steps shown in the log (25,000) didn't match the actual maximum available in the settings menu (50,000). The two are now consistent.
  • Kramers–Kronig check fixed — Resolved an issue affecting the accuracy/behavior of the KK validation check.
  • Export mechanisms fixed across the app — Cleaned up and corrected the various export pathways (figures, data, reports) that had inconsistent or broken behavior.

Have a feature request or found something that doesn't work as expected? [Open an issue](https://github.com/Tecush/ZScope/issues) — it shapes what comes next.

ZScope v2.0.0

Choose a tag to compare

@Tecush Tecush released this 06 Aug 17:30
d25ab63
Icon

Stable release for Windows. Includes all core EIS fitting features.

What's New

This release focuses on data traceability, fitting reliability, and getting your circuit models out of ZScope and into your reports — along with a broad pass on usability and export mechanics across the app.

✨ New Features

  • Multi-dataset comparison on import — Load several experimental datasets side by side for direct comparison, instead of working through them one at a time.
  • Circuit export as image / vector / notation — Export your equivalent circuit as a raster image, vector graphic, or plain-text notation, both from the canvas and inside generated reports. A new toggle lets you choose whether the circuit diagram is included in the report at all.
  • Undo — Step back through recent parameter changes, so you can experiment with values without losing a good result.
  • 1:1 view — Jump the canvas to true 1:1 scale for precise, undistorted viewing of your circuit.
  • Editable imported data — Data brought in through the import dialog can now be edited directly, rather than requiring a fresh re-import to fix a value.
  • Fit scoring settings — New settings let you configure how fit quality is scored, so the metric better matches how you evaluate a good fit.

🔧 Improvements

  • Data file name now shown in the UI — The name of the currently loaded data file is now visible, so you always know which dataset you're looking at.
  • Expanded instrument format support — Broader coverage of potentiostat export formats on import, reducing the need to pre-process files before loading them into ZScope.
  • CPE exponent range — The CPE exponent now defaults to the physically standard 0–1 range, with the option to expand it to 0–2 for cases that call for it.
  • Copy applied to the import dialog — Copy behavior now works correctly from within the import dialog.
  • Menu bar updated — All recent feature additions are now properly wired into the menu bar, so nothing is reachable only through a hidden shortcut.
  • Help manual updated — The in-app help manual has been revised to reflect every change in this release.

🐛 Fixes

  • Bayesian MCMC step count mismatch — Fixed an inconsistency where the maximum number of MCMC steps shown in the log (25,000) didn't match the actual maximum available in the settings menu (50,000). The two are now consistent.
  • Kramers–Kronig check fixed — Resolved an issue affecting the accuracy/behavior of the KK validation check.
  • Export mechanisms fixed across the app — Cleaned up and corrected the various export pathways (figures, data, reports) that had inconsistent or broken behavior.

Have a feature request or found something that doesn't work as expected? [Open an issue](https://github.com/Tecush/ZScope/issues) — it shapes what comes next.

ZScope v1.3.0

Choose a tag to compare

@Tecush Tecush released this 09 Jul 18:12
fd12f2f
Icon Stable release for Windows. Includes all core EIS fitting features.

What's New:

Add DRT measurement.
Auto arrange the Frequency range.
Fix effective parameters range.
Fix bugs in report form.

ZScope v1.2.0

Choose a tag to compare

@Tecush Tecush released this 02 Jun 19:16
407c1ae
Icon Stable release for Windows. Includes all core EIS fitting features.

What's New

Add terminate mechanism to fitting process.
Improve user_component canvas.
Improve import dialog.
Add more supported file formats.
Improve fitting mechanism and distinguish components.
Add graph setting to the plots.

ZScope v1.0.0 - Initial Release

Choose a tag to compare

@Tecush Tecush released this 19 May 22:42
2d0015d
Icon Stable release for Windows. Includes all core EIS fitting features.