Skip to content

Commit 5247d7e

Browse files
committed
Removed unused parts of summarise_herg_export.py
1 parent 56b91c8 commit 5247d7e

2 files changed

Lines changed: 3 additions & 310 deletions

File tree

pcpostprocess/scripts/run_herg_qc.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def starmap(n, func, iterable):
3535
"""
3636
if n == 1:
3737
return [func(*args) for args in iterable]
38-
else:
38+
else: # pragma: no cover
3939
with multiprocessing.Pool(n, maxtasksperchild=1) as pool:
4040
return pool.starmap(func, iterable)
4141

@@ -1300,5 +1300,5 @@ def fit_func(x, args=None):
13001300
return (d, b), f, peak_current if res else (np.nan, np.nan), np.nan, peak_current
13011301

13021302

1303-
if __name__ == '__main__':
1303+
if __name__ == '__main__': # pragma: no cover
13041304
run_from_command_line()

pcpostprocess/scripts/summarise_herg_export.py

Lines changed: 1 addition & 308 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,6 @@
1616
from pcpostprocess.scripts.run_herg_qc import create_qc_table
1717

1818

19-
def get_wells_list(input_dir, experiment_name):
20-
regex = re.compile(f"{experiment_name}-([a-z|A-Z|0-9]*)-([A-Z][0-9][0-9])-after")
21-
wells = []
22-
23-
for f in filter(regex.match, os.listdir(input_dir)):
24-
well = re.search(regex, f).groups(2)[1]
25-
if well not in wells:
26-
wells.append(well)
27-
return list(np.unique(wells))
28-
29-
30-
def get_protocol_list(input_dir, experiment_name):
31-
regex = re.compile(f"{experiment_name}-([a-z|A-Z|0-9]*)-([A-Z][0-9][0-9])-after")
32-
protocols = []
33-
for f in filter(regex.match, os.listdir(input_dir)):
34-
well = re.search(regex, f).groups(3)[0]
35-
if protocols not in protocols: # TODO This has GOT to be a bug
36-
protocols.append(well)
37-
return list(np.unique(protocols))
38-
39-
4019
def run_from_command_line(): # pragma: no cover
4120
"""
4221
Parses arguments from the command line and then ???
@@ -147,7 +126,6 @@ def run(data_path, output_path, experiment_name, reversal_potential=None,
147126
leak_parameters_df['passed QC'] = [
148127
well in passed_wells for well in leak_parameters_df.well]
149128

150-
# do_scatter_matrices(leak_parameters_df, qc_vals_df, output_path, reversal_potential)
151129
plot_histograms(leak_parameters_df, output_path, reversal_potential, figsize)
152130

153131

@@ -342,192 +320,6 @@ def label_func(p, s):
342320
plt.close(fig)
343321

344322

345-
def do_combined_plots(data_path, output_path, experiment_name,
346-
leak_parameters_df, passed_wells, figsize=None):
347-
"""
348-
???
349-
350-
@param data_path
351-
@param output_path
352-
@param experiment_name
353-
@param leak_parameters_df
354-
@param passed_wells
355-
@param figsize
356-
357-
"""
358-
fig = plt.figure(figsize=figsize, constrained_layout=True)
359-
ax = fig.subplots()
360-
361-
wells = [well for well in leak_parameters_df.well.unique() if well in passed_wells]
362-
363-
protocol_overlaid_dir = os.path.join(output_path, 'overlaid_by_protocol')
364-
if not os.path.exists(protocol_overlaid_dir):
365-
os.makedirs(protocol_overlaid_dir)
366-
367-
leak_parameters_df = leak_parameters_df[leak_parameters_df.well.isin(passed_wells)]
368-
369-
palette = sns.color_palette('husl', len(leak_parameters_df.groupby(['well', 'sweep'])))
370-
for protocol in leak_parameters_df.protocol.unique():
371-
pname = protocol
372-
if pname == 'staircaseramp1':
373-
pname = 'staircaseramp'
374-
elif pname == 'staircaseramp1_2':
375-
pname = 'staircaseramp_2'
376-
377-
times_fname = os.path.join(data_path, 'traces',
378-
f'{experiment_name}-{pname}-times.csv')
379-
try:
380-
times = np.loadtxt(times_fname).astype(np.float64).flatten()
381-
except FileNotFoundError:
382-
continue
383-
384-
times = times.flatten().astype(np.float64)
385-
386-
reference_current = None
387-
388-
i = 0
389-
for sweep in leak_parameters_df.sweep.unique():
390-
for well in wells:
391-
fname = f"{experiment_name}-{pname}-{well}-sweep{sweep}.csv"
392-
try:
393-
data = pd.read_csv(os.path.join(data_path, 'traces', fname))
394-
395-
except FileNotFoundError:
396-
continue
397-
398-
current = data['current'].values.flatten().astype(np.float64)
399-
400-
if reference_current is None:
401-
reference_current = current
402-
403-
scaled_current = scale_to_reference(current, reference_current)
404-
col = palette[i]
405-
i += 1
406-
ax.plot(times, scaled_current, color=col, alpha=.5, label=well)
407-
408-
fig_fname = f"{protocol}_overlaid_traces_scaled"
409-
fig.suptitle(f"{protocol}: all wells")
410-
ax.set_xlabel(r'time / ms')
411-
ax.set_ylabel('current scaled to reference trace')
412-
ax.legend()
413-
fig.savefig(os.path.join(protocol_overlaid_dir, fig_fname))
414-
ax.cla()
415-
416-
plt.close(fig)
417-
418-
palette = sns.color_palette('husl',
419-
len(leak_parameters_df.groupby(['protocol', 'sweep'])))
420-
421-
fig2 = plt.figure(figsize=figsize, constrained_layout=True)
422-
axs2 = fig2.subplots(1, 2, sharey=True)
423-
424-
wells_overlaid_dir = os.path.join(output_path, 'overlaid_by_well')
425-
if not os.path.exists(wells_overlaid_dir):
426-
os.makedirs(wells_overlaid_dir)
427-
428-
for well in passed_wells:
429-
i = 0
430-
for sweep in leak_parameters_df.sweep.unique():
431-
for protocol in leak_parameters_df.protocol.unique():
432-
pname = protocol
433-
if pname == 'staircaseramp1':
434-
pname = 'staircaseramp'
435-
elif pname == 'staircaseramp1_2':
436-
pname = 'staircaseramp_2'
437-
438-
times_fname = f'{experiment_name}-{pname}-times.csv'
439-
times = np.loadtxt(os.path.join(data_path, 'traces', times_fname))
440-
times = times.flatten().astype(np.float64)
441-
442-
fname = f"{experiment_name}-{protocol}-{well}-sweep{sweep}.csv"
443-
try:
444-
data = pd.read_csv(os.path.join(data_path, 'traces', fname))
445-
except FileNotFoundError:
446-
continue
447-
448-
current = data['current'].values.flatten().astype(np.float64)
449-
450-
indices_pre_ramp = times < 3000
451-
452-
col = palette[i]
453-
i += 1
454-
455-
label = f"{protocol}_sweep{sweep}"
456-
457-
axs2[0].plot(times[indices_pre_ramp], current[indices_pre_ramp], color=col, alpha=.5,
458-
label=label)
459-
460-
indices_post_ramp = times > (times[-1] - 2000)
461-
post_times = times[indices_post_ramp].copy()
462-
post_times = post_times - post_times[0] + 5000
463-
axs2[1].plot(post_times, current[indices_post_ramp], color=col, alpha=.5,
464-
label=label)
465-
466-
axs2[0].legend()
467-
axs2[0].set_title('before drug')
468-
axs2[0].set_xlabel(r'time / ms')
469-
axs2[1].set_title('after drug')
470-
axs2[1].set_xlabel(r'time / ms')
471-
472-
axs2[0].set_ylabel('current / pA')
473-
axs2[1].set_ylabel('current / pA')
474-
475-
fig2_fname = f"{well}_overlaid_traces"
476-
fig2.suptitle(f"Leak ramp comparison: {well}")
477-
478-
fig2.savefig(os.path.join(wells_overlaid_dir, fig2_fname))
479-
axs2[0].cla()
480-
axs2[1].cla()
481-
482-
plt.close(fig2)
483-
484-
485-
def do_scatter_matrices(df, qc_df, output_path, reversal_potential=None):
486-
"""
487-
???
488-
489-
@param df
490-
@param qc_df
491-
@param output_path
492-
@reversal_potential
493-
"""
494-
grid = sns.pairplot(data=df, hue='passed QC', diag_kind='hist',
495-
plot_kws={'alpha': 0.4, 'edgecolor': None},
496-
hue_order=[True, False])
497-
grid.savefig(os.path.join(output_path, 'scatter_matrix_by_QC'))
498-
499-
if reversal_potential is not None:
500-
true_reversal = reversal_potential
501-
else:
502-
# TODO Clarify in plot label!
503-
true_reversal = df['E_rev'].values.mean()
504-
505-
df['hue'] = df.E_rev.to_numpy() > true_reversal
506-
grid = sns.pairplot(data=df, hue='hue', diag_kind='hist',
507-
plot_kws={'alpha': 0.4, 'edgecolor': None},
508-
hue_order=[True, False])
509-
grid.savefig(os.path.join(output_path, 'scatter_matrix_by_reversal.png'))
510-
511-
# Now do artefact parameters only
512-
if 'drug' in qc_df:
513-
qc_df = qc_df[qc_df.drug == 'before']
514-
515-
first_sweep = sorted(list(qc_df.sweep.unique()))[0]
516-
qc_df = qc_df[(qc_df.protocol == 'staircaseramp1') &
517-
(qc_df.sweep == first_sweep)]
518-
if 'drug' in qc_df:
519-
qc_df = qc_df[qc_df.drug == 'before']
520-
521-
qc_df = qc_df.set_index(['protocol', 'well', 'sweep'])
522-
qc_df = qc_df[['Rseries', 'Cm', 'Rseal', 'passed QC']]
523-
# qc_df['R_leftover'] = df['R_leftover']
524-
grid = sns.pairplot(data=qc_df, diag_kind='hist', plot_kws={'alpha': .4,
525-
'edgecolor': None},
526-
hue='passed QC', hue_order=[True, False])
527-
528-
grid.savefig(os.path.join(output_path, 'scatter_matrix_QC_params_by_QC'))
529-
530-
531323
def plot_reversal_spread(df, output_path, figsize=None):
532324
"""
533325
???
@@ -860,105 +652,6 @@ def plot_histograms(df, output_path, reversal_potential=None, figsize=None):
860652
plt.close(fig)
861653

862654

863-
def overlay_reversal_plots(
864-
data_path, output_path, experiment_name, leak_parameters_df, wells,
865-
reversal_potential=None, figsize=None):
866-
"""
867-
???
868-
869-
@param data_path
870-
@param output_path
871-
@param experiment_name
872-
@param leak_parameters_df
873-
@param reversal_potential
874-
@param figsize
875-
"""
876-
fig = plt.figure(figsize=figsize, constrained_layout=True)
877-
ax = fig.subplots()
878-
879-
palette = sns.color_palette('husl', len(leak_parameters_df.groupby(['protocol', 'sweep'])))
880-
881-
sub_dir = os.path.join(output_path, 'overlaid_reversal_plots')
882-
883-
if not os.path.exists(sub_dir):
884-
os.makedirs(sub_dir)
885-
886-
protocols_to_plot = ['staircaseramp1']
887-
sweeps_to_plot = [1]
888-
889-
for well in wells:
890-
# Setup figure
891-
if False in leak_parameters_df[leak_parameters_df.well == well]['passed QC'].values:
892-
continue
893-
i = 0
894-
for protocol in protocols_to_plot:
895-
if protocol == np.nan:
896-
continue
897-
898-
pname = protocol
899-
if pname == 'staircaseramp1':
900-
pname = 'staircaseramp'
901-
elif pname == 'staircaseramp1_2':
902-
pname = 'staircaseramp_2'
903-
voltage_fname = os.path.join(data_path, 'traces',
904-
f'{experiment_name}-{pname}-voltages.csv')
905-
voltages = pd.read_csv(voltage_fname)['voltage'].values.flatten()
906-
907-
times_fname = f"{experiment_name}-{pname}-times.csv"
908-
times = np.loadtxt(os.path.join(data_path, 'traces', times_fname))
909-
times = times.flatten().astype(np.float64)
910-
911-
# First, find the reversal ramp
912-
json_name = os.path.join(data_path, 'traces', 'protocols',
913-
f'{experiment_name}-{pname}.json')
914-
with open(json_name, 'r') as f:
915-
json_protocol = json.load(f)
916-
v_protocol = VoltageProtocol.from_json(json_protocol)
917-
ramps = v_protocol.get_ramps()
918-
reversal_ramp = ramps[-1]
919-
ramp_start, ramp_end = reversal_ramp[:2]
920-
921-
# Next extract steps
922-
istart = np.argmax(times >= ramp_start)
923-
iend = np.argmax(times > ramp_end)
924-
925-
if istart == 0 or iend == 0 or istart == iend:
926-
raise Exception('Could not identify reversal ramp')
927-
928-
for sweep in sweeps_to_plot:
929-
fname = f"{experiment_name}-{pname}-{well}-sweep{sweep}.csv"
930-
try:
931-
data = pd.read_csv(os.path.join(data_path, 'traces', fname))
932-
except FileNotFoundError:
933-
continue
934-
935-
# Plot voltage vs current
936-
current = data['current'].values.astype(np.float64)
937-
938-
col = palette[i]
939-
940-
ax.scatter(voltages[istart:iend], current[istart:iend], label=protocol,
941-
color=col, s=1.2)
942-
943-
fitted_poly = np.poly1d(np.polyfit(voltages[istart:iend], current[istart:iend], 4))
944-
ax.plot(voltages[istart:iend], fitted_poly(voltages[istart:iend]), color=col)
945-
i += 1
946-
947-
if reversal_potential is not None:
948-
ax.axvline(reversal_potential, linestyle='--', color='grey',
949-
label='Calculated Nernst potential')
950-
951-
ax.legend()
952-
# Save figure
953-
fig.savefig(os.path.join(sub_dir, f"overlaid_reversal_ramps_{well}"))
954-
955-
# Clear figure
956-
ax.cla()
957-
958-
plt.close(fig)
959-
return
960-
961-
962655
def scale_to_reference(trace, reference):
963656
def error2(p):
964657
return np.sum((p*trace - reference)**2)
@@ -1043,5 +736,5 @@ def create_attrition_table(qc_df, subtraction_df):
1043736
return res_df
1044737

1045738

1046-
if __name__ == "__main__":
739+
if __name__ == "__main__": # pragma: no cover
1047740
run_from_command_line()

0 commit comments

Comments
 (0)