|
61 | 61 |
|
62 | 62 | class TaskQC(base.QC): |
63 | 63 | """A class for computing task QC metrics""" |
64 | | - criteria = {"PASS": 0.99, "WARNING": 0.90, "FAIL": 0} # Note: WARNING was 0.95 prior to Aug 2022 |
| 64 | + # criteria = {"PASS": 0.99, "WARNING": 0.90, "FAIL": 0} # Note: WARNING was 0.95 prior to Aug 2022 |
| 65 | + |
| 66 | + criteria = dict() |
| 67 | + criteria['default'] = {"PASS": 0.99, "WARNING": 0.90, "FAIL": 0} # Note: WARNING was 0.95 prior to Aug 2022 |
| 68 | + criteria['_task_stimOff_itiIn_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 69 | + criteria['_task_positive_feedback_stimOff_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 70 | + criteria['_task_negative_feedback_stimOff_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 71 | + criteria['_task_wheel_move_during_closed_loop'] = {"PASS": 0.99, "WARNING": 0} |
| 72 | + criteria['_task_response_stimFreeze_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 73 | + criteria['_task_detected_wheel_moves'] = {"PASS": 0.99, "WARNING": 0} |
| 74 | + criteria['_task_trial_length'] = {"PASS": 0.99, "WARNING": 0} |
| 75 | + criteria['_task_goCue_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 76 | + criteria['_task_errorCue_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 77 | + criteria['_task_stimOn_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 78 | + criteria['_task_stimOff_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 79 | + criteria['_task_stimFreeze_delays'] = {"PASS": 0.99, "WARNING": 0} |
| 80 | + criteria['_task_iti_delays'] = {"NOT_SET": 0} |
| 81 | + criteria['_task_passed_trial_checks'] = {"NOT_SET": 0} |
| 82 | + |
| 83 | + # fcns_value2status = {k: lambda x: TaskQC._thresholding(x, thresholds=v) for k, v in criteria.items()} |
| 84 | + |
65 | 85 | fcns_value2status = {'default': lambda x: TaskQC._thresholding(x), |
66 | 86 | '_task_stimOff_itiIn_delays': lambda x: |
67 | 87 | TaskQC._thresholding(x, thresholds={"PASS": 0.99, "WARNING": 0}), |
@@ -106,7 +126,7 @@ def _thresholding(qc_value, thresholds=None): |
106 | 126 | """ |
107 | 127 | MAX_BOUND, MIN_BOUND = (1, 0) |
108 | 128 | if not thresholds: |
109 | | - thresholds = TaskQC.criteria.copy() |
| 129 | + thresholds = TaskQC.criteria['default'].copy() |
110 | 130 | if qc_value is None or np.isnan(qc_value): |
111 | 131 | return int(-1) |
112 | 132 | elif (qc_value > MAX_BOUND) or (qc_value < MIN_BOUND): |
@@ -199,7 +219,7 @@ def compute_session_status_from_dict(results): |
199 | 219 | indices[i] = v2status_fcns['default'](results[k]) |
200 | 220 |
|
201 | 221 | def key_map(x): |
202 | | - return 'NOT_SET' if x < 0 else list(TaskQC.criteria.keys())[x] |
| 222 | + return 'NOT_SET' if x < 0 else list(TaskQC.criteria['default'].keys())[x] |
203 | 223 | # Criteria map is in order of severity so the max index is our overall QC outcome |
204 | 224 | session_outcome = key_map(max(indices)) |
205 | 225 | outcomes = dict(zip(results.keys(), map(key_map, indices))) |
|
0 commit comments