save thresholds, read me
This commit is contained in:
parent
df346b2a35
commit
8e6ef4869c
@ -36,11 +36,11 @@ class Controller:
|
||||
self.stim_values = {}
|
||||
self.recording_times = {}
|
||||
|
||||
def save_parameters(self):
|
||||
def save_parameters(self, folder_path):
|
||||
header = "trial_index,threshold,min_window,step_size\n"
|
||||
for repro in self.thresholds.keys():
|
||||
# TODO change '.' to self.data_path after testing:
|
||||
with open("." + "/{}_thresholds.csv".format(repro), "w") as threshold_file:
|
||||
with open(folder_path + "/{}_thresholds.csv".format(repro), "w") as threshold_file:
|
||||
threshold_file.write(header)
|
||||
for i in range(len(self.sorting[repro])):
|
||||
if len(self.thresholds[repro][i]) == 0:
|
||||
@ -53,7 +53,14 @@ class Controller:
|
||||
step = self.thresholds[repro][i][2]
|
||||
threshold_file.write("{},{},{},{}\n".format(i, thresh, min_window, step))
|
||||
print("Thresholds saved!")
|
||||
|
||||
def save_redetected_spikes(self, folder_path):
|
||||
# TODO save redetected spikes:
|
||||
header = "trial_index,threshold,min_window,step_size\n"
|
||||
for repro in self.thresholds.keys():
|
||||
# TODO change '.' to self.data_path after testing:
|
||||
with open(folder_path + "/{}_thresholds.csv".format(repro), "w") as threshold_file:
|
||||
threshold_file.write(header)
|
||||
|
||||
def get_repros(self):
|
||||
return self.parser.get_measured_repros()
|
||||
|
15
ReadMe.md
Normal file
15
ReadMe.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Spike redetector
|
||||
|
||||
###redetection parameters:
|
||||
|
||||
- **Threshold**: number of standard deviations between a maximum and a minimum to count as a spike.
|
||||
- **Min window size**: The minimum size of a window (as number of indices) in which spikes are detected. The voltage trace is split into parts
|
||||
if the maximum or minimum of the next part are too different from the current part.
|
||||
This makes the estimation of the STD a lot more stable between trials where the absolute voltage might wander.
|
||||
- **step size**: The number of indices that are used in each step while trying to increase the size of the window.
|
||||
|
||||
### plot controls:
|
||||
|
||||
- Drag and drop with LMB
|
||||
|
||||
- zoom control with RMB -> press and hold; up down is zoom on y-axis while left right is zoom on x-axis
|
@ -106,7 +106,6 @@ class SpikeRedetectGui(QWidget):
|
||||
self.grouping_checkbox.setText("Group by Stimulus Value:")
|
||||
panel_layout.addWidget(self.grouping_checkbox)
|
||||
|
||||
|
||||
trial_label = QLabel("Trial:")
|
||||
panel_layout.addWidget(trial_label)
|
||||
self.trial_spinbox = QSpinBox(self)
|
||||
@ -156,6 +155,11 @@ class SpikeRedetectGui(QWidget):
|
||||
button.clicked.connect(self.save_threshold_parameters)
|
||||
panel_layout.addWidget(button)
|
||||
|
||||
button = QPushButton('Save redetected spikes!', self)
|
||||
button.setToolTip('Save redetected spikes with the accepted thresholds.')
|
||||
button.clicked.connect(self.save_redetected_spikes)
|
||||
panel_layout.addWidget(button)
|
||||
|
||||
panel.setLayout(panel_layout)
|
||||
middle.addWidget(panel)
|
||||
|
||||
@ -202,18 +206,31 @@ class SpikeRedetectGui(QWidget):
|
||||
for val in self.controller.get_stim_values(repro):
|
||||
self.stim_val_box.addItem(str(val))
|
||||
|
||||
|
||||
|
||||
@pyqtSlot()
|
||||
def accept_redetection(self):
|
||||
params = (self.threshold_spinbox.value(), self.window_spinbox.value(), self.step_spinbox.value())
|
||||
self.controller.set_redetection_params(self.repro_box.currentText(), self.trial_idx, params)
|
||||
|
||||
self.trial_change(self.trial_idx + 1)
|
||||
if not self.grouping_checkbox.isChecked():
|
||||
self.controller.set_redetection_params(self.repro_box.currentText(), self.trial_idx, params)
|
||||
self.trial_change(self.trial_idx + 1)
|
||||
else:
|
||||
# TODO set params for all trials of the current stim value
|
||||
# also choose next trial idx that has no accepted params yet and update stim_val_box
|
||||
pass
|
||||
|
||||
@pyqtSlot()
|
||||
def save_threshold_parameters(self):
|
||||
self.controller.save_parameters()
|
||||
# TODO add question for save_path
|
||||
data_path = QFileDialog.getExistingDirectory(self, directory=self.controller.data_path, caption='Select a folder to save the parameters:')
|
||||
if data_path is None:
|
||||
return
|
||||
self.controller.save_parameters(data_path)
|
||||
|
||||
@pyqtSlot()
|
||||
def save_redetected_spikes(self):
|
||||
data_path = QFileDialog.getExistingDirectory(self, directory=self.controller.data_path, caption='Select a folder to save the redetected spikes:')
|
||||
if data_path is None:
|
||||
return
|
||||
self.controller.save_redetected_spikes(data_path)
|
||||
|
||||
|
||||
class PlotCanvas(FigureCanvas):
|
||||
@ -329,7 +346,8 @@ class PlotCanvas(FigureCanvas):
|
||||
ax.eventplot(spiketimes, lineoffsets=max(trace) + 2, colors="black")
|
||||
redetect = detect_spiketimes(time, trace, redetection_vars[0], redetection_vars[1], redetection_vars[2])
|
||||
ax.eventplot(redetect, lineoffsets=max(trace) + 1, colors="red")
|
||||
ax.set_title('Trial XYZ')
|
||||
ax.plot(redetect, trace[np.round(np.array((redetect + recording_times[0]) / sampling_interval)).astype(int)], 'o', color='red')
|
||||
ax.set_title('Trial')
|
||||
|
||||
if self.current_repro == repro:
|
||||
ax.set_xlim(xlim)
|
||||
|
Loading…
Reference in New Issue
Block a user