From 7f9283f306bd0a6c9528f4265c5cc8bdf612f442 Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 27 Jul 2020 13:57:09 +0200 Subject: [PATCH 1/5] fixed maxfev argument in minimize function --- PyEIS/PyEIS.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PyEIS/PyEIS.py b/PyEIS/PyEIS.py index 78b4832..f4eb6b3 100644 --- a/PyEIS/PyEIS.py +++ b/PyEIS/PyEIS.py @@ -4024,7 +4024,7 @@ def EIS_fit(self, params, circuit, weight_func='modulus', nan_policy='raise'): self.circuit_fit = [] self.fit_E = [] for i in range(len(self.df)): - self.Fit.append(minimize(leastsq_errorfunc, params, method='leastsq', args=(self.df[i].w.values, self.df[i].re.values, self.df[i].im.values, circuit, weight_func), nan_policy=nan_policy, maxfev=9999990)) + self.Fit.append(minimize(leastsq_errorfunc, params, method='leastsq', args=(self.df[i].w.values, self.df[i].re.values, self.df[i].im.values, circuit, weight_func), nan_policy=nan_policy, max_nfev=9999990)) print(report_fit(self.Fit[i])) self.fit_E.append(np.average(self.df[i].E_avg)) @@ -6023,4 +6023,4 @@ def EIS_sim_fit(self, params, circuit, weight_func='modulus', nan_policy='raise' #print() #print('---> PyEIS Core Loaded (v. 0.5.7 - 02/01/19)') -#print() \ No newline at end of file +#print() From b6f181c21a6eeb5c04ee59fc1ec6e58c4094fbf9 Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 27 Jul 2020 14:39:16 +0200 Subject: [PATCH 2/5] fixed issue #3 --- PyEIS/PyEIS.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PyEIS/PyEIS.py b/PyEIS/PyEIS.py index f4eb6b3..4dff31a 100644 --- a/PyEIS/PyEIS.py +++ b/PyEIS/PyEIS.py @@ -4698,7 +4698,7 @@ def EIS_plot(self, bode='off', fitting='off', rr='off', nyq_xlim='none', nyq_yli for i in range(len(self.df)): ax.plot(self.df[i].re, self.df[i].im, marker='o', ms=4, lw=2, color=colors[i], ls='-', label=self.label_cycleno[i]) if fitting == 'on': - ax.plot(self.circuit_fit[i].real, -self.circuit_fit[i].imag, lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='') + ax.plot([i.real for i in self.circuit_fit[i]], [-i.imag for i in self.circuit_fit[i]], lw=0, marker='o', ms=8, mec='r', mew=1, mfc='none', label='') ### Bode Plot if bode=='on': From 4dd02588d914442c1740591e2c1aed6c23730521 Mon Sep 17 00:00:00 2001 From: n-bock Date: Mon, 27 Jul 2020 15:29:39 +0200 Subject: [PATCH 3/5] adapted suggested solution from issue #2g --- PyEIS/PyEIS.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PyEIS/PyEIS.py b/PyEIS/PyEIS.py index 4dff31a..fb81223 100644 --- a/PyEIS/PyEIS.py +++ b/PyEIS/PyEIS.py @@ -57,7 +57,7 @@ def freq_gen(f_start, f_stop, pts_decade=7): [1] = Angular frequency range [1/s] ''' f_decades = np.log10(f_start) - np.log10(f_stop) - f_range = np.logspace(np.log10(f_start), np.log10(f_stop), num=np.around(pts_decade*f_decades), endpoint=True) + f_range = np.logspace(np.log10(f_start), np.log10(f_stop), num=np.around(pts_decade*f_decades).astype(int), endpoint=True) w_range = 2 * np.pi * f_range return f_range, w_range From 8fedcd70f5a4845fa0ae2418efe3dc787fb7d5d6 Mon Sep 17 00:00:00 2001 From: n-bock Date: Mon, 27 Jul 2020 21:02:55 +0200 Subject: [PATCH 4/5] added txt import functionality and removed unneeded dependencies --- PyEIS/PyEIS.py | 34 +++++++++++++++------------------- PyEIS/PyEIS_Data_extraction.py | 24 ++++++++++++++++++++---- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/PyEIS/PyEIS.py b/PyEIS/PyEIS.py index fb81223..f084626 100644 --- a/PyEIS/PyEIS.py +++ b/PyEIS/PyEIS.py @@ -9,27 +9,23 @@ from __future__ import division import pandas as pd import numpy as np +import mpmath as mp +import matplotlib as mpl +import seaborn as sns from scipy.constants import codata from pylab import * -from scipy.optimize import curve_fit -import mpmath as mp -from lmfit import minimize, Minimizer, Parameters, Parameter, report_fit +from lmfit import minimize, report_fit + #from scipy.optimize import leastsq pd.options.mode.chained_assignment = None #Plotting -import matplotlib as mpl -import matplotlib.pyplot as plt -from matplotlib.ticker import LinearLocator, FormatStrFormatter -import seaborn as sns -import matplotlib.ticker as mtick mpl.rc('mathtext', fontset='stixsans', default='regular') mpl.rcParams.update({'axes.labelsize':22}) mpl.rc('xtick', labelsize=16) mpl.rc('ytick', labelsize=16) mpl.rc('legend',fontsize=14) -from scipy.constants import codata F = codata.physical_constants['Faraday constant'][0] Rg = codata.physical_constants['molar gas constant'][0] @@ -2230,22 +2226,22 @@ class EIS_exp: def __init__(self, path, data, cycle='off', mask=['none','none']): self.df_raw0 = [] self.cycleno = [] - for j in range(len(data)): - if data[j].find(".mpt") != -1: #file is a .mpt file - self.df_raw0.append(extract_mpt(path=path, EIS_name=data[j])) #reads all datafiles - elif data[j].find(".DTA") != -1: #file is a .dta file - self.df_raw0.append(extract_dta(path=path, EIS_name=data[j])) #reads all datafiles - elif data[j].find(".z") != -1: #file is a .z file - self.df_raw0.append(extract_solar(path=path, EIS_name=data[j])) #reads all datafiles + for j, f in enumerate(data, start=0): + if f.endswith('mpt'): #file is a .mpt file + self.df_raw0.append(extract_mpt(path=path, EIS_name=f)) #reads all datafiles + elif f.endswith('DTA'): #file is a .dta file + self.df_raw0.append(extract_dta(path=path, EIS_name=f)) #reads all datafiles + elif f.endswith('z'): #file is a .z file + self.df_raw0.append(extract_solar(path=path, EIS_name=f)) #reads all datafiles + elif f.endswith('txt'): + self.df_raw0.append(extract_csv(path=path, EIS_name=f)) else: print('Data file(s) could not be identified') - self.cycleno.append(self.df_raw0[j].cycle_number) if np.min(self.cycleno[j]) <= np.max(self.cycleno[j-1]): if j > 0: #corrects cycle_number except for the first data file self.df_raw0[j].update({'cycle_number': self.cycleno[j]+np.max(self.cycleno[j-1])}) #corrects cycle number -# else: -# print('__init__ Error (#1)') + #currently need to append a cycle_number coloumn to gamry files diff --git a/PyEIS/PyEIS_Data_extraction.py b/PyEIS/PyEIS_Data_extraction.py index 07dc955..fc7c9ec 100644 --- a/PyEIS/PyEIS_Data_extraction.py +++ b/PyEIS/PyEIS_Data_extraction.py @@ -13,7 +13,6 @@ from __future__ import division import pandas as pd import numpy as np -from scipy.constants import codata #### Extracting .mpt files with PEIS or GEIS data def correct_text_EIS(text_header): @@ -142,6 +141,23 @@ def extract_solar(path, EIS_name): data = data.assign(cycle_number = 1.0) return data -# -#print() -#print('---> Data Extraction Script Loaded (v. 0.0.2 - 06/27/18)') \ No newline at end of file + +def extract_csv(path, EIS_name, sep='\t'): + ''' + Extract data from simple csv style file. + + The standard seperator is TAB and one row with column names. We want the columns + to named in a unified way: f, re, im, Z_mag, Y_phase. + ''' + + raw = pd.read_csv(path+EIS_name, sep='\t') + data = raw.rename(columns={'Frequency': 'f', + 'Z_re': 're', + 'Z_img': 'im', + 'Z_E': 'Z_mag', + 'Phase_E': 'Y_phase'}) + + data = data.assign(cycle_number = 1.0) + + return data + From 8f106943f5e0f9b2cdfea7472c0775e1572dec5b Mon Sep 17 00:00:00 2001 From: n-bock Date: Mon, 27 Jul 2020 21:04:35 +0200 Subject: [PATCH 5/5] added reference data for new file type --- Tutorials/data/ex3.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 Tutorials/data/ex3.txt diff --git a/Tutorials/data/ex3.txt b/Tutorials/data/ex3.txt new file mode 100755 index 0000000..bf4bd7f --- /dev/null +++ b/Tutorials/data/ex3.txt @@ -0,0 +1,21 @@ +Frequency Z_E Phase_E Z_re Z_img +9.99999974737875E-5 100583.6953125 -0.279304325580597 27.0720300383251 7.764292820412 +2.64000002061948E-4 94564.09375 -0.30045759677887 25.2917649727993 7.83634239799212 +6.94999995175749E-4 74765.84375 -0.277011215686798 20.1363550823005 5.72519214566868 +0.00182999996468425 60787.3515625 -0.291797459125519 16.3009754118168 4.89634619343949 +0.00482999999076128 50841.2578125 -0.292887330055237 13.6293204344493 4.11005724755008 +0.012699999846518 41034.671875 -0.373376429080963 10.6980794680164 4.19100089402257 +0.0335999988019466 32260.626953125 -0.488816767930985 7.97511565518254 4.24171869846458 +0.0886000022292137 23141.171875 -0.673698782920837 5.06387704288688 4.04245395981071 +0.233999997377396 14394.5966796875 -0.830590903759003 2.71832007079357 2.97582963502232 +0.61599999666214 8027.01171875 -0.968166828155518 1.27394300153653 1.85165059664597 +1.62000000476837 4135.037109375 -1.06667029857636 0.559271484191949 1.01377527470784 +4.28000020980835 2047.56225585938 -1.12656533718109 0.246390984067987 0.517672058733144 +11.3000001907349 1010.5595703125 -1.14149475097656 0.117776716105174 0.257280251327722 +29.7999992370605 493.506958007813 -1.1841938495636 0.0521006506280274 0.127983487310445 +78.5544738769531 229.480880737305 -1.19812071323395 0.0233956747070571 0.0598439806122616 +207.120727539063 104.836708068848 -1.12022435665131 0.012783215532553 0.0264246675054082 +546.105041503906 52.2368049621582 -0.889707863330841 0.00920929245798327 0.0113629988017006 +1439.88830566406 33.1943054199219 -0.550724923610687 0.00792018481248082 0.00486380987101006 +3796.48291015625 27.5287494659424 -0.273702025413513 0.00742113193798794 0.0020834666438922 +10010 25.8860626220703 -0.116779141128063 0.00719873118873418 8.44504077744677E-4