From b88def77ae619d4a8ad0594186a004e19e23a2fd Mon Sep 17 00:00:00 2001 From: Zach Duey Date: Wed, 13 Jun 2018 13:27:14 -0400 Subject: [PATCH 01/13] allow user to pass clinical kwarg to change the type of report produced --- ramutils/pipelines/report.py | 11 ++++++++--- ramutils/reports/generate.py | 17 ++++++++++++----- ramutils/tasks/reports.py | 6 ++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/ramutils/pipelines/report.py b/ramutils/pipelines/report.py index e765cea6e..f1d970ad4 100644 --- a/ramutils/pipelines/report.py +++ b/ramutils/pipelines/report.py @@ -19,7 +19,7 @@ def make_report(subject, experiment, paths, joint_report=False, retrain=False, stim_params=None, exp_params=None, sessions=None, vispath=None, rerun=False, trigger_electrode=None, use_classifier_excluded_leads=False, - pipeline_name="report"): + pipeline_name="report", clinical=False): """ Constructs a report and saves out all the necessary data to re-construct the report This pipeline should be used for generating single session reports for both record-only and @@ -59,6 +59,9 @@ def make_report(subject, experiment, paths, joint_report=False, classifier training pipeline_name : str Name to use for status updates. + clinical: bool + If True, builds a demo clinical report instead of the internal RAM + report Returns ------- @@ -117,7 +120,8 @@ def make_report(subject, experiment, paths, joint_report=False, pre_built_results['target_selection_table'], pre_built_results['classifier_evaluation_results'], paths.dest, - hmm_results=pre_built_results['hmm_results']) + hmm_results=pre_built_results['hmm_results'], + clinical=clinical) return report.compute() final_pairs = generate_pairs_for_classifier(ec_pairs, excluded_pairs) @@ -182,7 +186,8 @@ def make_report(subject, experiment, paths, joint_report=False, report = build_static_report(subject, experiment, data.session_summaries, data.math_summaries, data.target_selection_table, data.classifier_evaluation_results, - hmm_results=output, dest=paths.dest) + hmm_results=output, dest=paths.dest, + clinical=clinical) if vispath is not None: report.visualize(filename=vispath) diff --git a/ramutils/reports/generate.py b/ramutils/reports/generate.py index 8c8b6633e..811787330 100644 --- a/ramutils/reports/generate.py +++ b/ramutils/reports/generate.py @@ -68,9 +68,12 @@ class ReportGenerator(object): """ def __init__(self, subject, experiment, session_summaries, math_summaries, - target_selection_table, classifier_summaries, hmm_results=None, dest='.'): + target_selection_table, classifier_summaries, hmm_results=None, + dest='.', clinical=False): self.subject = subject self.experiment = experiment + self.clinical = clinical + self.session_summaries = session_summaries self.math_summaries = math_summaries self.target_selection_table = target_selection_table @@ -301,7 +304,7 @@ def generate(self): raise NotImplementedError("Unsupported report type") def _render(self, experiment, **kwargs): - """Convenience method to wrap common keyword arguments passed to the + """ Convenience method to wrap common keyword arguments passed to the template renderer. Parameters @@ -311,7 +314,10 @@ def _render(self, experiment, **kwargs): Additional keyword arguments that are passed to the render method. """ - template = self._env.get_template(experiment.lower() + '.html') + if self.clinical: + template = self._env.get_template('clinical_stim_report.html') + else: + template = self._env.get_template(experiment.lower() + '.html') return template.render( version=self.version, subject=self.subject, @@ -364,16 +370,17 @@ def generate_open_loop_fr_report(self): ) def generate_closed_loop_fr_report(self, experiment): - """ Generate an FR5 report + """ Generate a closed loop stimulation report Returns ------- - Rendered FR5 report as a string. + Rendered stimulation report as a string """ return self._render( experiment, stim=True, + date=self.session_summaries[0].session_datetime, combined_summary=self._make_combined_summary(), classifiers=self._make_classifier_data(), stim_params=FRStimSessionSummary.stim_parameters( diff --git a/ramutils/tasks/reports.py b/ramutils/tasks/reports.py index 387dc468b..f582752be 100644 --- a/ramutils/tasks/reports.py +++ b/ramutils/tasks/reports.py @@ -14,7 +14,8 @@ @task(cache=False) def build_static_report(subject, experiment, session_summaries, math_summaries, delta_hfa_table, classifier_summaries, dest, - hmm_results={}, save=True, aggregated_report=False): + hmm_results={}, save=True, aggregated_report=False, + clinical=False): """ Given a set of summary objects, generate a static HTML report """ # Subject IDs are at most 8 characters, so this is a quick check to see @@ -24,7 +25,8 @@ def build_static_report(subject, experiment, session_summaries, math_summaries, generator = ReportGenerator(subject, experiment, session_summaries, math_summaries, delta_hfa_table, classifier_summaries, - dest=dest, hmm_results=hmm_results) + dest=dest, hmm_results=hmm_results, + clinical=clinical) report = generator.generate() sessions = [str(summary.session_number) for summary in session_summaries] From bb189dceb18376ac83abdb6da78da7b1d3fe7ab9 Mon Sep 17 00:00:00 2001 From: Zach Duey Date: Wed, 13 Jun 2018 13:27:48 -0400 Subject: [PATCH 02/13] allow num stim event bars to be shut off for the stim and recall plot --- ramutils/reports/static/plots.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ramutils/reports/static/plots.js b/ramutils/reports/static/plots.js index 107605528..dfed3d6c6 100644 --- a/ramutils/reports/static/plots.js +++ b/ramutils/reports/static/plots.js @@ -103,9 +103,10 @@ var ramutils = (function (mod, Plotly) { * @param {Object} nonStimRecalls * @param {Object} stimRecalls * @param {Object} stimEvents + * @param {bool} plot_stim_events */ - plotRecallSummary: function (nonStimRecalls, stimRecalls, stimEvents) { - const data = [ + plotRecallSummary: function (nonStimRecalls, stimRecalls, stimEvents, plot_stim_events = true) { + let data = [ { x: nonStimRecalls.listno, y: nonStimRecalls.recalled, @@ -122,13 +123,15 @@ var ramutils = (function (mod, Plotly) { marker: {size: 12}, name: 'Stim recalls' }, - { + ] + if (plot_stim_events == true) { + data.push({ x: stimEvents.listno, y: stimEvents.count, type: 'bar', name: 'Stim events' - } - ]; + }) + }; const layout = { title: 'Number of Items Stimulated and Number of Items Recalled', From fcb9e97a74f822bd8030efd6f17f2afd45cc2039 Mon Sep 17 00:00:00 2001 From: Zach Duey Date: Wed, 13 Jun 2018 13:28:20 -0400 Subject: [PATCH 03/13] added a set of clinical report templates --- ramutils/reports/templates/clinical_base.html | 33 ++++++++ .../templates/clinical_behavioral.html | 21 +++++ .../clinical_classifier_performance.html | 81 +++++++++++++++++++ .../templates/clinical_neuropsych.html | 5 ++ .../templates/clinical_patient_summary.html | 51 ++++++++++++ .../templates/clinical_stim_behavior.html | 27 +++++++ .../templates/clinical_stim_report.html | 13 +++ .../reports/templates/clinical_targets.html | 56 +++++++++++++ 8 files changed, 287 insertions(+) create mode 100644 ramutils/reports/templates/clinical_base.html create mode 100644 ramutils/reports/templates/clinical_behavioral.html create mode 100644 ramutils/reports/templates/clinical_classifier_performance.html create mode 100644 ramutils/reports/templates/clinical_neuropsych.html create mode 100644 ramutils/reports/templates/clinical_patient_summary.html create mode 100644 ramutils/reports/templates/clinical_stim_behavior.html create mode 100644 ramutils/reports/templates/clinical_stim_report.html create mode 100644 ramutils/reports/templates/clinical_targets.html diff --git a/ramutils/reports/templates/clinical_base.html b/ramutils/reports/templates/clinical_base.html new file mode 100644 index 000000000..efd3bbbad --- /dev/null +++ b/ramutils/reports/templates/clinical_base.html @@ -0,0 +1,33 @@ +{% set sections = [] %} + + + + + {% block title %}{% endblock %} + + + {% for stylesheet in css.values() %} + + {% endfor %} + + {% for script in js.values() %} + + {% endfor %} + + +
+
+

Stimulation Report

+

Courtesy of Nia Theraputics: {{ datetime.now().strftime('%Y-%m-%d %H:%M') }}

+
+
+ {% block report %}{% endblock %} +
+
+ + + + + + + \ No newline at end of file diff --git a/ramutils/reports/templates/clinical_behavioral.html b/ramutils/reports/templates/clinical_behavioral.html new file mode 100644 index 000000000..9aed681ea --- /dev/null +++ b/ramutils/reports/templates/clinical_behavioral.html @@ -0,0 +1,21 @@ +
+
Serial Position Curve
+
+
+
+
+
+ 'stim' and 'non-stim' refer to stim lists and non-stim lists. 'First recall' indicates the plot is based only on + the serial position of the first recalled word. 'Overall' means that the recall order is not taken into account. +
+ +
+
+
+ +
\ No newline at end of file diff --git a/ramutils/reports/templates/clinical_classifier_performance.html b/ramutils/reports/templates/clinical_classifier_performance.html new file mode 100644 index 000000000..8651e860f --- /dev/null +++ b/ramutils/reports/templates/clinical_classifier_performance.html @@ -0,0 +1,81 @@ +
+
Classifier Performance
+
+
+
+
+
+ (Left) ROC curve.(Right) Subject + recall performance represented as percentage deviation from the (subject) + mean, separated by tercile of the classifier encoding efficiency estimate + for each encoded word. +
+
+ + + + + + + + + + {% for classifier in classifiers["metadata"] %} + + + + {% if stim %} + + {% endif %} + + {% if classifier['pvalue'] < 0.001 %} + + {% else %} + + {% endif %} + + + + {% endfor %} + + {% if stim %} + + {% else %} + + {% endif %} +
Classifier IDTag + {% if stim %} + Reloaded + {% endif %} + AUC + Permutation P-Value + Median Classifier Output95% CI for Median Classifier Output
{{ classifier['id'] }}{{ classifier['tag'] }}{{ classifier['reloaded'] }}{{ "{:.3f}".format(classifier['auc']) }}< 0.001{{ '{:.3f}'.format(classifier['pvalue']) }}{{ "{:.3f}".format(classifier['median_classifier_output']) }}{{ "[{:.3f}, {:.3f}]".format(classifier['median_lower_bound'], classifier['median_upper_bound'])}}
+ Reloaded indicates that the classifier assessed in the report is the same classifier that was used during the session. + All sessions will attempt to use the actual classifier, but will fall back to a retrained classifier in cases where + the classifier was unable to be reloaded. 95% confidence intervals for the median classifier output are approximate + and based on the procedure described + here. + + A classifier type of 'encoding' is trained on encoding-period events only, while a 'joint' classifier uses events + from both the encoding period and the retrieval period for training. 95% confidence intervals for the median + classifier output are approximate and based on the procedure described + here. +
+
+
+ +
diff --git a/ramutils/reports/templates/clinical_neuropsych.html b/ramutils/reports/templates/clinical_neuropsych.html new file mode 100644 index 000000000..e49356249 --- /dev/null +++ b/ramutils/reports/templates/clinical_neuropsych.html @@ -0,0 +1,5 @@ +
+
Neuropsych
+
+
+
\ No newline at end of file diff --git a/ramutils/reports/templates/clinical_patient_summary.html b/ramutils/reports/templates/clinical_patient_summary.html new file mode 100644 index 000000000..6c9a518ac --- /dev/null +++ b/ramutils/reports/templates/clinical_patient_summary.html @@ -0,0 +1,51 @@ +
+
+
Patient Summary
+
+
    +
  • + Patient + John Doe +
  • +
  • + Date + {{ date.strftime('%Y-%m-%d') }} +
  • +
  • + Type + Single-Target +
  • +
+
+
+
+
Stimulation Results
+
+
    +
  • + List Level Change + 6% +
  • +
  • + Item Level Change + 12% +
  • +
+
+
+
+
Classification
+
+
    +
  • + AUC + {{ "{:.3f}".format(classifiers['metadata'][0]['auc']) }} +
  • +
  • + Generalization + {{ "{:.3f}".format(classifiers['metadata'][0]['pvalue']) }} +
  • +
+
+
+
diff --git a/ramutils/reports/templates/clinical_stim_behavior.html b/ramutils/reports/templates/clinical_stim_behavior.html new file mode 100644 index 000000000..4e7b63e79 --- /dev/null +++ b/ramutils/reports/templates/clinical_stim_behavior.html @@ -0,0 +1,27 @@ +
+
Stimulation and Recall
+
+
+
+
+ Blue circles represent the number of recalled items from non-stim lists. + Orange circles represent the number of recalled items from stim lists. +
+
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/ramutils/reports/templates/clinical_stim_report.html b/ramutils/reports/templates/clinical_stim_report.html new file mode 100644 index 000000000..9b8fabc80 --- /dev/null +++ b/ramutils/reports/templates/clinical_stim_report.html @@ -0,0 +1,13 @@ +{% extends 'clinical_base.html' %} +{% block title %} + Stimulation Report for John Doe +{% endblock %} + +{% block report %} +{% include 'clinical_patient_summary.html' %} +{% include 'clinical_targets.html' %} + +{% include 'clinical_behavioral.html' %} +{% include 'clinical_classifier_performance.html' %} +{% include 'clinical_stim_behavior.html' %} +{% endblock %} \ No newline at end of file diff --git a/ramutils/reports/templates/clinical_targets.html b/ramutils/reports/templates/clinical_targets.html new file mode 100644 index 000000000..ad7a66f5e --- /dev/null +++ b/ramutils/reports/templates/clinical_targets.html @@ -0,0 +1,56 @@ +
+
+
Stimulation Target
+ +
+
    +
  • + TMI + -0.275 +
  • + Location + {{ stim_params[0]['location'] }} +
  • +
  • + Amplitude [mA] + {{ stim_params[0]['amplitude'] }} +
  • +
  • + Duration [ms] + {{ stim_params[0]['stim_duration'] }} +
  • +
  • + Pulse Frequency [Hz] + {{ stim_params[0]['pulse_freq'] }} +
  • +
+
+
+
From e676d2e9b6b3e4284de8ba5139672c7047d1556c Mon Sep 17 00:00:00 2001 From: Zach Duey Date: Wed, 13 Jun 2018 16:52:39 -0400 Subject: [PATCH 04/13] updates to allow for multi site clinical report --- ramutils/reports/generate.py | 12 +++++++++-- ramutils/reports/summary.py | 39 +++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/ramutils/reports/generate.py b/ramutils/reports/generate.py index 811787330..53e6284c9 100644 --- a/ramutils/reports/generate.py +++ b/ramutils/reports/generate.py @@ -377,14 +377,22 @@ def generate_closed_loop_fr_report(self, experiment): Rendered stimulation report as a string """ + stim_params = FRStimSessionSummary.stim_parameters(self.session_summaries) + multistim = False + if len(stim_params) > 1: + multistim = True + + if self.clinical: + stim_params = stim_params[:-1] # do not pass along the joint site + return self._render( experiment, stim=True, + multistim=multistim, date=self.session_summaries[0].session_datetime, combined_summary=self._make_combined_summary(), classifiers=self._make_classifier_data(), - stim_params=FRStimSessionSummary.stim_parameters( - self.session_summaries), + stim_params=stim_params, recall_tests=FRStimSessionSummary.recall_test_results( self.session_summaries, experiment), feature_data=self._make_feature_plots(), diff --git a/ramutils/reports/summary.py b/ramutils/reports/summary.py index 02bb13d7d..cec5d613e 100644 --- a/ramutils/reports/summary.py +++ b/ramutils/reports/summary.py @@ -1029,9 +1029,16 @@ def recall_test_results(summaries, experiment): df = df[df.list > -1] results = [] + n_correct_recalls = df.recalled.sum() + n_items = len(df) for name, group in df.groupby(['stimAnodeTag', 'stimCathodeTag', 'amplitude', 'stim_duration', 'pulse_freq']): + if name[0].find(",") != -1: + target_name = "Multi-Site" + else: + target_name = "-".join([name[0], name[1]]) + single_target_results = {"target": target_name} parameters = "/".join([str(n) for n in name]) # Stim lists vs. non-stim lists @@ -1047,13 +1054,16 @@ def recall_test_results(summaries, experiment): n_correct_stim_list_recalls, n_correct_nonstim_list_recalls], [n_stim_list_words, n_nonstim_list_words]) - results.append({"parameters": parameters, - "comparison": "Stim Lists vs. Non-stim Lists", - "stim": (n_correct_stim_list_recalls, - n_stim_list_words), - "non-stim": (n_correct_nonstim_list_recalls, n_nonstim_list_words), - "t-stat": tstat_list, - "p-value": pval_list}) + single_target_results['list'] = { + "parameters": parameters, + "comparison": "Stim Lists vs. Non-stim Lists", + "stim": (n_correct_stim_list_recalls, + n_stim_list_words), + "non-stim": (n_correct_nonstim_list_recalls, n_nonstim_list_words), + "delta_recall": 100 * ((n_correct_stim_list_recalls/n_stim_list_words) - + (n_correct_nonstim_list_recalls/n_nonstim_list_words)) / (n_correct_recalls / n_items), + "t-stat": tstat_list, + "p-value": pval_list} # stim items vs. non-stim low biomarker items n_correct_stim_item_recalls = group[group.is_stim_item == True].recalled.sum( @@ -1071,13 +1081,15 @@ def recall_test_results(summaries, experiment): [n_correct_stim_item_recalls, n_correct_nonstim_item_recalls], [n_stim_items, n_nonstim_items]) - results.append({ + single_target_results['item'] = { "parameters": parameters, "comparison": "Stim Items vs. Low Biomarker Non-stim Items", "stim": (n_correct_stim_item_recalls, n_stim_items), "non-stim": (n_correct_nonstim_item_recalls, n_nonstim_items), + "delta_recall": 100 * ((n_correct_stim_item_recalls/n_stim_items) - + (n_correct_nonstim_item_recalls/n_nonstim_items)) / (n_correct_recalls / n_items), "t-stat": tstat_list, - "p-value": pval_list}) + "p-value": pval_list} # post stim items vs. non-stim low biomarker items n_correct_post_stim_item_recalls = group[group.is_post_stim_item == True].recalled.sum( @@ -1089,14 +1101,17 @@ def recall_test_results(summaries, experiment): [n_correct_post_stim_item_recalls, n_correct_nonstim_item_recalls], [n_post_stim_items, n_nonstim_items]) - results.append({ + single_target_results['post_stim_item'] = { "parameters": parameters, "comparison": "Post-stim Items vs. Low Biomarker Non-stim Items", "stim": (n_correct_post_stim_item_recalls, n_post_stim_items), "non-stim": (n_correct_nonstim_item_recalls, n_nonstim_items), + "delta_recall": 100 * ((n_correct_post_stim_item_recalls/n_post_stim_items) - + (n_correct_nonstim_item_recalls/n_nonstim_items)) / (n_correct_recalls / n_items), "t-stat": tstat_list, - "p-value": pval_list}) - + "p-value": pval_list + } + results.append(single_target_results) return results @staticmethod From 9599fdadc25d0357a218a03f66de0646bf6dad44 Mon Sep 17 00:00:00 2001 From: Zach Duey Date: Wed, 13 Jun 2018 16:53:06 -0400 Subject: [PATCH 05/13] scale y axis of spos plot --- ramutils/reports/static/plots.js | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/ramutils/reports/static/plots.js b/ramutils/reports/static/plots.js index dfed3d6c6..8db482f85 100644 --- a/ramutils/reports/static/plots.js +++ b/ramutils/reports/static/plots.js @@ -9,12 +9,18 @@ var ramutils = (function (mod, Plotly) { * @param {Array} serialPos - Serial positions (x-axis) * @param {Object} overallProbs - Overall probabilities per serial position * @param {Object} firstProbs - Probability of first recall per serial position + * @param {Object} plot_first -- If true, plot probability of first recall */ - plotSerialpos: function (serialPos, overallProbs, firstProbs) { + plotSerialpos: function (serialPos, overallProbs, firstProbs, plot_first = true) { const mode = "lines+markers"; let data = []; + max_prob = 0 for (let name in overallProbs) { + current_max = Math.max(...overallProbs[name]) + if (current_max > max_prob) { + max_prob = current_max + }; data.push({ x: serialPos, y: overallProbs[name], @@ -23,14 +29,20 @@ var ramutils = (function (mod, Plotly) { }); } - for (let name in firstProbs) { - data.push({ - x: serialPos, - y: firstProbs[name], - mode: mode, - name: name - }); - } + if (plot_first) { + for (let name in firstProbs) { + current_max = Math.max(...firstProbs[name]) + if (current_max > max_prob) { + max_prob = current_max + }; + data.push({ + x: serialPos, + y: firstProbs[name], + mode: mode, + name: name + }); + } + }; const layout = { title: "Probability of Recall as a Function of Serial Position", @@ -40,7 +52,7 @@ var ramutils = (function (mod, Plotly) { }, yaxis: { title: 'Probability', - range: [0, 1] + range: [0, max_prob + 0.01] } }; From d3ab50124f404aa6757f4333bf2aca7718e41296 Mon Sep 17 00:00:00 2001 From: Zach Duey Date: Wed, 13 Jun 2018 16:53:26 -0400 Subject: [PATCH 06/13] template updates to allow for multi site stim --- .../templates/clinical_behavioral.html | 45 +++++--- .../clinical_behavioral_modulation.html | 23 ++++ .../templates/clinical_patient_summary.html | 18 +-- .../templates/clinical_stim_behavior.html | 30 +++-- .../templates/clinical_stim_report.html | 4 + .../reports/templates/clinical_targets.html | 103 +++++++++--------- 6 files changed, 133 insertions(+), 90 deletions(-) create mode 100644 ramutils/reports/templates/clinical_behavioral_modulation.html diff --git a/ramutils/reports/templates/clinical_behavioral.html b/ramutils/reports/templates/clinical_behavioral.html index 9aed681ea..48b823715 100644 --- a/ramutils/reports/templates/clinical_behavioral.html +++ b/ramutils/reports/templates/clinical_behavioral.html @@ -1,21 +1,30 @@ -
-
Serial Position Curve
+
+
+
Serial Position Curve
+
+
+
+
+
+ 'stim' and 'non-stim' refer to stim lists and non-stim lists. 'First recall' indicates the plot is based only on + the serial position of the first recalled word. 'Overall' means that the recall order is not taken into account. +
+ +
+
+
+
+
+
Stimulation and Serial Position
-
-
-
-
- 'stim' and 'non-stim' refer to stim lists and non-stim lists. 'First recall' indicates the plot is based only on - the serial position of the first recalled word. 'Overall' means that the recall order is not taken into account. -
- -
+
+
+
-
- +
\ No newline at end of file diff --git a/ramutils/reports/templates/clinical_behavioral_modulation.html b/ramutils/reports/templates/clinical_behavioral_modulation.html new file mode 100644 index 000000000..dff7f62d9 --- /dev/null +++ b/ramutils/reports/templates/clinical_behavioral_modulation.html @@ -0,0 +1,23 @@ +
+ {% for target in recall_tests %} +
+
{{ target["target"] }}
+
+
    +
  • + List + {{ "{:.1f}".format(target["list"]["delta_recall"]) }}% +
  • +
  • + Item + {{ "{:.1f}".format(target["item"]["delta_recall"]) }}% +
  • +
  • + Post-Stim Item + {{ "{:.1f}".format(target["post_stim_item"]["delta_recall"]) }}% +
  • +
+
+
+ {% endfor %} +
\ No newline at end of file diff --git a/ramutils/reports/templates/clinical_patient_summary.html b/ramutils/reports/templates/clinical_patient_summary.html index 6c9a518ac..be1919987 100644 --- a/ramutils/reports/templates/clinical_patient_summary.html +++ b/ramutils/reports/templates/clinical_patient_summary.html @@ -5,15 +5,19 @@
  • Patient - John Doe + John Doe
  • Date - {{ date.strftime('%Y-%m-%d') }} + {{ date.strftime('%Y-%m-%d') }}
  • Type - Single-Target + {% if multistim %} + Multi-Target + {% else %} + Single-Target + {% endif %}
@@ -24,11 +28,11 @@
  • List Level Change - 6% + 60%
  • Item Level Change - 12% + 23%
@@ -39,11 +43,11 @@
  • AUC - {{ "{:.3f}".format(classifiers['metadata'][0]['auc']) }} + {{ "{:.3f}".format(classifiers['metadata'][0]['auc']) }}
  • Generalization - {{ "{:.3f}".format(classifiers['metadata'][0]['pvalue']) }} + {{ "{:.3f}".format(classifiers['metadata'][0]['pvalue']) }}
diff --git a/ramutils/reports/templates/clinical_stim_behavior.html b/ramutils/reports/templates/clinical_stim_behavior.html index 4e7b63e79..2411f207a 100644 --- a/ramutils/reports/templates/clinical_stim_behavior.html +++ b/ramutils/reports/templates/clinical_stim_behavior.html @@ -1,19 +1,17 @@ -
-
Stimulation and Recall
-
-
-
-
- Blue circles represent the number of recalled items from non-stim lists. - Orange circles represent the number of recalled items from stim lists. -
-
- -
-
-
-
-
+
+
+
Stimulation and Recall
+
+
+
+
+ Blue circles represent the number of recalled items from non-stim lists. + Orange circles represent the number of recalled items from stim lists. +
+
+
+
+
diff --git a/ramutils/reports/templates/clinical_target_selection_table.html b/ramutils/reports/templates/clinical_target_selection_table.html index d3a84b845..1c511ae6d 100644 --- a/ramutils/reports/templates/clinical_target_selection_table.html +++ b/ramutils/reports/templates/clinical_target_selection_table.html @@ -2,7 +2,7 @@ {% for stim_param in stim_params %}
Target Selection
-