improvements for 1.5.2
This commit is contained in:
@@ -33,6 +33,7 @@ class ExportToCSVWidget(CSVUIMixin, FlaresBaseWidget):
|
||||
design_matrix_dict: dict[str, DataFrame],
|
||||
contrast_results_dict: dict[str, dict[str, Any]],
|
||||
group_dict: dict[str, str],
|
||||
config_dict: dict[str, str],
|
||||
) -> None:
|
||||
|
||||
super().__init__("ExportToCSV")
|
||||
@@ -43,8 +44,9 @@ class ExportToCSVWidget(CSVUIMixin, FlaresBaseWidget):
|
||||
# self.design_matrix = design_matrix_dict
|
||||
# self.contrast_results_dict = contrast_results_dict
|
||||
# self.group = group_dict
|
||||
self.config_dict = config_dict
|
||||
|
||||
self.setup_csv_ui(["0 (Export Data to CSV)", "1 (CSV for SPARKS)",])
|
||||
self.setup_csv_ui(["0 (Export Data to CSV)", "1 (CSV for SPARKS)", "2 (Export Configuration to CSV)", "3 (Paragraph of Configuration)"])
|
||||
|
||||
|
||||
def process_request(self):
|
||||
@@ -91,11 +93,27 @@ class ExportToCSVWidget(CSVUIMixin, FlaresBaseWidget):
|
||||
success_count += 1
|
||||
|
||||
elif idx == 1:
|
||||
# SPARKS Export
|
||||
save_path = os.path.join(output_dir, f"{base_filename}_sparks.csv")
|
||||
sparks_csv_export(haemo_obj, save_path)
|
||||
success_count += 1
|
||||
|
||||
# SPARKS Export
|
||||
save_path = os.path.join(output_dir, f"{base_filename}_sparks.csv")
|
||||
sparks_csv_export(haemo_obj, save_path)
|
||||
success_count += 1
|
||||
|
||||
elif idx == 2:
|
||||
formatted_data = {
|
||||
os.path.basename(path.replace("\\", "/")): inner_dict
|
||||
for path, inner_dict in self.config_dict.items()
|
||||
}
|
||||
df = DataFrame(formatted_data)
|
||||
df.index.name = "Parameter"
|
||||
save_path = os.path.join(output_dir, f"{APP_NAME}_configuration.csv")
|
||||
df.to_csv(save_path)
|
||||
success_count += 1
|
||||
|
||||
elif idx == 3:
|
||||
first_params = next(iter(self.config_dict.values()))
|
||||
magic_string = self.gen_magic_str(first_params)
|
||||
self.placeholder_label.setText(magic_string)
|
||||
|
||||
else:
|
||||
print(f"No method defined for index {idx}")
|
||||
|
||||
@@ -113,4 +131,66 @@ class ExportToCSVWidget(CSVUIMixin, FlaresBaseWidget):
|
||||
# mode=EventUpdateMode.WRITE_JSON,
|
||||
# caller="Video Alignment Tool"
|
||||
# )
|
||||
# win.show()
|
||||
# win.show()
|
||||
|
||||
|
||||
def gen_magic_str(self, all_params):
|
||||
|
||||
magic_str = "To start, the data was loaded into the application. "
|
||||
if all_params['DOWNSAMPLE']:
|
||||
magic_str += f"The data was downsampled to {all_params['DOWNSAMPLE_FREQUENCY']}hz. "
|
||||
else:
|
||||
magic_str += "The data was not downsampled and was retained at its original sampling frequency. "
|
||||
|
||||
if all_params['TRIM']:
|
||||
magic_str += f"The data was then trimmed to only keep {all_params['SECONDS_TO_KEEP']} seconds before the first event, as the earlier data with no events would not be needed. "
|
||||
else:
|
||||
magic_str += "The data was not trimmed and was retained at its original length. "
|
||||
|
||||
if all_params['OPTODE_PLACEMENT']:
|
||||
magic_str += f"A visualization check of the optode locations in 3D space was performed to ensure that they were at the correct location. "
|
||||
|
||||
if all_params['SHORT_CHANNELS']:
|
||||
magic_str += f"A short channel(s) was specified with the maximum length of a short channel being {all_params['SHORT_CHANNELS_THRESHOLD']} metres. Channels that were over this distance but under {all_params['LONG_CHANNELS_THRESHOLD']} metres were retained. "
|
||||
else:
|
||||
magic_str += f"No short channel was specified. Channels between the lengths of {all_params['SHORT_CHANNELS_THRESHOLD']} and {all_params['LONG_CHANNELS_THRESHOLD']} meters were used with all other channles being discarded. "
|
||||
|
||||
if all_params['HEART_RATE']:
|
||||
magic_str += f"The heart rate of the participant was attempted to be calculated. {all_params['SECONDS_TO_STRIP_HR']} seconds were ignored from the start of the file to avoid motion artifacts. "
|
||||
magic_str += f"The heart rate had hard limits of {all_params['MAX_LOW_HR']} to {all_params['MAX_HIGH_HR']} and was smoothed across {all_params['SMOOTHING_WINDOW_HR']} samples. "
|
||||
else:
|
||||
magic_str += "The heart rate of the participants was not attempted to be calculated. "
|
||||
|
||||
if all_params['SCI']:
|
||||
magic_str += f"The Scalp Coupling Index was calculated over {all_params['SCI_TIME_WINDOW']} second windows. The threshold value was {all_params['SCI_THRESHOLD']}. "
|
||||
else:
|
||||
magic_str += "Scalp Coupling Index was not used. "
|
||||
|
||||
if all_params['SNR']:
|
||||
magic_str += f"The Signal to Noise Ratio was calculated. The threshold value was set to {all_params['SNR_THRESHOLD']}db. "
|
||||
else:
|
||||
magic_str += "The Signal to Noise Ratio was not used. "
|
||||
|
||||
if all_params['PSP']:
|
||||
magic_str += f"Peak Spectral Power was calculated over {all_params['PSP_TIME_WINDOW']} second windows. The threshold value was {all_params['PSP_THRESHOLD']}. "
|
||||
else:
|
||||
magic_str += "Peak Spectral Power was not used. "
|
||||
|
||||
if all_params['COEFF_VAR']:
|
||||
magic_str += f"The Coefficient of Variation was calculated. The threshold value was set to {all_params['COEFF_VAR_THRESHOLD']}. "
|
||||
else:
|
||||
magic_str += "The Coefficient of Variation was not used. "
|
||||
|
||||
if all_params['MAD']:
|
||||
magic_str += f"Median Absolute Deviation was calculated. The threshold value was set to {all_params['MAD_THRESHOLD']}. "
|
||||
else:
|
||||
magic_str += "Median Absolute Deviation was not used. "
|
||||
|
||||
if all_params['PSD_NOISE']:
|
||||
magic_str += f"Power Spectral Density Noise was calculated with a target frequency divisor of {all_params['TARGET_FREQ_DIV']} and a decibal limit of {all_params['DB_LIMIT']}. "
|
||||
else:
|
||||
magic_str += f"Power Spectral Density Noise was not used. "
|
||||
|
||||
magic_str += "More coming soon."
|
||||
|
||||
return magic_str
|
||||
@@ -1478,6 +1478,10 @@ class CSVUIMixin:
|
||||
self.scroll_content = QWidget()
|
||||
self.grid_layout = QGridLayout(self.scroll_content)
|
||||
self.scroll.setWidget(self.scroll_content)
|
||||
self.placeholder_label = QLabel("")
|
||||
self.grid_layout.addWidget(self.placeholder_label, 0, 0)
|
||||
self.placeholder_label.setWordWrap(True)
|
||||
self.placeholder_label.setScaledContents(True)
|
||||
self.layout.addWidget(self.scroll)
|
||||
|
||||
self.thumb_size = QSize(280, 180)
|
||||
|
||||
@@ -40,7 +40,7 @@ class ViewerLauncherWidget(QWidget):
|
||||
("Cross-Group Stats Viewer", CrossGroupStatsWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict, json_location], True),
|
||||
("Inter-Group Brain and Image Viewer", InterGroupBrainImageWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True),
|
||||
("Cross-Group Brain and Image Viewer", CrossGroupBrainImageWidget, [haemo_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True),
|
||||
("Export To CSV Viewer", ExportToCSVWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True)
|
||||
("Export To CSV Viewer", ExportToCSVWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict, config_dict], True)
|
||||
]
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
|
||||
Reference in New Issue
Block a user