Add splice_cycles to electrochemistry module
This commit is contained in:
parent
d95b670af7
commit
b8cd8e81af
2 changed files with 64 additions and 19 deletions
|
|
@ -111,7 +111,7 @@ def process_batsmall_data(df, options=None):
|
||||||
'''
|
'''
|
||||||
|
|
||||||
required_options = ['splice_cycles', 'molecular_weight', 'reverse_discharge', 'units']
|
required_options = ['splice_cycles', 'molecular_weight', 'reverse_discharge', 'units']
|
||||||
default_options = {'splice_cycles': None, 'molecular_weight': None, 'reverse_discharge': False, 'units': None}
|
default_options = {'splice_cycles': False, 'molecular_weight': None, 'reverse_discharge': False, 'units': None}
|
||||||
|
|
||||||
if not options:
|
if not options:
|
||||||
options = default_options
|
options = default_options
|
||||||
|
|
@ -128,6 +128,10 @@ def process_batsmall_data(df, options=None):
|
||||||
|
|
||||||
options['units'] = new_units
|
options['units'] = new_units
|
||||||
|
|
||||||
|
|
||||||
|
if options['splice_cycles']:
|
||||||
|
df = splice_cycles(df=df, kind='batsmall')
|
||||||
|
|
||||||
# Replace NaN with empty string in the Comment-column and then remove all steps where the program changes - this is due to inconsistent values for current
|
# Replace NaN with empty string in the Comment-column and then remove all steps where the program changes - this is due to inconsistent values for current
|
||||||
df[["comment"]] = df[["comment"]].fillna(value={'comment': ''})
|
df[["comment"]] = df[["comment"]].fillna(value={'comment': ''})
|
||||||
df = df[df["comment"].str.contains("program")==False]
|
df = df[df["comment"].str.contains("program")==False]
|
||||||
|
|
@ -142,7 +146,7 @@ def process_batsmall_data(df, options=None):
|
||||||
# Loop through all the cycling steps, change the current and capacities in the
|
# Loop through all the cycling steps, change the current and capacities in the
|
||||||
for i in range(df["count"].max()):
|
for i in range(df["count"].max()):
|
||||||
|
|
||||||
sub_df = df.loc[df['count'] == i].copy()
|
sub_df = df.loc[df['count'] == i+1].copy()
|
||||||
|
|
||||||
sub_df.loc[dchg_mask, 'current'] *= -1
|
sub_df.loc[dchg_mask, 'current'] *= -1
|
||||||
sub_df.loc[dchg_mask, 'specific_capacity'] *= -1
|
sub_df.loc[dchg_mask, 'specific_capacity'] *= -1
|
||||||
|
|
@ -174,6 +178,61 @@ def process_batsmall_data(df, options=None):
|
||||||
return cycles
|
return cycles
|
||||||
|
|
||||||
|
|
||||||
|
def splice_cycles(df, kind):
|
||||||
|
|
||||||
|
if kind == 'batsmall':
|
||||||
|
|
||||||
|
# Creates masks for charge and discharge curves
|
||||||
|
chg_mask = df['current'] >= 0
|
||||||
|
dchg_mask = df['current'] < 0
|
||||||
|
|
||||||
|
# Get the number of cycles in the dataset
|
||||||
|
max_count = df["count"].max()
|
||||||
|
|
||||||
|
# Loop through all the cycling steps, change the current and capacities in the
|
||||||
|
for i in range(df["count"].max()):
|
||||||
|
sub_df = df.loc[df['count'] == i+1]
|
||||||
|
sub_df_chg = sub_df.loc[chg_mask]
|
||||||
|
#sub_df_dchg = sub_df.loc[dchg_mask]
|
||||||
|
|
||||||
|
# get indices where the program changed
|
||||||
|
chg_indices = sub_df_chg[sub_df_chg["comment"].str.contains("program")==True].index.to_list()
|
||||||
|
|
||||||
|
# Delete first item if first cycle after rest (this will just be the start of the cycling)
|
||||||
|
if i+1 == 1:
|
||||||
|
del chg_indices[0]
|
||||||
|
|
||||||
|
|
||||||
|
if chg_indices:
|
||||||
|
last_chg = chg_indices.pop()
|
||||||
|
|
||||||
|
|
||||||
|
#dchg_indices = sub_df_dchg[sub_df_dchg["comment"].str.contains("program")==True].index.to_list()
|
||||||
|
#if dchg_indices:
|
||||||
|
# del dchg_indices[0]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if chg_indices:
|
||||||
|
for i in chg_indices:
|
||||||
|
add = df['specific_capacity'].iloc[i-1]
|
||||||
|
df['specific_capacity'].iloc[i:last_chg] = df['specific_capacity'].iloc[i:last_chg] + add
|
||||||
|
|
||||||
|
#if dchg_indices:
|
||||||
|
# for i in dchg_indices:
|
||||||
|
# add = df['specific_capacity'].iloc[i-1]
|
||||||
|
# df['specific_capacity'].iloc[i:last_dchg] = df['specific_capacity'].iloc[i:last_dchg] + add
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return df
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def process_neware_data(df, options=None):
|
def process_neware_data(df, options=None):
|
||||||
|
|
||||||
""" Takes data from NEWARE in a DataFrame as read by read_neware() and converts units, adds columns and splits into cycles.
|
""" Takes data from NEWARE in a DataFrame as read by read_neware() and converts units, adds columns and splits into cycles.
|
||||||
|
|
@ -217,7 +276,7 @@ def process_neware_data(df, options=None):
|
||||||
# Loop through all the cycling steps, change the current and capacities in the
|
# Loop through all the cycling steps, change the current and capacities in the
|
||||||
for i in range(df["cycle"].max()):
|
for i in range(df["cycle"].max()):
|
||||||
|
|
||||||
sub_df = df.loc[df['cycle'] == i].copy()
|
sub_df = df.loc[df['cycle'] == i+1].copy()
|
||||||
|
|
||||||
#sub_df.loc[dchg_mask, 'current'] *= -1
|
#sub_df.loc[dchg_mask, 'current'] *= -1
|
||||||
#sub_df.loc[dchg_mask, 'capacity'] *= -1
|
#sub_df.loc[dchg_mask, 'capacity'] *= -1
|
||||||
|
|
@ -516,21 +575,6 @@ def convert_datetime_string(datetime_string, reference, unit='s'):
|
||||||
|
|
||||||
return time
|
return time
|
||||||
|
|
||||||
def splice_cycles(first, second):
|
|
||||||
|
|
||||||
first_chg = first[0]
|
|
||||||
first_dchg = first[1]
|
|
||||||
first
|
|
||||||
|
|
||||||
second_chg = second[0]
|
|
||||||
second_dchg = second[1]
|
|
||||||
|
|
||||||
chg_df = first[0].append(second[0])
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -315,7 +315,8 @@ def prettify_gc_plot(fig, ax, options=None):
|
||||||
############################# LEGEND #############################
|
############################# LEGEND #############################
|
||||||
##################################################################
|
##################################################################
|
||||||
|
|
||||||
ax.get_legend().remove()
|
if ax.get_legend():
|
||||||
|
ax.get_legend().remove()
|
||||||
|
|
||||||
return fig, ax
|
return fig, ax
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue