-
Notifications
You must be signed in to change notification settings - Fork 0
/
help.html
542 lines (459 loc) · 22.7 KB
/
help.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
<html>
<head>
<title>APQC help</title>
<link rel="stylesheet" type="text/css" href="extra_info/styles.css" />
<link rel="icon" type="icon.svg" href="extra_info/apqc_logo_help.svg">
</head>
<!-- set background color of page -->
<style>
body {
background-color: #333333; /* dark grey */
}
</style>
<body>
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>HELP FILE FOR APQC</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>*** APQC HTML: afni_proc.py's QC report for single subject analysis ***
Some useful links:
+ The APQC HTML's <urlin><a href="https://afni.nimh.nih.gov/pub/dist/doc/htmldoc/tutorials/apqc_html/main_toc.html" target="_blank">online tutorial</a></urlin>
+ The afni_proc.py (AP) program's <urlin><a href="https://afni.nimh.nih.gov/pub/dist/doc/htmldoc/programs/afni_proc.py_sphx.html" target="_blank">online help file</a></urlin>
+ The AFNI Message Board <urlin><a href="https://discuss.afni.nimh.nih.gov" target="_blank">homepage</a></urlin>
</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>OVERVIEW</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>QC organization
The quality control (QC) is organized into thematic blocks to
check, such as original data acquisition, different alignments,
motion, regression modeling, and more. At the top of the QC page,
there is a navigation bar with a label for each QC block (vorig,
ve2a, etc.) that functions as a button to the top of that section.
Rating
Beneath each section label is a(n initially empty) QC button,
which users can click to set a rating for that QC block and for
the overall subject rating ("FINAL"). Clicking on the QC button
toggles its state through good (+), bad (X) or other (?, which may
include 'ugly', or just a hint to revisit later). Users can also
use convenient 'filler buttons' at the right (A+, Ax, etc.), when
the ratings are constant/uniform-- one hopes for 'all good'
processing, but who knows...
Commenting
Additionally, users can ctrl+click on the QC button to enter a
comment for that block. For example, they can write why a rating
was good or bad, or what question they have led them to rate it as
'other'.
Saving info
If you have a local server running, then as you click and type
the rating/QC buttons the information will be saved automatically
in the QC directory. The 'SAVE:' button in the upper-left corner
shows whether the server is running:
+ if the letters are green and visible, then the server is running
(and your QC info is being saved).
+ if the letters are gray with a red line through them, then the
server is not running (and your QC info is not being saved).
It is useful to start the server and save QC/rating info for
sharing and/or later using inclusion/exclusion criteria for the
subject in group analysis.
The ratings and comments are both saved in 'apqc_*.json'.
The ratings are also saved in 'extra_info/out.ss_review.*.json',
which is a file that can be used as an input file to
gen_ss_review_table.py, combining the qualitative evaluations of
the APQC HTML with the quantitative ones gathered by afni_proc.py,
for systematic evaluation and QC of subject data.
</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>DEFINITIONS</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>QC block
One thematic section of the QC form (original data, alignment
step, etc.). Each block has a label in the navigation bar (vorig,
ve2a, etc.)-- click on the label to jump to that block. Click on
the button below the label to provide a rating for that block.
QC buttons
Below each QC block label in the navigation bar is a button
(initially empty after running afni_proc.py). The user can click
on it to toggle its state to one of three ratings (good, +; bad,
X; other, ?), as well as to enter a comment for that QC block (via
ctrl+click).
'FINAL'
Label for the QC button to hold the user's overall/final
evaluation of the subject's data and processing. (Clicking on this
label does nothing.)
filler buttons
|A+|, |Ax|, |A?|: these are located in the upper right corner of the
navigation menu. These can be used to provide uniform ratings
across the QC buttons (click to fill empty buttons, double-click
to fill *all* buttons, regardless of state).
|clr|-- double-clicking on this will empty all ratings+comments
from the QC buttons.
'SAVING'
Denoting whether the local server is running or not. Python's Flask
module is used to start a local server, so QC ratings and comments
can be saved as they are made.
This mode is ON when the SAVING button text is green and unobscured,
and it is OFF when the text is gray and covered by a red line.
'HELP'
Button : well, how did you get here??
'BC', 'AC'
When using the 'pythonic' HTML style, 1D-plotting (like motion
enorm plots) also produces boxplots to summarize values. When
censoring has been applied, by default there will be two boxplots
made: one of values 'before censoring' (BC), and one of values
'after censoring' (AC). Those labels are affixed in order to the
titles of the boxplots.
</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>SET BUTTON RATING</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>
To record an evaluation, click the button below any section label, and
toggle through:
+ : good,
X : bad,
? : other (or 'revisit').
For speed, you can click 'filler button' |A+| once to fill all *empty*
buttons with +, or doubly to fill *all* buttons with +. |Ax| behaves
the same for X, and |A?| for ?.
Double-click |clr| to clear all rating and comment values.
Pro-tip: if data are mostly all in a single state like good or bad,
just use filler buttons to save yourself click time, and then just
click any individual buttons that are different. </pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>COMMENTING</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>
Use ctrl+click (or cmd+click, on Macs) on a QC button to toggle a comment
window open/closed.
Save a comment with the green (left) button, or hit Enter at any point.
Remove a comment with the pink (right) button, or hit Esc at any point.
Any QC button with a comment gets a pair of quotes added, like ''+''.
Comments are independent of rating, but adding a comment to an empty
button changes its rating to ''?'' (which can be altered further from
there).
</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>SAVE INFO</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>Have the local server running (check the 'SAVING' button in the
upper-right corner).
When the local server is running, the QC and rating information is saved
every time a button is updated.</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>INTERACTIVE VIEW BUTTONS</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>When the local server is running, you can use the buttons above
each of the images to interactively view the data. The following
buttons are currently present:
AV : open the data in the AFNI Viewer (opening a new GUI instance).
NV : open the data in an NiiVue instance, embedded in the browser;
clicking NV toggles the viewer on/off;
the (x,y,z) location of the crosshairs is shown, as well as the
"UOT" trio, which stands for Underlay, Overlay and Threshold
values in the current viewer;
users can hover over the rendering at the right and hit 'c' one
or more times to initiate a clipping plane that can be moved
using mouse scrolling.
IC : run AFNI's InstaCorr on the given data (settings are pre-loaded);
popup text describes what to do, but basically hold down
Ctrl+Shift, and click around the brain to see instantly updated
correlation patterns from a seed at the clicked location.
GV : open the data with a Graph Viewer in the AFNI GUI.
Additionally, each of the gold-colored text labels throughout the HTML
are actually buttons you can double-click, to bring *all* HTML pages
that were opened with that current open_apqc.py command to the same
location. This is extremely useful for checking the same QC item across
all subjects. Like, really useful.
</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>CROSS-PAGE SYNC'ING</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>When the local server is running, you can bring all the APQC HTML
instances that were opened with a single open_apqc.py execution to the
exact same location. This is extremely useful for checking the same
QC item across all subjects. Like, really useful.
Users can do this by double-clicking any of the gold-colored text
labels throughout the HTML. The current page will smoothly scroll,
placing the given QC item at the top of the page, and all other
related pages will jump to the same location.
Users can efficiently navigate between several tabs with the standard
browser keyboard shortcuts:
Ctrl+Tab : cycle "forward" through the tabs in the window.
Ctrl+Shift+Tab : cycle "backward" through the tabs in the window.
When opening the HTML pages, users can also add the `-jump_to ..` option
the command, so that all the pages will open up at the same location
(def behavior is to open at the top of the page). Users can specify
any of the QC block labels (vorig, ve2a, etc.), and the full list of
jumpable locations for a set of pages can be displayed in the terminal
by running:
open_apqc.py -disp_jump_ids -infiles <list of one or more HTML files>
</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>KEYBOARD NAVIGATION</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>
Use Tab to navigate the QC menu mirroring all above functionality.
Hit Tab to move through the menu. Hit Enter on a section label to
scroll the page there.
On QC buttons hit Enter to toggle through the rating list. Use
ctrl+Enter to open comments; as above, use Enter or Esc to keep or
erase, respectively.
On the filler buttons |A+|, |Ax| and |A?|, use Enter to fill empty
QC buttons and ctrl+Enter to fill *all* buttons.
On |clr|, ctrl+Enter clears all rating and comment values.
</pre>
</div> <!-- bot of text --></button>
</div> <!-- end of block div -->
<!-- start of div for QC block: '' -->
<div class="div_pad_class">
<hr class="hr_sec" />
<div style="padding-top: 0px; margin-top: -0px;">
<center><button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre class='padtop' >[]<b> <u>QC BLOCKS</u> </b></pre></button></center>
</div>
<!-- top of text -->
<div
style="padding-top: 0px; margin-top: -0px;"
class='container' >
<button style="all: unset" class="btn_title active"
ondblclick="jumpAllOpenApqcToID('')"
title="jump in all tabs"><pre>
vorig
Volumetric mages of data (EPI and anat) in original/native space.
ve2a
Volumetric images of the alignment of the subject's anat
(underlay/grayscale) and EPI (overlay/hot color edges) volumes. Likely
these will be shown in the template space, if using the tlrc block.
va2t
Volumetric images of the alignment of the standard space template
(underlay/grayscale) and subject's anat (overlay/hot color edges)
volumes.
vstat
Volumetric images of statistics results (and, where available, effect
estimates).
For task-based datasets (where stimulus timing was used in AP), the
(full) F-stat of an overall regression model is shown. Additionally,
one can specify labels of stimuli or GLTs used in the afni_proc.py
command, and statistical results will be shown. For stimuli with
effect estimates, the 'Coef' vales will be displayed as the olay
colors (preferably with the 'scale' block having been used in
afni_proc.py, producing meaningful units of BOLD % signal change in
the 'Coef' volumes).
For resting-state and naturalistic scans, seedbased correlation maps are
displayed (when the final space is recognized).
Colorbar ranges and thresholds are chosen from either percentile
values within the data set (preferably from within a WB mask,
available when the 'mask' block was used in afni_proc.py) or from
pre-set statistical levels (like p=0.001). Each is case is described.
mot
Summary of motion and outlier information, which may each/both be
used as censoring criteria.
The 6 rigid body motion parameters (3 rotation + 3 translation) are
combined into a single quantity: the Euclidean norm (enorm), which has
approx. units of 'mm'. Large changes in the enorm time series show
moments of subject motion.
Separate runs are shown with the background alternating between white
and light gray.
Boxplots summarize parameter values, both before censoring (BC) and
after censoring (AC).
And a grayplot of residuals (with motion/outliers/censoring) is
provided. The '-pvorder' is used for output, placing the time series
in decreasing order of similarity to the top two principal components
of the (masked) time series data. The colorbar max is set to 3.29,
the value at which a standard normal distribution N(0,1) has a
two-sided tail probability of 0.001. The grayplot's top row contains
a plot of the motion enorm and outlier frac across time, for reference
with the grayplot series.
mecho
There are many ways to process multi-echo (ME) EPI data. Fortunately,
afni_proc.py provides the ability to include most of them in your FMRI
processing. Please see the afni_proc.py help for the full argument
list of '-combine_method ..'.
The OC/OC_A ('optimally combined') methods were proposed by Posse et
al. (1999).
When any of the 'tedana*' or 'OC_tedort' methods is chosen, then
processing uses outputs from the Kundu et al. (2011) work.
When any of the 'm_tedana*' methods is chosen, then processing uses
outputs from the MEICA group's tedana tool. For more details, see the
<urlin><a href="https://tedana.readthedocs.io/en/stable/" target="_blank">TEDANA project webpage</a></urlin>.
regr
When processing with stimulus time series, both individual and
combined stimulus plots are generated (with any censoring also shown).
The degrees of freedom (DF) summary is also provided, so one can check
if too many get used up during processing (careful with bandpassing!).
The "corr_brain" plot shows correlation of each voxel with the errts
average within the whole brain mask (what could be called the 'global
signal').
Two TSNR dsets can be shown. In each case, voxelwise TSNR is shown
throughout the full FOV, and any brain mask dset is just used for
defining a region within which percentiles are calculated. The generic
formula for TSNR is:
TSNR = average(signal) / stdev(noise)
+ First, the TSNR of r01 after volreg is shown if the user used the
'-volreg_compute_tsnr yes' opt in AP. Here, the "signal" is the time
series and the "noise" is the detrended time series.
+ Second, the TSNR of the combined runs after regression modeling is
shown. Here, the "signal" is the all_runs dset and the "noise" is
the errts time series.
When a mask is present, the olay's hot colors (yellow-orange-red) are
defined by the 5-95%ile range of TSNR in the mask. The 1-5%ile values
within the mask are shown in light blue, and the lower values are
shown in dark blue. In the absence of a mask, then the colorbar goes
from 0 to the 98%ile value within the whole dset.
The "ROI shape and TSNR stats" table shows local shape and TSNR
(~signal strength) properties in regions of interest. QC questions
are often closely linked to locations of interest in the brain. This
table contains information about the suitability of signal strength
and/or ROI properties for a given set of ROIs (default set for
recognized spaces, or user-provided). Warning levels increase as shape
properties become potentially more problematic, such as: containing a
large number of empty voxels; becoming thinner and more unstable to
alignment imperfections and partial voluming; having strong
gradients/variability in TSNR; having low overall TSNR. The table
contains the following information, with warning coloration applied to
highlight potential issues within each ROI:
ROI : the integer value in the input atlas/map region
Nvox : total number of voxels (warnings if quite small)
Nzer : number of zero-valued voxels (warnings as Nzer/Nvox increases)
Dvox : maximum depth, counted in number of voxels (warnings as Dvox
decreases)
Tmin, T25%, Tmed, T75%, Tmax
: min, max and quartile values of TSNR (warnings as T75% decreases;
and as the slope of values (T75% -T25%)/Tmed increases)
X, Y, Z : coordinates of max-depth location, in RAI-DICOM notation
ROI : name/label of ROI
radcor
@radial_correlate plots (per run, per block). These can show
scanner coil artifacts, as well as large subject motion; both factors
can lead to large areas of very high correlation, which would be
highlighted here.
warns
Several AFNI programs carry out consistency checks while
processing (e.g., pre-steady state check, regression matrix corr
warnings, left-right flip checks). Warnings are conglomerated here.
Each warning has one of the following levels:
none undecided mild medium severe
The warning level is written, with color coding, at the top of each
warning's text box. The QC block label 'warns' at the top of the page
is also colored according to the maximum warning level present.
qsumm
This is the output of @ss_review_basic, which contains a loooot of
useful information about your single subject processing.
</pre>
</div> <!-- bot of text --></button></body></html>