Back to top
Current stable release:
3.3.2
Overview
Gannet is a free, open-source MATLAB-based software toolkit for
analyzing edited single-voxel 1 H magnetic resonance
spectroscopy (MRS) data. Its largely automated functions cover all the
essential steps of modern MRS analysis:
Loading raw data files
Several preprocessing steps
Signal modeling
Voxel co-registration to and segmentation of structural MR
images
Metabolite concentration estimation corrected for tissue
composition
Several existing software packages for MRS data analysis require
substantial user input or offer a wide selection of processing options.
In contrast, the philosophy behind Gannet is to provide users with a
complete automated pipeline without the need for significant user
input.
Additionally, as open-source software, advanced users have the
ability to modify the underlying routines for ad hoc purposes.
Installation
Prerequisites
Gannet runs in
MATLAB .
For best performance, we recommend using the latest release of MATLAB if
possible. Additionally, Gannet requires that the following MATLAB
toolboxes are installed:
Image Processing
Optimization
Signal Processing
Statistics and Machine Learning
You can check which toolboxes you have installed by typing
ver
in the MATLAB command window. To install any missing
toolboxes, please follow these
instructions .
To run the voxel co-registration and structural image segmentation
modules,
SPM12
must be installed.
Download
The simplest way to install Gannet is to download the latest source
code as a ZIP file from the
GitHub
repository and move the Gannet-main/
directory into
your main MATLAB directory (or wherever else you wish).
Alternatively, Git users can clone the Gannet repository into a
directory of their choice:
git clone https://github.com/markmikkelsen/Gannet.git
The development version of Gannet can be downloaded from the
development
branch on GitHub or by using the following Git command if the
repository was cloned:
Stable releases can be found
here .
Setup
Open the Set Path dialog box from the MATLAB menu (or run
the command pathtool
in the Command Window), click Add
with Subfolders… , find the downloaded Gannet directory, and then
select it. When done, press Save to permanently save the Gannet
directory to MATLAB’s default search path.
SPM12 can be installed in the same manner after it has been
downloaded from the
SPM
website.
It is highly
recommended that you only add the main SPM12 directory
(spm12/
) to your search path instead of including all the
subdirectories. This prevents function conflicts.
If you
have
Osprey
also installed on your computer, please ensure that you either have all
the Gannet and SPM12 directories at the top of your search path or have
removed the Osprey directories from your search path. Gannet and Osprey
share several functions that can lead to conflicts that result in Gannet
not functioning correctly.
Compatibility
Gannet is currently being developed in MATLAB R2024b in macOS 15
Sequoia (Apple silicon). While reasonable effort is made to ensure
legacy and cross-OS compatibility, an error-free user experience is not
guaranteed.
Getting help
If you encounter any problems, please first check the Documentation
or FAQ for
a solution.
Otherwise, you can post your query on the
Gannet
forum on
MRSHub .
The Gannet team can also be
contacted
directly. We will do our best to work with you to solve your issue.
Versioning
Gannet uses a form of
semantic versioning in
the style ‘x.x.x’ to mark code releases. Versioning is also conducted on
a module-specific basis using the style ‘YYMMDD’. That is, each Gannet
module has its own release version. Users should note that
module-specific versions sometimes are updated despite the semantic
version number remaining unchanged (typically for minor updates/bug
fixes).
Developers
Richard Edden (Johns Hopkins University) - creator
Mark Mikkelsen (Weill Cornell Medicine) - lead developer
Georg Oeltzschner (Johns Hopkins University) - contributor
Muhammad Saleh (Children’s Hospital of Philadelphia) -
contributor
C. John Evans (Cardiff University) - contributor
Ashley Harris (University of Calgary) - contributor
Nicolaas Puts (King’s College London) - contributor
License and citing Gannet
This software is licensed under an open-source BSD-3-Clause
License . Should you disseminate material that made use of Gannet,
please cite the following publications, as appropriate:
If you perform frequency-and-phase correction (FPC)
using:
Robust spectral registration (RobustSpecReg
):
multi-step FPC (SpecRegHERMES
):
or spectral registration (SpecReg
):
If you perform voxel co-registration:
Please acknowledge the use of SPM12. You may also link/cite the
SPM12
website .
If you perform tissue segmentation:
If you report water-referenced, tissue-corrected metabolite
measurements using:
The Harris et al. method:
or the Gasparovic et al. method:
Acknowledgments
The development and dissemination of Gannet has been supported by the
following National Institutes of Health (NIH) grants:
R01 EB016089
R01 EB023963
P41 EB015909
K99 EB028828
R01 MH106564
R21 MH098228
R21 NS077300
R01 MH096263
We wish to thank the following individuals for their direct or
indirect contributions:
Yair Altman (Undocumented Matlab)
Peter Barker (Johns Hopkins University)
Alex Craven (University of Bergen)
Philipp Ehses (Max Planck Institute for Biological Cybernetics)
Robin de Graaf (Yale School of Medicine)
Xiangrui Li (Ohio State University)
Jamie Near (McGill University)
Ralph Noeske (GE HealthCare)
Wouter Potters (UMC Amsterdam)
Jan Simon (Heidelberg)
LS0tCnRpdGxlOiAiR2FubmV0IgpkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVCICVkLCAlWScpYCIKb3V0cHV0OiBodG1sX2RvY3VtZW50Ci0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyLCBjaGlsZCA9ICJqcy9iYWNrLXRvLXRvcC5qcyJ9CmBgYAoKPGJyPgoKPGltZyBpZD0iaW1nXzUwIiBzcmM9ImltYWdlcy9sb2dvK3RpdGxlLnBuZyIgYWx0PSJUaGUgR2FubmV0IGxvZ28iLz4KCjo6OiByZWxlYXNlCjxoMz5DdXJyZW50IHN0YWJsZSByZWxlYXNlOiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iYmFkZ2UgYmFkZ2Utc2Vjb25kYXJ5Ij4zLjMuMjwvYT48L2gzPgo6OjoKCiMjIE92ZXJ2aWV3CgpHYW5uZXQgaXMgYSBmcmVlLCBvcGVuLXNvdXJjZSBNQVRMQUItYmFzZWQgc29mdHdhcmUgdG9vbGtpdCBmb3IgYW5hbHl6aW5nIGVkaXRlZCBzaW5nbGUtdm94ZWwgXjFeSCBtYWduZXRpYyByZXNvbmFuY2Ugc3BlY3Ryb3Njb3B5IChNUlMpIGRhdGEuIEl0cyBsYXJnZWx5IGF1dG9tYXRlZCBmdW5jdGlvbnMgY292ZXIgYWxsIHRoZSBlc3NlbnRpYWwgc3RlcHMgb2YgbW9kZXJuIE1SUyBhbmFseXNpczoKCi0gICBMb2FkaW5nIHJhdyBkYXRhIGZpbGVzCi0gICBTZXZlcmFsIHByZXByb2Nlc3Npbmcgc3RlcHMKLSAgIFNpZ25hbCBtb2RlbGluZwotICAgVm94ZWwgY28tcmVnaXN0cmF0aW9uIHRvIGFuZCBzZWdtZW50YXRpb24gb2Ygc3RydWN0dXJhbCBNUiBpbWFnZXMKLSAgIE1ldGFib2xpdGUgY29uY2VudHJhdGlvbiBlc3RpbWF0aW9uIGNvcnJlY3RlZCBmb3IgdGlzc3VlIGNvbXBvc2l0aW9uCgpTZXZlcmFsIGV4aXN0aW5nIHNvZnR3YXJlIHBhY2thZ2VzIGZvciBNUlMgZGF0YSBhbmFseXNpcyByZXF1aXJlIHN1YnN0YW50aWFsIHVzZXIgaW5wdXQgb3Igb2ZmZXIgYSB3aWRlIHNlbGVjdGlvbiBvZiBwcm9jZXNzaW5nIG9wdGlvbnMuIEluIGNvbnRyYXN0LCB0aGUgcGhpbG9zb3BoeSBiZWhpbmQgR2FubmV0IGlzIHRvIHByb3ZpZGUgdXNlcnMgd2l0aCBhIGNvbXBsZXRlIGF1dG9tYXRlZCBwaXBlbGluZSB3aXRob3V0IHRoZSBuZWVkIGZvciBzaWduaWZpY2FudCB1c2VyIGlucHV0LgoKQWRkaXRpb25hbGx5LCBhcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZSwgYWR2YW5jZWQgdXNlcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlIHVuZGVybHlpbmcgcm91dGluZXMgZm9yIGFkIGhvYyBwdXJwb3Nlcy4KCiMjIEluc3RhbGxhdGlvbgoKIyMjIFByZXJlcXVpc2l0ZXMKCkdhbm5ldCBydW5zIGluIDxhIGhyZWY9Imh0dHBzOi8vbWF0aHdvcmtzLmNvbS9wcm9kdWN0cy9tYXRsYWIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPk1BVExBQjwvYT4uIEZvciBiZXN0IHBlcmZvcm1hbmNlLCB3ZSByZWNvbW1lbmQgdXNpbmcgdGhlIGxhdGVzdCByZWxlYXNlIG9mIE1BVExBQiBpZiBwb3NzaWJsZS4gQWRkaXRpb25hbGx5LCBHYW5uZXQgcmVxdWlyZXMgdGhhdCB0aGUgZm9sbG93aW5nIE1BVExBQiB0b29sYm94ZXMgYXJlIGluc3RhbGxlZDoKCi0gICBJbWFnZSBQcm9jZXNzaW5nCi0gICBPcHRpbWl6YXRpb24KLSAgIFNpZ25hbCBQcm9jZXNzaW5nCi0gICBTdGF0aXN0aWNzIGFuZCBNYWNoaW5lIExlYXJuaW5nCgpZb3UgY2FuIGNoZWNrIHdoaWNoIHRvb2xib3hlcyB5b3UgaGF2ZSBpbnN0YWxsZWQgYnkgdHlwaW5nIGB2ZXJgIGluIHRoZSBNQVRMQUIgY29tbWFuZCB3aW5kb3cuIFRvIGluc3RhbGwgYW55IG1pc3NpbmcgdG9vbGJveGVzLCBwbGVhc2UgZm9sbG93IHRoZXNlIDxhIGhyZWY9Imh0dHBzOi8vbWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2Fuc3dlcnMvMTAxODg1LWhvdy1kby1pLWluc3RhbGwtYWRkaXRpb25hbC10b29sYm94ZXMtaW50by1hbi1leGlzdGluZy1pbnN0YWxsYXRpb24tb2YtbWF0bGFiIiB0YXJnZXQ9Il9ibGFuayI+aW5zdHJ1Y3Rpb25zPC9hPi4KClRvIHJ1biB0aGUgdm94ZWwgY28tcmVnaXN0cmF0aW9uIGFuZCBzdHJ1Y3R1cmFsIGltYWdlIHNlZ21lbnRhdGlvbiBtb2R1bGVzLCA8YSBocmVmPSJodHRwczovL3d3dy5maWwuaW9uLnVjbC5hYy51ay9zcG0vc29mdHdhcmUvc3BtMTIvIiB0YXJnZXQ9Il9ibGFuayI+U1BNMTI8L2E+IG11c3QgYmUgaW5zdGFsbGVkLgoKIyMjIERvd25sb2FkCgpUaGUgc2ltcGxlc3Qgd2F5IHRvIGluc3RhbGwgR2FubmV0IGlzIHRvIGRvd25sb2FkIHRoZSBsYXRlc3Qgc291cmNlIGNvZGUgYXMgYSBaSVAgZmlsZSBmcm9tIHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQiIHRhcmdldD0iX2JsYW5rIj5HaXRIdWIgcmVwb3NpdG9yeTwvYT4gYW5kIG1vdmUgdGhlIGBHYW5uZXQtbWFpbi9gIGRpcmVjdG9yeSBpbnRvIHlvdXIgbWFpbiBNQVRMQUIgZGlyZWN0b3J5IChvciB3aGVyZXZlciBlbHNlIHlvdSB3aXNoKS4KCkFsdGVybmF0aXZlbHksIEdpdCB1c2VycyBjYW4gY2xvbmUgdGhlIEdhbm5ldCByZXBvc2l0b3J5IGludG8gYSBkaXJlY3Rvcnkgb2YgdGhlaXIgY2hvaWNlOgoKYGBge3ZlcmJhdGltLCBldmFsID0gRkFMU0V9CmdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQuZ2l0CmBgYAoKVGhlIGRldmVsb3BtZW50IHZlcnNpb24gb2YgR2FubmV0IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrbWlra2Vsc2VuL0dhbm5ldC90cmVlL2RldiIgdGFyZ2V0PSJfYmxhbmsiPmRldmVsb3BtZW50IGJyYW5jaDwvYT4gb24gR2l0SHViIG9yIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgR2l0IGNvbW1hbmQgaWYgdGhlIHJlcG9zaXRvcnkgd2FzIGNsb25lZDoKCmBgYHt2ZXJiYXRpbSwgZXZhbCA9IEZBTFNFfQpnaXQgY2hlY2tvdXQgZGV2CmBgYAoKU3RhYmxlIHJlbGVhc2VzIGNhbiBiZSBmb3VuZCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQvcmVsZWFzZXMiIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPi4KCiMjIyBTZXR1cAoKT3BlbiB0aGUgKlNldCBQYXRoKiBkaWFsb2cgYm94IGZyb20gdGhlIE1BVExBQiBtZW51IChvciBydW4gdGhlIGNvbW1hbmQgYHBhdGh0b29sYCBpbiB0aGUgQ29tbWFuZCBXaW5kb3cpLCBjbGljayAqQWRkIHdpdGggU3ViZm9sZGVycy4uLiosIGZpbmQgdGhlIGRvd25sb2FkZWQgR2FubmV0IGRpcmVjdG9yeSwgYW5kIHRoZW4gc2VsZWN0IGl0LiBXaGVuIGRvbmUsIHByZXNzICpTYXZlKiB0byBwZXJtYW5lbnRseSBzYXZlIHRoZSBHYW5uZXQgZGlyZWN0b3J5IHRvIE1BVExBQidzIGRlZmF1bHQgc2VhcmNoIHBhdGguCgpTUE0xMiBjYW4gYmUgaW5zdGFsbGVkIGluIHRoZSBzYW1lIG1hbm5lciBhZnRlciBpdCBoYXMgYmVlbiBkb3dubG9hZGVkIGZyb20gdGhlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbC5pb24udWNsLmFjLnVrL3NwbS9zb2Z0d2FyZS9zcG0xMi8iIHRhcmdldD0iX2JsYW5rIj5TUE08L2E+IHdlYnNpdGUuCgo6OjogaW5mbwo8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiIHN0eWxlPSJjb2xvcjogd2hpdGUiPjwvaT4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IG9ubHkgYWRkIHRoZSBtYWluIFNQTTEyIGRpcmVjdG9yeSAoYHNwbTEyL2ApIHRvIHlvdXIgc2VhcmNoIHBhdGggaW5zdGVhZCBvZiBpbmNsdWRpbmcgYWxsIHRoZSBzdWJkaXJlY3Rvcmllcy4gVGhpcyBwcmV2ZW50cyBmdW5jdGlvbiBjb25mbGljdHMuCjo6OgoKOjo6IHdhcm5pbmcKPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSIgc3R5bGU9ImNvbG9yOiB3aGl0ZSI+PC9pPiBJZiB5b3UgaGF2ZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2Nob3JzY2hpbmhvL29zcHJleSIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjp3aGl0ZSI+PHU+T3NwcmV5PC91PjwvYT4gYWxzbyBpbnN0YWxsZWQgb24geW91ciBjb21wdXRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBlaXRoZXIgaGF2ZSBhbGwgdGhlIEdhbm5ldCBhbmQgU1BNMTIgZGlyZWN0b3JpZXMgYXQgdGhlIHRvcCBvZiB5b3VyIHNlYXJjaCBwYXRoIG9yIGhhdmUgcmVtb3ZlZCB0aGUgT3NwcmV5IGRpcmVjdG9yaWVzIGZyb20geW91ciBzZWFyY2ggcGF0aC4gR2FubmV0IGFuZCBPc3ByZXkgc2hhcmUgc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBjYW4gbGVhZCB0byBjb25mbGljdHMgdGhhdCByZXN1bHQgaW4gR2FubmV0IG5vdCBmdW5jdGlvbmluZyBjb3JyZWN0bHkuCjo6OgoKIyMgQ29tcGF0aWJpbGl0eQoKR2FubmV0IGlzIGN1cnJlbnRseSBiZWluZyBkZXZlbG9wZWQgaW4gTUFUTEFCIFIyMDI0YiBpbiBtYWNPUyAxNSBTZXF1b2lhIChBcHBsZSBzaWxpY29uKS4gV2hpbGUgcmVhc29uYWJsZSBlZmZvcnQgaXMgbWFkZSB0byBlbnN1cmUgbGVnYWN5IGFuZCBjcm9zcy1PUyBjb21wYXRpYmlsaXR5LCBhbiBlcnJvci1mcmVlIHVzZXIgZXhwZXJpZW5jZSBpcyBub3QgZ3VhcmFudGVlZC4KCiMjIFN1cHBvcnRlZCBmaWxlIGZvcm1hdHMKCkF0IHByZXNlbnQsIHRoZSBmb2xsb3dpbmcgTVJTIGRhdGEgZmlsZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQ6CgotIERJQ09NICguZGNtKQotIEdFIFAtZmlsZSAoLjcpCi0gTklmVEktTVJTICgubmlpWy5nel0pCi0gUGhpbGlwcyAuZGF0YS8ubGlzdAotIFBoaWxpcHMgLnJhdwotIFBoaWxpcHMgLnNkYXQvLnNwYXIKLSBTaWVtZW5zIERJQ09NICguaW1hKQotIFNpZW1lbnMgLnJkYQotIFNpZW1lbnMgVFdJWCAoLmRhdCkKCkZvciBjcmVhdGluZyBhbmQgY28tcmVnaXN0ZXJpbmcgdm94ZWwgbWFza3MsIHN0cnVjdHVyYWwgaW1hZ2VzIG5lZWQgdG8gYmUgaW4gTklmVEkgZm9ybWF0IChESUNPTSBmaWxlcyBjYW4gYWxzbyBiZSB1c2VkIGlmIHByb2Nlc3NpbmcgR0UgUC1maWxlcykuCgo6Ojogd2FybmluZwo8aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIiBzdHlsZT0iY29sb3I6IHdoaXRlIj48L2k+IFBoaWxpcHMgdXNlcnM6IERvIG5vdCB1c2Ugc3RydWN0dXJhbCBpbWFnZXMgZXhwb3J0ZWQgdXNpbmcgdGhlICpmc2wtbmlmdGkqIG9wdGlvbiBhcyB0aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2l0aCBjby1yZWdpc3RyYXRpb24gaW4gR2FubmV0Lgo6OjoKCiMjIEdldHRpbmcgaGVscAoKSWYgeW91IGVuY291bnRlciBhbnkgcHJvYmxlbXMsIHBsZWFzZSBmaXJzdCBjaGVjayB0aGUgRG9jdW1lbnRhdGlvbiBvciBbRkFRXShodHRwczovL21hcmttaWtrZWxzZW4uZ2l0aHViLmlvL0dhbm5ldC1kb2NzL2ZhcS5odG1sKSBmb3IgYSBzb2x1dGlvbi4KCk90aGVyd2lzZSwgeW91IGNhbiBwb3N0IHlvdXIgcXVlcnkgb24gdGhlIDxhIGhyZWY9Imh0dHBzOi8vZm9ydW0ubXJzaHViLm9yZy9jL21ycy1zb2Z0d2FyZS9nYW5uZXQvOSIgdGFyZ2V0PSJfYmxhbmsiPkdhbm5ldCBmb3J1bTwvYT4gb24gPGEgaHJlZj0iaHR0cHM6Ly9tcnNodWIub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPk1SU0h1YjwvYT4uCgpUaGUgR2FubmV0IHRlYW0gY2FuIGFsc28gYmUgPGEgaHJlZj0ibWFpbHRvOm1hbTQwNDFAbWVkLmNvcm5lbGwuZWR1P3N1YmplY3Q9W0dhbm5ldF0lMjA8UGxlYXNlIGVudGVyIHRoZSBzdWJqZWN0IG9mIHlvdXIgcXVlcnkgaGVyZT4iIHRhcmdldD0iX2JsYW5rIj5jb250YWN0ZWQ8L2E+IGRpcmVjdGx5LiBXZSB3aWxsIGRvIG91ciBiZXN0IHRvIHdvcmsgd2l0aCB5b3UgdG8gc29sdmUgeW91ciBpc3N1ZS4KCiMjIFZlcnNpb25pbmcKCkdhbm5ldCB1c2VzIGEgZm9ybSBvZiA8YSBocmVmPSJodHRwczovL3NlbXZlci5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+c2VtYW50aWMgdmVyc2lvbmluZzwvYT4gaW4gdGhlIHN0eWxlICd4LngueCcgdG8gbWFyayBjb2RlIHJlbGVhc2VzLiBWZXJzaW9uaW5nIGlzIGFsc28gY29uZHVjdGVkIG9uIGEgbW9kdWxlLXNwZWNpZmljIGJhc2lzIHVzaW5nIHRoZSBzdHlsZSAnWVlNTUREJy4gVGhhdCBpcywgZWFjaCBHYW5uZXQgbW9kdWxlIGhhcyBpdHMgb3duIHJlbGVhc2UgdmVyc2lvbi4gVXNlcnMgc2hvdWxkIG5vdGUgdGhhdCBtb2R1bGUtc3BlY2lmaWMgdmVyc2lvbnMgc29tZXRpbWVzIGFyZSB1cGRhdGVkIGRlc3BpdGUgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyIHJlbWFpbmluZyB1bmNoYW5nZWQgKHR5cGljYWxseSBmb3IgbWlub3IgdXBkYXRlcy9idWcgZml4ZXMpLgoKIyMgRGV2ZWxvcGVycwoKLSBSaWNoYXJkIEVkZGVuIChKb2hucyBIb3BraW5zIFVuaXZlcnNpdHkpIC0gY3JlYXRvcgotIE1hcmsgTWlra2Vsc2VuIChXZWlsbCBDb3JuZWxsIE1lZGljaW5lKSAtIGxlYWQgZGV2ZWxvcGVyCi0gR2VvcmcgT2VsdHpzY2huZXIgKEpvaG5zIEhvcGtpbnMgVW5pdmVyc2l0eSkgLSBjb250cmlidXRvcgotIE11aGFtbWFkIFNhbGVoIChDaGlsZHJlbidzIEhvc3BpdGFsIG9mIFBoaWxhZGVscGhpYSkgLSBjb250cmlidXRvcgotIEMuIEpvaG4gRXZhbnMgKENhcmRpZmYgVW5pdmVyc2l0eSkgLSBjb250cmlidXRvcgotIEFzaGxleSBIYXJyaXMgKFVuaXZlcnNpdHkgb2YgQ2FsZ2FyeSkgLSBjb250cmlidXRvcgotIE5pY29sYWFzIFB1dHMgKEtpbmcncyBDb2xsZWdlIExvbmRvbikgLSBjb250cmlidXRvcgoKIyMgTGljZW5zZSBhbmQgY2l0aW5nIEdhbm5ldAoKVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciBhbiBvcGVuLXNvdXJjZSBbQlNELTMtQ2xhdXNlIExpY2Vuc2VdKGh0dHBzOi8vbWFya21pa2tlbHNlbi5naXRodWIuaW8vR2FubmV0LWRvY3MvZ2FubmV0LWxpY2Vuc2UuaHRtbCkuIFNob3VsZCB5b3UgZGlzc2VtaW5hdGUgbWF0ZXJpYWwgdGhhdCBtYWRlIHVzZSBvZiBHYW5uZXQsIHBsZWFzZSBjaXRlIHRoZSBmb2xsb3dpbmcgcHVibGljYXRpb25zLCBhcyBhcHByb3ByaWF0ZToKCi0gRWRkZW4gUkFFLCBQdXRzIE5BSiwgSGFycmlzIEFELCBCYXJrZXIgUEIsIEV2YW5zIENKLiA8YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuMTAwMi9qbXJpLjI0NDc4IiB0YXJnZXQ9Il9ibGFuayI+R2FubmV0OiBBIGJhdGNoLXByb2Nlc3NpbmcgdG9vbCBmb3IgdGhlIHF1YW50aXRhdGl2ZSBhbmFseXNpcyBvZiBnYW1tYS1hbWlub2J1dHlyaWMgYWNpZC1lZGl0ZWQgTVIgc3BlY3Ryb3Njb3B5IHNwZWN0cmEuPC9hPiAqSm91cm5hbCBvZiBNYWduZXRpYyBSZXNvbmFuY2UgSW1hZ2luZyouIDIwMTQ7NDAoNik6MTQ0NS0tMTQ1MgoKKipJZiB5b3UgcGVyZm9ybSBmcmVxdWVuY3ktYW5kLXBoYXNlIGNvcnJlY3Rpb24gKEZQQykgdXNpbmc6KioKClJvYnVzdCBzcGVjdHJhbCByZWdpc3RyYXRpb24gKGBSb2J1c3RTcGVjUmVnYCk6CgotIE1pa2tlbHNlbiBNLCBUYXBwZXIgUywgTmVhciBKLCBNb3N0b2Zza3kgU0gsIFB1dHMgTkFKLCBFZGRlbiBSQUUuIDxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC4xMDAyL25ibS40MzY4IiB0YXJnZXQ9Il9ibGFuayI+Q29ycmVjdGluZyBmcmVxdWVuY3kgYW5kIHBoYXNlIG9mZnNldHMgaW4gTVJTIGRhdGEgdXNpbmcgcm9idXN0IHNwZWN0cmFsIHJlZ2lzdHJhdGlvbi48L2E+ICpOTVIgaW4gQmlvbWVkaWNpbmUqLiAyMDIwOzMzKDEwKTplNDM2OAoKbXVsdGktc3RlcCBGUEMgKGBTcGVjUmVnSEVSTUVTYCk6CgotIE1pa2tlbHNlbiBNLCBTYWxlaCBNRywgTmVhciBKLCBldCBhbC4gPGEgaHJlZj0iaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvbXJtLjI3MDI3IiB0YXJnZXQ9Il9ibGFuayI+RnJlcXVlbmN5IGFuZCBwaGFzZSBjb3JyZWN0aW9uIGZvciBtdWx0aXBsZXhlZCBlZGl0ZWQgTVJTIG9mIEdBQkEgYW5kIGdsdXRhdGhpb25lLjwvYT4gKk1hZ25ldGljIFJlc29uYW5jZSBpbiBNZWRpY2luZSouIDIwMTg7ODAoMSk6MjEtLTI4CgpvciBzcGVjdHJhbCByZWdpc3RyYXRpb24gKGBTcGVjUmVnYCk6CgotIE5lYXIgSiwgRWRkZW4gUiwgRXZhbnMgQ0osIFBhcXVpbiBSLCBIYXJyaXMgQSwgSmV6emFyZCBQLiA8YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuMTAwMi9tcm0uMjUwOTQiIHRhcmdldD0iX2JsYW5rIj5GcmVxdWVuY3kgYW5kIHBoYXNlIGRyaWZ0IGNvcnJlY3Rpb24gb2YgbWFnbmV0aWMgcmVzb25hbmNlIHNwZWN0cm9zY29weSBkYXRhIGJ5IHNwZWN0cmFsIHJlZ2lzdHJhdGlvbiBpbiB0aGUgdGltZSBkb21haW4uPC9hPiAqTWFnbmV0aWMgUmVzb25hbmNlIGluIE1lZGljaW5lKi4gMjAxNTs3MygxKTo0NC0tNTAKCioqSWYgeW91IHBlcmZvcm0gdm94ZWwgY28tcmVnaXN0cmF0aW9uOioqCgotIFBsZWFzZSBhY2tub3dsZWRnZSB0aGUgdXNlIG9mIFNQTTEyLiBZb3UgbWF5IGFsc28gbGluay9jaXRlIHRoZSA8YSBocmVmPSJodHRwczovL3d3dy5maWwuaW9uLnVjbC5hYy51ay9zcG0vc29mdHdhcmUvc3BtMTIvIiB0YXJnZXQ9Il9ibGFuayI+U1BNMTIgd2Vic2l0ZTwvYT4uCgoqKklmIHlvdSBwZXJmb3JtIHRpc3N1ZSBzZWdtZW50YXRpb246KioKCi0gQXNoYnVybmVyIEosIEZyaXN0b24gS0ouIDxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2oubmV1cm9pbWFnZS4yMDA1LjAyLjAxOCIgdGFyZ2V0PSJfYmxhbmsiPlVuaWZpZWQgc2VnbWVudGF0aW9uLjwvYT4gKk5ldXJvSW1hZ2UqLiAyMDA1OzI2KDMpOjgzOS0tODUxCgoqKklmIHlvdSByZXBvcnQgd2F0ZXItcmVmZXJlbmNlZCwgdGlzc3VlLWNvcnJlY3RlZCBtZXRhYm9saXRlIG1lYXN1cmVtZW50cyB1c2luZzoqKgoKVGhlIEhhcnJpcyBldCBhbC4gbWV0aG9kOgoKLSBIYXJyaXMgQUQsIFB1dHMgTkFKLCBFZGRlbiBSQUUuIDxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC4xMDAyL2ptcmkuMjQ5MDMiIHRhcmdldD0iX2JsYW5rIj5UaXNzdWUgY29ycmVjdGlvbiBmb3IgR0FCQS1lZGl0ZWQgTVJTOiBDb25zaWRlcmF0aW9ucyBvZiB2b3hlbCBjb21wb3NpdGlvbiwgdGlzc3VlIHNlZ21lbnRhdGlvbiwgYW5kIHRpc3N1ZSByZWxheGF0aW9ucy48L2E+ICpKb3VybmFsIG9mIE1hZ25ldGljIFJlc29uYW5jZSBJbWFnaW5nKi4gMjAxNTs0Mig1KToxNDMxLS0xNDQwCgpvciB0aGUgR2FzcGFyb3ZpYyBldCBhbC4gbWV0aG9kOgoKLSBHYXNwYXJvdmljIEMsIFNvbmcgVCwgRGV2aWVyIEQsIGV0IGFsLiA8YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuMTAwMi9tcm0uMjA5MDEiIHRhcmdldD0iX2JsYW5rIj5Vc2Ugb2YgdGlzc3VlIHdhdGVyIGFzIGEgY29uY2VudHJhdGlvbiByZWZlcmVuY2UgZm9yIHByb3RvbiBzcGVjdHJvc2NvcGljIGltYWdpbmcuPC9hPiAqTWFnbmV0aWMgUmVzb25hbmNlIGluIE1lZGljaW5lKi4gMjAwNjs1NSg2KToxMjE5LS0xMjI2CgojIyBBY2tub3dsZWRnbWVudHMKClRoZSBkZXZlbG9wbWVudCBhbmQgZGlzc2VtaW5hdGlvbiBvZiBHYW5uZXQgaGFzIGJlZW4gc3VwcG9ydGVkIGJ5IHRoZSBmb2xsb3dpbmcgTmF0aW9uYWwgSW5zdGl0dXRlcyBvZiBIZWFsdGggKE5JSCkgZ3JhbnRzOgoKLSBSMDEgRUIwMTYwODkKLSBSMDEgRUIwMjM5NjMKLSBQNDEgRUIwMTU5MDkKLSBLOTkgRUIwMjg4MjgKLSBSMDEgTUgxMDY1NjQKLSBSMjEgTUgwOTgyMjgKLSBSMjEgTlMwNzczMDAKLSBSMDEgTUgwOTYyNjMKCldlIHdpc2ggdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBmb3IgdGhlaXIgZGlyZWN0IG9yIGluZGlyZWN0IGNvbnRyaWJ1dGlvbnM6CgotIFlhaXIgQWx0bWFuIChVbmRvY3VtZW50ZWQgTWF0bGFiKQotIFBldGVyIEJhcmtlciAoSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5KQotIEFsZXggQ3JhdmVuIChVbml2ZXJzaXR5IG9mIEJlcmdlbikKLSBQaGlsaXBwIEVoc2VzIChNYXggUGxhbmNrIEluc3RpdHV0ZSBmb3IgQmlvbG9naWNhbCBDeWJlcm5ldGljcykKLSBSb2JpbiBkZSBHcmFhZiAoWWFsZSBTY2hvb2wgb2YgTWVkaWNpbmUpCi0gWGlhbmdydWkgTGkgKE9oaW8gU3RhdGUgVW5pdmVyc2l0eSkKLSBKYW1pZSBOZWFyIChNY0dpbGwgVW5pdmVyc2l0eSkKLSBSYWxwaCBOb2Vza2UgKEdFIEhlYWx0aENhcmUpCi0gV291dGVyIFBvdHRlcnMgKFVNQyBBbXN0ZXJkYW0pCi0gSmFuIFNpbW9uIChIZWlkZWxiZXJnKQoKCgo=
Built with R Markdown in RStudio
Copyright © 2020–2024, Mark Mikkelsen