Listed below are the data quality metrics that Gannet computes during data preprocessing, signal fitting, and tissue segmentation.

Linewidth

Linewidth is calculated as the full-width half-maximum (FWHM) (in Hz) of fitted model signals. When reporting linewidths of datasets, it is recommended to use the FWHM of tCr or tNAA from the OFF spectrum, or the FWHM of the water reference (if a water reference is provided).

Signal-to-noise ratio (SNR)

The SNR of fitted signals is calculated as the amplitude of the given signal model divided by twice the standard deviation of the noise signal. To estimate the noise signal, Gannet takes two independent segments of the OFF or DIFF spectrum (as appropriate to the modeled signal of interest) between 8–9 ppm and 9–10 ppm, and detrends them using a second-order polynomial function. Detrending is performed to remove baseline artifacts (often related to the residual water signal). The standard deviation of each detrended noise segment is then calculated. The smaller of the two standard deviations is then used as the estimate of noise, which is then multiplied by 2.

Formulaically, this is defined as:

\[ \mathrm{SNR} = \frac{A_{\mathrm{metab}}}{2\cdot\mathrm{std}[S_{\mathrm{noise}}(f)]} \]

where:

Parameter Definition
\(A_{\mathrm{metab}}\) Maximum signal model amplitude of the metabolite of interest
\(S_{\mathrm{noise}}(f)\) Detrended noise signal between either 8–9 or 9–10 ppm (whichever yields a lower standard deviation) in the appropriate spectrum (i.e., either the OFF or DIFF spectrum)

Frequency offsets

To estimate the degree of frequency offsets that result from scanner-related frequency drift1 and participant motion2, Gannet calculates an average frequency offset3 \(\overline{\Delta\delta_{0}}\). This is calculated as the mean (over the course of the acquisition) difference between the observed frequency of the residual water signal in the pre-frequency-corrected subspectra and the nominal water frequency \(\delta_{0}\) at 4.68 ppm (4.8 ppm for room-temperature phantoms), or the nominal Cr frequency at 3.02 ppm for HERMES acquisitions. It should be noted that using the mean of offset differences does not fully characterize frequency offsets but is a useful heuristic.

Formulaically, this is defined as:

\[ \overline{\Delta\delta_{0}} = \frac{1}{M}\sum{\widehat{\delta}_{0,m} - \delta_{0}} \] where:

Parameter Definition
\(m\) Subspectrum index number, \(m \in 1, 2, 3, ... M\)
\(\widehat{\delta}_{0,m}\) Observed water or tCr frequency in subspectrum \(m\)
\(\delta_{0}\) Nominal water or tCr frequency

Fit error

When fitting signal functions to metabolite peaks, Gannet will also estimate the error of the fit. This is defined as the standard deviation of the residuals of the signal model fit divided by the signal model amplitude and multiplied by 100 to give a percentage.

For metabolite peak fits, this is:

\[ \epsilon_{\mathrm{metab}} = 100\cdot\frac{\mathrm{std}[resid_{\mathrm{metab}}(f)]}{A_{\mathrm{metab}}} \]

where:

Parameter Definition
\(resid_{\mathrm{metab}}\) Fit residuals of signal model for metabolite
\(A_{\mathrm{metab}}\) Signal model amplitude

Similarly, for reference signal fits, this is:

\[ \epsilon_{\mathrm{ref}} = 100\cdot\frac{\mathrm{std}[resid_{\mathrm{ref}}(f)]}{A_{\mathrm{ref}}} \]

Since all metabolites are normalized to a reference signal (either tCr or unsuppressed water) and reported as such, the fit error that really should be considered (and reported) is the combined error of the metabolite and reference signal model fits, which add up in quadrature.

Formulaically, this is defined as:

\[ \epsilon_{\mathrm{metab},\mathrm{ref}} = \sqrt{\epsilon_{\mathrm{metab}}^2 + \epsilon_{\mathrm{ref}}^2} \]

Image quality metrics

When segmenting structural images to obtain voxel tissue fractions of GM, WM, and CSF, Gannet computes several metrics to quantify the quality of structural images and the segmentation. These are stored in the MRS_struct.out.QA structure. Several metrics from the MRI Quality Control tool (MRIQC)4 are computed. More details are also provided in the MRIQC documentation.

Parameter Definition
\(\mathrm{mad}\) Median absolute deviation
\(\mathrm{med}\) Median
\(GM\), \(WM\), \(CSF\), \(BG\) GM, WM, CSF, and air background segmented images
\(\sigma\) Standard deviation
\(\mathrm{P}_{99.95}\) 99.95th percentile


Coefficient of variation (CV) of GM, WM, and CSF

\[ \mathrm{CV} = \frac{\mathrm{mad}(F)}{\mathrm{med}(F)} \]

where \(F\) can be GM, WM, or CSF, \(\mathrm{mad}\) is the median absolute deviation, and \(\mathrm{med}\) is the median.


Coefficient of joint variation (CJV)

\[ \mathrm{CJV} = \frac{\mathrm{mad}(WM) + \mathrm{mad}(GM)}{|\mathrm{med}(WM) + \mathrm{med}(GM)|} \]


Contrast-to-noise ratio (CNR)

\[ \mathrm{CNR} = \frac{|\mathrm{med}(GM) - \mathrm{med}(WM)|}{\sqrt{\sigma_{\mathrm{GM}}^{2} + \sigma_{\mathrm{WM}}^{2} + \sigma_{\mathrm{BG}}^{2}}} \]

where \(\sigma\) is the standard deviation of the respective tissue class or background.


SNR of GM, WM, CSF, and total

\[ \mathrm{SNR} = \frac{\mathrm{med}(F)}{\sigma_{F}\sqrt{\frac{n}{n-1}}} \]

An alternative SNR measure based on Dietrich et al. (2007)5 is also computed using the background mask that is generated during tissue segmentation:

\[ \mathrm{SNR_{D}} = \frac{\mathrm{med}(F)}{\sqrt{\frac{2}{4-\pi}}\mathrm{mad}(BG)} \]

For both SNR measures, \(F\) can be GM, WM, or CSF. Total SNR is the mean of all SNR measures.


Entropy-focus criterion (EFC)

Uses the Shannon entropy of voxel intensities as an indication of ghosting and blurring induced by head motion. Lower values are better.

\[ E = -\sum_{j=1}^{N}{\frac{x_j}{x_{\mathrm{max}}}\ln\left(\frac{x_j}{x_{\mathrm{max}}}\right)} \]

with \(x_{max} = \sqrt{\sum_{j=1}^{N}x_{j}^{2}}\).

The EFC is then:

\[ \mathrm{EFC} = \left(\frac{N}{\sqrt{N}}\log{\sqrt{N}}^{-1}\right)E \]

where:

Parameter Definition
\(x\) Image voxels
\(N\) Number of image voxels


Foreground-to-background energy ratio (FBER)

The average energy of image voxel intensities within the head relative to outside the head. Higher values are better.

\[ \mathrm{FBER} = \frac{\mathrm{E}[|F|^{2}]}{\mathrm{E}[|B|^{2}]} \]

where:

Parameter Definition
\(F\) Image voxels inside the head (foreground)
\(B\) Image voxels outside the head (background)


White-matter-to-maximum-intensity ratio (WM2MAX)

The median image voxel intensity within the WM mask over the 99.95th percentile of the full structural image signal distribution. Values closer to 1 are better.

\[ \mathrm{WM2MAX} = \frac{\mathrm{med}(WM)}{\mathrm{P}_{99.95}(X)} \]


References

1.
Hui SCN, Mikkelsen M, Zöllner HJ, et al. Frequency drift in MR spectroscopy at 3T. NeuroImage. 2021;241(21):118430. doi:10.1016/j.neuroimage.2021.118430
2.
Evans CJ, Puts NAJ, Robson SE, et al. Subtraction artifacts and frequency (Mis-)alignment in J-difference GABA editing. Journal of Magnetic Resonance Imaging. 2013;38(4):970-975. doi:10.1002/jmri.23923
3.
Mikkelsen M, Barker PB, Bhattacharyya PK, et al. Big GABA: Edited MR spectroscopy at 24 research sites. NeuroImage. 2017;159:32-45. doi:10.1016/j.neuroimage.2017.07.021
4.
Esteban O, Birman D, Schaer M, Koyejo OO, Poldrack RA, Gorgolewski KJ. MRIQC: Advancing the automatic prediction of image quality in MRI from unseen sites. Bernhardt BC, ed. PLOS ONE. 2017;12(9):e0184661. doi:10.1371/journal.pone.0184661
5.
Dietrich O, Raya JG, Reeder SB, Reiser MF, Schoenberg SO. Measurement of signal‐to‐noise ratios in MR images: Influence of multichannel coils, parallel imaging, and reconstruction filters. Journal of Magnetic Resonance Imaging. 2007;26(2):375-385. doi:10.1002/jmri.20969
LS0tCnRpdGxlOiAiRGF0YSBxdWFsaXR5IG1ldHJpY3MiCmRhdGU6ICJMYXN0IHVwZGF0ZWQ6IGByIGZvcm1hdChTeXMudGltZSgpLCAnJUIgJWQsICVZJylgIgpiaWJsaW9ncmFwaHk6IGJpYmxpb2dyYXBoeS5iaWIKY3NsOiBhbWVyaWNhbi1tZWRpY2FsLWFzc29jaWF0aW9uLmNzbApsaW5rLWNpdGF0aW9uczogeWVzCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZGVwdGg6IDIKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBGQUxTRQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciwgY2hpbGQgPSAianMvYmFjay10by10b3AuanMifQpgYGAKCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KYm9keSAubWFpbi1jb250YWluZXIgewogIHdpZHRoOiA5MCU7Cn0KCiNUT0MgewoKfQpgYGAKCjxicj4KCkxpc3RlZCBiZWxvdyBhcmUgdGhlIGRhdGEgcXVhbGl0eSBtZXRyaWNzIHRoYXQgR2FubmV0IGNvbXB1dGVzIGR1cmluZyBkYXRhIHByZXByb2Nlc3NpbmcsIHNpZ25hbCBmaXR0aW5nLCBhbmQgdGlzc3VlIHNlZ21lbnRhdGlvbi4KCiMjIExpbmV3aWR0aAoKTGluZXdpZHRoIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIGZ1bGwtd2lkdGggaGFsZi1tYXhpbXVtIChGV0hNKSAoaW4gSHopIG9mIGZpdHRlZCBtb2RlbCBzaWduYWxzLiBXaGVuIHJlcG9ydGluZyBsaW5ld2lkdGhzIG9mIGRhdGFzZXRzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIEZXSE0gb2YgdENyIG9yIHROQUEgZnJvbSB0aGUgT0ZGIHNwZWN0cnVtLCBvciB0aGUgRldITSBvZiB0aGUgd2F0ZXIgcmVmZXJlbmNlIChpZiBhIHdhdGVyIHJlZmVyZW5jZSBpcyBwcm92aWRlZCkuCgojIyBTaWduYWwtdG8tbm9pc2UgcmF0aW8gKFNOUikKClRoZSBTTlIgb2YgZml0dGVkIHNpZ25hbHMgaXMgY2FsY3VsYXRlZCBhcyB0aGUgYW1wbGl0dWRlIG9mIHRoZSBnaXZlbiBzaWduYWwgbW9kZWwgZGl2aWRlZCBieSB0d2ljZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBub2lzZSBzaWduYWwuIFRvIGVzdGltYXRlIHRoZSBub2lzZSBzaWduYWwsIEdhbm5ldCB0YWtlcyB0d28gaW5kZXBlbmRlbnQgc2VnbWVudHMgb2YgdGhlIE9GRiBvciBESUZGIHNwZWN0cnVtIChhcyBhcHByb3ByaWF0ZSB0byB0aGUgbW9kZWxlZCBzaWduYWwgb2YgaW50ZXJlc3QpIGJldHdlZW4gOOKAkzkgcHBtIGFuZCA54oCTMTAgcHBtLCBhbmQgZGV0cmVuZHMgdGhlbSB1c2luZyBhIHNlY29uZC1vcmRlciBwb2x5bm9taWFsIGZ1bmN0aW9uLiBEZXRyZW5kaW5nIGlzIHBlcmZvcm1lZCB0byByZW1vdmUgYmFzZWxpbmUgYXJ0aWZhY3RzIChvZnRlbiByZWxhdGVkIHRvIHRoZSByZXNpZHVhbCB3YXRlciBzaWduYWwpLiBUaGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGVhY2ggZGV0cmVuZGVkIG5vaXNlIHNlZ21lbnQgaXMgdGhlbiBjYWxjdWxhdGVkLiBUaGUgc21hbGxlciBvZiB0aGUgdHdvIHN0YW5kYXJkIGRldmlhdGlvbnMgaXMgdGhlbiB1c2VkIGFzIHRoZSBlc3RpbWF0ZSBvZiBub2lzZSwgd2hpY2ggaXMgdGhlbiBtdWx0aXBsaWVkIGJ5IDIuCgpGb3JtdWxhaWNhbGx5LCB0aGlzIGlzIGRlZmluZWQgYXM6CgokJApcbWF0aHJte1NOUn0gPSBcZnJhY3tBX3tcbWF0aHJte21ldGFifX19ezJcY2RvdFxtYXRocm17c3RkfVtTX3tcbWF0aHJte25vaXNlfX0oZildfQokJAoKd2hlcmU6Cgp8IDx1PlBhcmFtZXRlcjwvdT4gfCA8dT5EZWZpbml0aW9uPC91PiB8CnwgOi0gfCA6LS0tLS0tIHwKfCAkQV97XG1hdGhybXttZXRhYn19JCB8IE1heGltdW0gc2lnbmFsIG1vZGVsIGFtcGxpdHVkZSBvZiB0aGUgbWV0YWJvbGl0ZSBvZiBpbnRlcmVzdCB8CnwgJFNfe1xtYXRocm17bm9pc2V9fShmKSQgfCBEZXRyZW5kZWQgbm9pc2Ugc2lnbmFsIGJldHdlZW4gZWl0aGVyIDjigJM5IG9yIDnigJMxMCBwcG0gKHdoaWNoZXZlciB5aWVsZHMgYSBsb3dlciBzdGFuZGFyZCBkZXZpYXRpb24pIGluIHRoZSBhcHByb3ByaWF0ZSBzcGVjdHJ1bSAoaS5lLiwgZWl0aGVyIHRoZSBPRkYgb3IgRElGRiBzcGVjdHJ1bSkgfAoKIyMgRnJlcXVlbmN5IG9mZnNldHMKClRvIGVzdGltYXRlIHRoZSBkZWdyZWUgb2YgZnJlcXVlbmN5IG9mZnNldHMgdGhhdCByZXN1bHQgZnJvbSBzY2FubmVyLXJlbGF0ZWQgZnJlcXVlbmN5IGRyaWZ0IFtASHVpMjAyMWFdIGFuZCBwYXJ0aWNpcGFudCBtb3Rpb24gW0BFdmFuczIwMTNdLCBHYW5uZXQgY2FsY3VsYXRlcyBhbiBhdmVyYWdlIGZyZXF1ZW5jeSBvZmZzZXQgW0BNaWtrZWxzZW4yMDE3XSAkXG92ZXJsaW5le1xEZWx0YVxkZWx0YV97MH19JC4gVGhpcyBpcyBjYWxjdWxhdGVkIGFzIHRoZSBtZWFuIChvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIGFjcXVpc2l0aW9uKSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9ic2VydmVkIGZyZXF1ZW5jeSBvZiB0aGUgcmVzaWR1YWwgd2F0ZXIgc2lnbmFsIGluIHRoZSBwcmUtZnJlcXVlbmN5LWNvcnJlY3RlZCBzdWJzcGVjdHJhIGFuZCB0aGUgbm9taW5hbCB3YXRlciBmcmVxdWVuY3kgJFxkZWx0YV97MH0kIGF0IDQuNjggcHBtICg0LjggcHBtIGZvciByb29tLXRlbXBlcmF0dXJlIHBoYW50b21zKSwgb3IgdGhlIG5vbWluYWwgQ3IgZnJlcXVlbmN5IGF0IDMuMDIgcHBtIGZvciBIRVJNRVMgYWNxdWlzaXRpb25zLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB1c2luZyB0aGUgbWVhbiBvZiBvZmZzZXQgZGlmZmVyZW5jZXMgZG9lcyBub3QgZnVsbHkgY2hhcmFjdGVyaXplIGZyZXF1ZW5jeSBvZmZzZXRzIGJ1dCBpcyBhIHVzZWZ1bCBoZXVyaXN0aWMuCgpGb3JtdWxhaWNhbGx5LCB0aGlzIGlzIGRlZmluZWQgYXM6CgokJApcb3ZlcmxpbmV7XERlbHRhXGRlbHRhX3swfX0gPSBcZnJhY3sxfXtNfVxzdW17XHdpZGVoYXR7XGRlbHRhfV97MCxtfSAtIFxkZWx0YV97MH19CiQkIHdoZXJlOgoKfCA8dT5QYXJhbWV0ZXI8L3U+IHwgPHU+RGVmaW5pdGlvbjwvdT4gfAp8IDotIHwgOi0tLS0tLSB8CnwgJG0kIHwgU3Vic3BlY3RydW0gaW5kZXggbnVtYmVyLCAkbSBcaW4gMSwgMiwgMywgLi4uIE0kIHwKfCAkXHdpZGVoYXR7XGRlbHRhfV97MCxtfSQgfCBPYnNlcnZlZCB3YXRlciBvciB0Q3IgZnJlcXVlbmN5IGluIHN1YnNwZWN0cnVtICRtJCB8CnwgJFxkZWx0YV97MH0kIHwgTm9taW5hbCB3YXRlciBvciB0Q3IgZnJlcXVlbmN5IHwKCiMjIEZpdCBlcnJvcgoKV2hlbiBmaXR0aW5nIHNpZ25hbCBmdW5jdGlvbnMgdG8gbWV0YWJvbGl0ZSBwZWFrcywgR2FubmV0IHdpbGwgYWxzbyBlc3RpbWF0ZSB0aGUgZXJyb3Igb2YgdGhlIGZpdC4gVGhpcyBpcyBkZWZpbmVkIGFzIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIHJlc2lkdWFscyBvZiB0aGUgc2lnbmFsIG1vZGVsIGZpdCBkaXZpZGVkIGJ5IHRoZSBzaWduYWwgbW9kZWwgYW1wbGl0dWRlIGFuZCBtdWx0aXBsaWVkIGJ5IDEwMCB0byBnaXZlIGEgcGVyY2VudGFnZS4KCkZvciBtZXRhYm9saXRlIHBlYWsgZml0cywgdGhpcyBpczoKCiQkClxlcHNpbG9uX3tcbWF0aHJte21ldGFifX0gPSAxMDBcY2RvdFxmcmFje1xtYXRocm17c3RkfVtyZXNpZF97XG1hdGhybXttZXRhYn19KGYpXX17QV97XG1hdGhybXttZXRhYn19fQokJAoKd2hlcmU6Cgp8IDx1PlBhcmFtZXRlcjwvdT4gfCA8dT5EZWZpbml0aW9uPC91PiB8CnwgOi0gfCA6LS0tLS0tIHwKfCAkcmVzaWRfe1xtYXRocm17bWV0YWJ9fSQgfCBGaXQgcmVzaWR1YWxzIG9mIHNpZ25hbCBtb2RlbCBmb3IgbWV0YWJvbGl0ZSB8CnwgJEFfe1xtYXRocm17bWV0YWJ9fSR8IFNpZ25hbCBtb2RlbCBhbXBsaXR1ZGUgfAoKU2ltaWxhcmx5LCBmb3IgcmVmZXJlbmNlIHNpZ25hbCBmaXRzLCB0aGlzIGlzOgoKJCQKXGVwc2lsb25fe1xtYXRocm17cmVmfX0gPSAxMDBcY2RvdFxmcmFje1xtYXRocm17c3RkfVtyZXNpZF97XG1hdGhybXtyZWZ9fShmKV19e0Ffe1xtYXRocm17cmVmfX19CiQkCgpTaW5jZSBhbGwgbWV0YWJvbGl0ZXMgYXJlIG5vcm1hbGl6ZWQgdG8gYSByZWZlcmVuY2Ugc2lnbmFsIChlaXRoZXIgdENyIG9yIHVuc3VwcHJlc3NlZCB3YXRlcikgYW5kIHJlcG9ydGVkIGFzIHN1Y2gsIHRoZSBmaXQgZXJyb3IgdGhhdCByZWFsbHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgKGFuZCByZXBvcnRlZCkgaXMgdGhlIGNvbWJpbmVkIGVycm9yIG9mIHRoZSBtZXRhYm9saXRlIGFuZCByZWZlcmVuY2Ugc2lnbmFsIG1vZGVsIGZpdHMsIHdoaWNoIGFkZCB1cCBpbiBxdWFkcmF0dXJlLgoKRm9ybXVsYWljYWxseSwgdGhpcyBpcyBkZWZpbmVkIGFzOgoKJCQKXGVwc2lsb25fe1xtYXRocm17bWV0YWJ9LFxtYXRocm17cmVmfX0gPSBcc3FydHtcZXBzaWxvbl97XG1hdGhybXttZXRhYn19XjIgKyBcZXBzaWxvbl97XG1hdGhybXtyZWZ9fV4yfQokJAoKIyMgSW1hZ2UgcXVhbGl0eSBtZXRyaWNzCgpXaGVuIHNlZ21lbnRpbmcgc3RydWN0dXJhbCBpbWFnZXMgdG8gb2J0YWluIHZveGVsIHRpc3N1ZSBmcmFjdGlvbnMgb2YgR00sIFdNLCBhbmQgQ1NGLCBHYW5uZXQgY29tcHV0ZXMgc2V2ZXJhbCBtZXRyaWNzIHRvIHF1YW50aWZ5IHRoZSBxdWFsaXR5IG9mIHN0cnVjdHVyYWwgaW1hZ2VzIGFuZCB0aGUgc2VnbWVudGF0aW9uLiBUaGVzZSBhcmUgc3RvcmVkIGluIHRoZSBgTVJTX3N0cnVjdC5vdXQuUUFgIHN0cnVjdHVyZS4gU2V2ZXJhbCBtZXRyaWNzIGZyb20gdGhlIE1SSSBRdWFsaXR5IENvbnRyb2wgdG9vbCAoTVJJUUMpIFtARXN0ZWJhbjIwMTddIGFyZSBjb21wdXRlZC4gTW9yZSBkZXRhaWxzIGFyZSBhbHNvIHByb3ZpZGVkIGluIHRoZSBNUklRQyA8YSBocmVmPSJodHRwczovL21yaXFjLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9pcW1zL3Qxdy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+ZG9jdW1lbnRhdGlvbjwvYT4uCgp8IDx1PlBhcmFtZXRlcjwvdT4gfCA8dT5EZWZpbml0aW9uPC91PiB8CnwgOi0tIHwgOi0tLS0tLSB8CnwgJFxtYXRocm17bWFkfSQgfCBNZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIHwKfCAkXG1hdGhybXttZWR9JCB8IE1lZGlhbiB8CnwgJEdNJCwgJFdNJCwgJENTRiQsICRCRyQgfCBHTSwgV00sIENTRiwgYW5kIGFpciBiYWNrZ3JvdW5kIHNlZ21lbnRlZCBpbWFnZXMgfAp8ICRcc2lnbWEkIHwgU3RhbmRhcmQgZGV2aWF0aW9uIHwKfCAkXG1hdGhybXtQfV97OTkuOTV9JCB8IDk5Ljk1dGggcGVyY2VudGlsZSB8Cgo8YnI+CgojIyMgQ29lZmZpY2llbnQgb2YgdmFyaWF0aW9uIChDVikgb2YgR00sIFdNLCBhbmQgQ1NGCgokJApcbWF0aHJte0NWfSA9IFxmcmFje1xtYXRocm17bWFkfShGKX17XG1hdGhybXttZWR9KEYpfQokJAoKd2hlcmUgJEYkIGNhbiBiZSBHTSwgV00sIG9yIENTRiwgJFxtYXRocm17bWFkfSQgaXMgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24sIGFuZCAkXG1hdGhybXttZWR9JCBpcyB0aGUgbWVkaWFuLgoKPGJyPgoKIyMjIENvZWZmaWNpZW50IG9mIGpvaW50IHZhcmlhdGlvbiAoQ0pWKQoKJCQKXG1hdGhybXtDSlZ9ID0gXGZyYWN7XG1hdGhybXttYWR9KFdNKSArIFxtYXRocm17bWFkfShHTSl9e3xcbWF0aHJte21lZH0oV00pICsgXG1hdGhybXttZWR9KEdNKXx9CiQkCgo8YnI+CgojIyMgQ29udHJhc3QtdG8tbm9pc2UgcmF0aW8gKENOUikKCiQkClxtYXRocm17Q05SfSA9IFxmcmFje3xcbWF0aHJte21lZH0oR00pIC0gXG1hdGhybXttZWR9KFdNKXx9e1xzcXJ0e1xzaWdtYV97XG1hdGhybXtHTX19XnsyfSArIFxzaWdtYV97XG1hdGhybXtXTX19XnsyfSArIFxzaWdtYV97XG1hdGhybXtCR319XnsyfX19CiQkCgp3aGVyZSAkXHNpZ21hJCBpcyB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHRpc3N1ZSBjbGFzcyBvciBiYWNrZ3JvdW5kLgoKPGJyPgoKIyMjIFNOUiBvZiBHTSwgV00sIENTRiwgYW5kIHRvdGFsCgokJApcbWF0aHJte1NOUn0gPSBcZnJhY3tcbWF0aHJte21lZH0oRil9e1xzaWdtYV97Rn1cc3FydHtcZnJhY3tufXtuLTF9fX0KJCQKCkFuIGFsdGVybmF0aXZlIFNOUiBtZWFzdXJlIGJhc2VkIG9uIERpZXRyaWNoIGV0IGFsLiAoMjAwNykgW0BEaWV0cmljaDIwMDddIGlzIGFsc28gY29tcHV0ZWQgdXNpbmcgdGhlIGJhY2tncm91bmQgbWFzayB0aGF0IGlzIGdlbmVyYXRlZCBkdXJpbmcgdGlzc3VlIHNlZ21lbnRhdGlvbjoKCiQkClxtYXRocm17U05SX3tEfX0gPSBcZnJhY3tcbWF0aHJte21lZH0oRil9e1xzcXJ0e1xmcmFjezJ9ezQtXHBpfX1cbWF0aHJte21hZH0oQkcpfQokJAoKRm9yIGJvdGggU05SIG1lYXN1cmVzLCAkRiQgY2FuIGJlIEdNLCBXTSwgb3IgQ1NGLiBUb3RhbCBTTlIgaXMgdGhlIG1lYW4gb2YgYWxsIFNOUiBtZWFzdXJlcy4KCjxicj4KCiMjIyBFbnRyb3B5LWZvY3VzIGNyaXRlcmlvbiAoRUZDKQoKVXNlcyB0aGUgU2hhbm5vbiBlbnRyb3B5IG9mIHZveGVsIGludGVuc2l0aWVzIGFzIGFuIGluZGljYXRpb24gb2YgZ2hvc3RpbmcgYW5kIGJsdXJyaW5nIGluZHVjZWQgYnkgaGVhZCBtb3Rpb24uIExvd2VyIHZhbHVlcyBhcmUgYmV0dGVyLgoKJCQKRSA9IC1cc3VtX3tqPTF9XntOfXtcZnJhY3t4X2p9e3hfe1xtYXRocm17bWF4fX19XGxuXGxlZnQoXGZyYWN7eF9qfXt4X3tcbWF0aHJte21heH19fVxyaWdodCl9CiQkCgp3aXRoICR4X3ttYXh9ID0gXHNxcnR7XHN1bV97aj0xfV57Tn14X3tqfV57Mn19JC4KClRoZSBFRkMgaXMgdGhlbjoKCiQkClxtYXRocm17RUZDfSA9IFxsZWZ0KFxmcmFje059e1xzcXJ0e059fVxsb2d7XHNxcnR7Tn19XnstMX1ccmlnaHQpRQokJAoKd2hlcmU6Cgp8IDx1PlBhcmFtZXRlcjwvdT4gfCA8dT5EZWZpbml0aW9uPC91PiB8CnwgOi0gfCA6LS0tLS0tIHwKfCAkeCQgfCBJbWFnZSB2b3hlbHMgfAp8ICROJCB8IE51bWJlciBvZiBpbWFnZSB2b3hlbHMgfAoKPGJyPgoKIyMjIEZvcmVncm91bmQtdG8tYmFja2dyb3VuZCBlbmVyZ3kgcmF0aW8gKEZCRVIpCgpUaGUgYXZlcmFnZSBlbmVyZ3kgb2YgaW1hZ2Ugdm94ZWwgaW50ZW5zaXRpZXMgd2l0aGluIHRoZSBoZWFkIHJlbGF0aXZlIHRvIG91dHNpZGUgdGhlIGhlYWQuIEhpZ2hlciB2YWx1ZXMgYXJlIGJldHRlci4KCiQkClxtYXRocm17RkJFUn0gPSBcZnJhY3tcbWF0aHJte0V9W3xGfF57Mn1dfXtcbWF0aHJte0V9W3xCfF57Mn1dfQokJAoKd2hlcmU6Cgp8IDx1PlBhcmFtZXRlcjwvdT4gfCA8dT5EZWZpbml0aW9uPC91PiB8CnwgOi0gfCA6LS0tLS0tIHwKfCAkRiQgfCBJbWFnZSB2b3hlbHMgaW5zaWRlIHRoZSBoZWFkIChmb3JlZ3JvdW5kKSB8CnwgJEIkIHwgSW1hZ2Ugdm94ZWxzIG91dHNpZGUgdGhlIGhlYWQgKGJhY2tncm91bmQpIHwKCjxicj4KCiMjIyBXaGl0ZS1tYXR0ZXItdG8tbWF4aW11bS1pbnRlbnNpdHkgcmF0aW8gKFdNMk1BWCkKClRoZSBtZWRpYW4gaW1hZ2Ugdm94ZWwgaW50ZW5zaXR5IHdpdGhpbiB0aGUgV00gbWFzayBvdmVyIHRoZSA5OS45NXRoIHBlcmNlbnRpbGUgb2YgdGhlIGZ1bGwgc3RydWN0dXJhbCBpbWFnZSBzaWduYWwgZGlzdHJpYnV0aW9uLiBWYWx1ZXMgY2xvc2VyIHRvIDEgYXJlIGJldHRlci4KCiQkClxtYXRocm17V00yTUFYfSA9IFxmcmFje1xtYXRocm17bWVkfShXTSl9e1xtYXRocm17UH1fezk5Ljk1fShYKX0KJCQKCjxicj4KCiMjIyBSZWZlcmVuY2VzCg==


Built with R Markdown in RStudio

Copyright © 2020–2025, Mark Mikkelsen