Skip to content

Commit 3f5535d

Browse files
committed
Minor fixes [skip ci]
1 parent 41b891e commit 3f5535d

File tree

3 files changed

+48
-34
lines changed

3 files changed

+48
-34
lines changed

raidionicsval/Studies/AbstractStudy.py

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -523,9 +523,13 @@ def compute_fold_average(self, folder, data=None, class_optimal={}, metrics=[],
523523
classes = class_names
524524
optimal_tag = 'All' if condition == 'All' else 'True Positive'
525525
for c in classes:
526-
optimal_values = class_optimal[c][optimal_tag]
527-
self.compute_fold_average_inner(folder, data=data, class_name=c, best_threshold=optimal_values[1],
528-
best_overlap=optimal_values[0], metrics=metrics, suffix=suffix, condition=condition)
526+
try:
527+
optimal_values = class_optimal[c][optimal_tag]
528+
self.compute_fold_average_inner(folder, data=data, class_name=c, best_threshold=optimal_values[1],
529+
best_overlap=optimal_values[0], metrics=metrics, suffix=suffix, condition=condition)
530+
except Exception as e:
531+
logging.error(f"Fold average for class {c} failed with: {e}\n{traceback.format_exc()}")
532+
continue
529533

530534
def compute_fold_average_inner(self, folder, class_name, data=None, best_threshold=0.5, best_overlap=0.0, metrics=[],
531535
suffix='', condition='All'):
@@ -756,21 +760,25 @@ def compute_and_plot_metric_over_metric_cascading_categories(self, class_name: s
756760
data_per_complete_selection = new_data_per_complete_selection
757761

758762
for sel in list(data_per_complete_selection.keys()):
759-
combined_df = data_per_complete_selection[sel]
760-
if len(combined_df) != 0:
761-
# self.__compute_results_metric_over_metric(data=combined_df, class_name=class_name, metric1='PiW Dice',
762-
# metric2='GT volume (ml)', category=category,
763-
# study_name='Cascaded_Selection/' + sel, suffix='_' + sel)
764-
dest_folder = os.path.join(self.output_folder, 'Cascaded_Selection', sel)
765-
os.makedirs(dest_folder, exist_ok=True)
766-
self.compute_fold_average(folder=dest_folder,
767-
data=combined_df,
768-
class_optimal=self.classes_optimal, metrics=self.metric_names,
769-
suffix='_' + sel,
770-
class_names=SharedResources.getInstance().studies_class_names,
771-
condition=category
772-
)
773-
export_segmentation_df_to_latex_paper(folder=dest_folder, class_name=class_name, study=sel,
774-
input_csv_filename=os.path.join(dest_folder, class_name + '_overall_metrics_average_' + category + '_' + sel + '.csv'))
775-
else:
776-
print("No results for the following combination: {}. Skipping...".format(sel))
763+
try:
764+
combined_df = data_per_complete_selection[sel]
765+
if len(combined_df) != 0:
766+
# self.__compute_results_metric_over_metric(data=combined_df, class_name=class_name, metric1='PiW Dice',
767+
# metric2='GT volume (ml)', category=category,
768+
# study_name='Cascaded_Selection/' + sel, suffix='_' + sel)
769+
dest_folder = os.path.join(self.output_folder, 'Cascaded_Selection', sel)
770+
os.makedirs(dest_folder, exist_ok=True)
771+
self.compute_fold_average(folder=dest_folder,
772+
data=combined_df,
773+
class_optimal=self.classes_optimal, metrics=self.metric_names,
774+
suffix='_' + sel,
775+
class_names=SharedResources.getInstance().studies_class_names,
776+
condition=category
777+
)
778+
export_segmentation_df_to_latex_paper(folder=dest_folder, class_name=class_name, study=sel,
779+
input_csv_filename=os.path.join(dest_folder, class_name + '_overall_metrics_average_' + category + '_' + sel + '.csv'))
780+
else:
781+
print("No results for the following combination: {}. Skipping...".format(sel))
782+
except Exception as e:
783+
logging.error(f"Computing and exporting for the metrics combination {sel} failed with {e}\n{traceback.format_exc()}")
784+
continue

raidionicsval/Validation/kfold_model_validation.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import itertools
33
import logging
44
import time
5+
import traceback
6+
57
import pandas as pd
68
from math import ceil
79

@@ -416,15 +418,19 @@ def __compute_extra_metrics(self, class_optimal: dict = {}):
416418
for c in classes:
417419
optimal_values = class_optimal[c]['All']
418420
for p in tqdm(self.patients_metrics):
419-
# Initializing/completing the list which will hold the extra metrics
420-
self.patients_metrics[p].setup_extra_metrics(self.metric_names)
421-
pat_metrics = compute_patient_extra_metrics(self.patients_metrics[p], classes.index(c), optimal_values[1],
422-
SharedResources.getInstance().validation_metric_names)
423-
self.patients_metrics[p].set_optimal_class_extra_metrics(classes.index(c), optimal_values[1], pat_metrics)
424-
425-
# Filling in the overall dataframe and dumping results to csv after each patient
426-
for pm in pat_metrics:
427-
metric_name = pm[0]
428-
metric_value = pm[1]
429-
self.class_results_df[c].at[self.class_results_df[c].loc[(self.class_results_df[c]['Patient'] == self.patients_metrics[p].patient_id) & (self.class_results_df[c]['Threshold'] == optimal_values[1])].index.values[0], metric_name] = metric_value
430-
self.class_results_df[c].to_csv(self.class_dice_output_filenames[c], index=False)
421+
try:
422+
# Initializing/completing the list which will hold the extra metrics
423+
self.patients_metrics[p].setup_extra_metrics(self.metric_names)
424+
pat_metrics = compute_patient_extra_metrics(self.patients_metrics[p], classes.index(c), optimal_values[1],
425+
SharedResources.getInstance().validation_metric_names)
426+
self.patients_metrics[p].set_optimal_class_extra_metrics(classes.index(c), optimal_values[1], pat_metrics)
427+
428+
# Filling in the overall dataframe and dumping results to csv after each patient
429+
for pm in pat_metrics:
430+
metric_name = pm[0]
431+
metric_value = pm[1]
432+
self.class_results_df[c].at[self.class_results_df[c].loc[(self.class_results_df[c]['Patient'] == self.patients_metrics[p].patient_id) & (self.class_results_df[c]['Threshold'] == optimal_values[1])].index.values[0], metric_name] = metric_value
433+
self.class_results_df[c].to_csv(self.class_dice_output_filenames[c], index=False)
434+
except Exception as e:
435+
logging.error(f"Computing extra metrics for patient {self.patients_metrics[p].patient_id} failed with: {e}.\n{traceback.format_exc()}")
436+
continue

raidionicsval/Validation/validation_utilities.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ def compute_singe_fold_average_metrics(results, fold_number, best_threshold, bes
302302
extra_metrics_std = []
303303
for m in metric_names:
304304
if m in fold_results.columns.values:
305-
if m.split(' ')[1] in ['HD95', 'ASSD', 'RAVD', 'VC', 'OASSD']:
305+
if 'HD95' in m or 'ASSD' in m or 'RAVD' in m or 'VC' in m or 'OASSD' in m:
306306
avg = fold_results.loc[thresh_index][fold_results.loc[thresh_index][m] != -1.0][m].dropna().astype(
307307
'float32').mean()
308308
std = fold_results.loc[thresh_index][fold_results.loc[thresh_index][m] != -1.0][m].dropna().astype(

0 commit comments

Comments
 (0)