Back to top
 
Current stable release:
3.5.1 
 
 
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:
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.
spm12/) to your search path instead of including all the
subdirectories. This prevents function conflicts.
 
Osprey 
 
 
 
Compatibility 
Gannet is currently being developed in MATLAB R2025a in macOS 26
Tahoe (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).
 
Developer 
Mark Mikkelsen (Weill Cornell Medicine) 
 
 
Contributors 
Richard Edden (Johns Hopkins University School of Medicine) -
creator 
Georg Oeltzschner (Johns Hopkins University School of Medicine) 
Muhammad Saleh (Children’s Hospital of Philadelphia) 
C. John Evans (Cardiff University) - former contributor 
Ashley Harris (University of Calgary) - former contributor 
Nicolaas Puts (King’s College London) - former 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 (Sunnybrook Research Institute/University of
Toronto) 
Ralph Noeske (GE HealthCare) 
Wouter Potters (UMC Amsterdam) 
Jan Simon (Heidelberg) 
 
 
LS0tCnRpdGxlOiAiR2FubmV0IgpkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVCICVkLCAlWScpYCIKb3V0cHV0OiBodG1sX2RvY3VtZW50Ci0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyLCBjaGlsZCA9ICJqcy9iYWNrLXRvLXRvcC5qcyJ9CmBgYAoKPGJyPgoKPGltZyBpZD0iaW1nXzUwIiBzcmM9ImltYWdlcy9sb2dvK3RpdGxlLnBuZyIgYWx0PSJUaGUgR2FubmV0IGxvZ28iLz4KCjo6OiByZWxlYXNlCjxoMz5DdXJyZW50IHN0YWJsZSByZWxlYXNlOiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iYmFkZ2UgYmFkZ2Utc2Vjb25kYXJ5Ij4zLjUuMTwvYT48L2gzPgo6OjoKCiMjIE92ZXJ2aWV3CgpHYW5uZXQgaXMgYSBmcmVlLCBvcGVuLXNvdXJjZSBNQVRMQUItYmFzZWQgc29mdHdhcmUgdG9vbGtpdCBmb3IgYW5hbHl6aW5nIGVkaXRlZCBzaW5nbGUtdm94ZWwgXjFeSCBtYWduZXRpYyByZXNvbmFuY2Ugc3BlY3Ryb3Njb3B5IChNUlMpIGRhdGEuIEl0cyBsYXJnZWx5IGF1dG9tYXRlZCBmdW5jdGlvbnMgY292ZXIgYWxsIHRoZSBlc3NlbnRpYWwgc3RlcHMgb2YgbW9kZXJuIE1SUyBhbmFseXNpczoKCi0gICBMb2FkaW5nIHJhdyBkYXRhIGZpbGVzCi0gICBTZXZlcmFsIHByZXByb2Nlc3Npbmcgc3RlcHMKLSAgIFNpZ25hbCBtb2RlbGluZwotICAgVm94ZWwgY28tcmVnaXN0cmF0aW9uIHRvIGFuZCBzZWdtZW50YXRpb24gb2Ygc3RydWN0dXJhbCBNUiBpbWFnZXMKLSAgIE1ldGFib2xpdGUgY29uY2VudHJhdGlvbiBlc3RpbWF0aW9uIGNvcnJlY3RlZCBmb3IgdGlzc3VlIGNvbXBvc2l0aW9uCgpTZXZlcmFsIGV4aXN0aW5nIHNvZnR3YXJlIHBhY2thZ2VzIGZvciBNUlMgZGF0YSBhbmFseXNpcyByZXF1aXJlIHN1YnN0YW50aWFsIHVzZXIgaW5wdXQgb3Igb2ZmZXIgYSB3aWRlIHNlbGVjdGlvbiBvZiBwcm9jZXNzaW5nIG9wdGlvbnMuIEluIGNvbnRyYXN0LCB0aGUgcGhpbG9zb3BoeSBiZWhpbmQgR2FubmV0IGlzIHRvIHByb3ZpZGUgdXNlcnMgd2l0aCBhIGNvbXBsZXRlIGF1dG9tYXRlZCBwaXBlbGluZSB3aXRob3V0IHRoZSBuZWVkIGZvciBzaWduaWZpY2FudCB1c2VyIGlucHV0LgoKQWRkaXRpb25hbGx5LCBhcyBvcGVuLXNvdXJjZSBzb2Z0d2FyZSwgYWR2YW5jZWQgdXNlcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlIHVuZGVybHlpbmcgcm91dGluZXMgZm9yIGFkIGhvYyBwdXJwb3Nlcy4KCiMjIEluc3RhbGxhdGlvbgoKIyMjIFByZXJlcXVpc2l0ZXMKCkdhbm5ldCBydW5zIGluIDxhIGhyZWY9Imh0dHBzOi8vbWF0aHdvcmtzLmNvbS9wcm9kdWN0cy9tYXRsYWIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPk1BVExBQjwvYT4uIEZvciBiZXN0IHBlcmZvcm1hbmNlLCB3ZSByZWNvbW1lbmQgdXNpbmcgdGhlIGxhdGVzdCByZWxlYXNlIG9mIE1BVExBQiBpZiBwb3NzaWJsZS4gQWRkaXRpb25hbGx5LCBHYW5uZXQgcmVxdWlyZXMgdGhhdCB0aGUgZm9sbG93aW5nIE1BVExBQiB0b29sYm94ZXMgYXJlIGluc3RhbGxlZDoKCi0gICBJbWFnZSBQcm9jZXNzaW5nCi0gICBPcHRpbWl6YXRpb24KLSAgIFNpZ25hbCBQcm9jZXNzaW5nCi0gICBTdGF0aXN0aWNzIGFuZCBNYWNoaW5lIExlYXJuaW5nCgpZb3UgY2FuIGNoZWNrIHdoaWNoIHRvb2xib3hlcyB5b3UgaGF2ZSBpbnN0YWxsZWQgYnkgdHlwaW5nIGB2ZXJgIGluIHRoZSBNQVRMQUIgY29tbWFuZCB3aW5kb3cuIFRvIGluc3RhbGwgYW55IG1pc3NpbmcgdG9vbGJveGVzLCBwbGVhc2UgZm9sbG93IHRoZXNlIDxhIGhyZWY9Imh0dHBzOi8vbWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2Fuc3dlcnMvMTAxODg1LWhvdy1kby1pLWluc3RhbGwtYWRkaXRpb25hbC10b29sYm94ZXMtaW50by1hbi1leGlzdGluZy1pbnN0YWxsYXRpb24tb2YtbWF0bGFiIiB0YXJnZXQ9Il9ibGFuayI+aW5zdHJ1Y3Rpb25zPC9hPi4KClRvIHJ1biB0aGUgdm94ZWwgY28tcmVnaXN0cmF0aW9uIGFuZCBzdHJ1Y3R1cmFsIGltYWdlIHNlZ21lbnRhdGlvbiBtb2R1bGVzLCA8YSBocmVmPSJodHRwczovL3d3dy5maWwuaW9uLnVjbC5hYy51ay9zcG0vc29mdHdhcmUvc3BtMTIvIiB0YXJnZXQ9Il9ibGFuayI+U1BNMTI8L2E+IG11c3QgYmUgaW5zdGFsbGVkLgoKIyMjIERvd25sb2FkCgpUaGUgc2ltcGxlc3Qgd2F5IHRvIGluc3RhbGwgR2FubmV0IGlzIHRvIGRvd25sb2FkIHRoZSBsYXRlc3Qgc291cmNlIGNvZGUgYXMgYSBaSVAgZmlsZSBmcm9tIHRoZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQiIHRhcmdldD0iX2JsYW5rIj5HaXRIdWIgcmVwb3NpdG9yeTwvYT4gYW5kIG1vdmUgdGhlIGBHYW5uZXQtbWFpbi9gIGRpcmVjdG9yeSBpbnRvIHlvdXIgbWFpbiBNQVRMQUIgZGlyZWN0b3J5IChvciB3aGVyZXZlciBlbHNlIHlvdSB3aXNoKS4KCkFsdGVybmF0aXZlbHksIEdpdCB1c2VycyBjYW4gY2xvbmUgdGhlIEdhbm5ldCByZXBvc2l0b3J5IGludG8gYSBkaXJlY3Rvcnkgb2YgdGhlaXIgY2hvaWNlOgoKYGBge3ZlcmJhdGltLCBldmFsID0gRkFMU0V9CmdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQuZ2l0CmBgYAoKVGhlIGRldmVsb3BtZW50IHZlcnNpb24gb2YgR2FubmV0IGNhbiBiZSBkb3dubG9hZGVkIGZyb20gdGhlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrbWlra2Vsc2VuL0dhbm5ldC90cmVlL2RldiIgdGFyZ2V0PSJfYmxhbmsiPmRldmVsb3BtZW50IGJyYW5jaDwvYT4gb24gR2l0SHViIG9yIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgR2l0IGNvbW1hbmQgaWYgdGhlIHJlcG9zaXRvcnkgd2FzIGNsb25lZDoKCmBgYHt2ZXJiYXRpbSwgZXZhbCA9IEZBTFNFfQpnaXQgY2hlY2tvdXQgZGV2CmBgYAoKU3RhYmxlIHJlbGVhc2VzIGNhbiBiZSBmb3VuZCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFya21pa2tlbHNlbi9HYW5uZXQvcmVsZWFzZXMiIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPi4KCiMjIyBTZXR1cAoKT3BlbiB0aGUgKlNldCBQYXRoKiBkaWFsb2cgYm94IGZyb20gdGhlIE1BVExBQiBtZW51IChvciBydW4gdGhlIGNvbW1hbmQgYHBhdGh0b29sYCBpbiB0aGUgQ29tbWFuZCBXaW5kb3cpLCBjbGljayAqQWRkIHdpdGggU3ViZm9sZGVycy4uLiosIGZpbmQgdGhlIGRvd25sb2FkZWQgR2FubmV0IGRpcmVjdG9yeSwgYW5kIHRoZW4gc2VsZWN0IGl0LiBXaGVuIGRvbmUsIHByZXNzICpTYXZlKiB0byBwZXJtYW5lbnRseSBzYXZlIHRoZSBHYW5uZXQgZGlyZWN0b3J5IHRvIE1BVExBQidzIGRlZmF1bHQgc2VhcmNoIHBhdGguCgpTUE0xMiBjYW4gYmUgaW5zdGFsbGVkIGluIHRoZSBzYW1lIG1hbm5lciBhZnRlciBpdCBoYXMgYmVlbiBkb3dubG9hZGVkIGZyb20gdGhlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbC5pb24udWNsLmFjLnVrL3NwbS9zb2Z0d2FyZS9zcG0xMi8iIHRhcmdldD0iX2JsYW5rIj5TUE08L2E+IHdlYnNpdGUuCgo6OjogaW5mbwo8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiIHN0eWxlPSJjb2xvcjogd2hpdGUiPjwvaT4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IG9ubHkgYWRkIHRoZSBtYWluIFNQTTEyIGRpcmVjdG9yeSAoYHNwbTEyL2ApIHRvIHlvdXIgc2VhcmNoIHBhdGggaW5zdGVhZCBvZiBpbmNsdWRpbmcgYWxsIHRoZSBzdWJkaXJlY3Rvcmllcy4gVGhpcyBwcmV2ZW50cyBmdW5jdGlvbiBjb25mbGljdHMuCjo6OgoKOjo6IHdhcm5pbmcKPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSIgc3R5bGU9ImNvbG9yOiB3aGl0ZSI+PC9pPiBJZiB5b3UgaGF2ZSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2Nob3JzY2hpbmhvL29zcHJleSIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjp3aGl0ZSI+PHU+T3NwcmV5PC91PjwvYT4gYWxzbyBpbnN0YWxsZWQgb24geW91ciBjb21wdXRlciwgcGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBlaXRoZXIgaGF2ZSBhbGwgdGhlIEdhbm5ldCBhbmQgU1BNMTIgZGlyZWN0b3JpZXMgYXQgdGhlIHRvcCBvZiB5b3VyIHNlYXJjaCBwYXRoIG9yIGhhdmUgcmVtb3ZlZCB0aGUgT3NwcmV5IGRpcmVjdG9yaWVzIGZyb20geW91ciBzZWFyY2ggcGF0aC4gR2FubmV0IGFuZCBPc3ByZXkgc2hhcmUgc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBjYW4gbGVhZCB0byBjb25mbGljdHMgdGhhdCByZXN1bHQgaW4gR2FubmV0IG5vdCBmdW5jdGlvbmluZyBjb3JyZWN0bHkuCjo6OgoKIyMgQ29tcGF0aWJpbGl0eQoKR2FubmV0IGlzIGN1cnJlbnRseSBiZWluZyBkZXZlbG9wZWQgaW4gTUFUTEFCIFIyMDI1YSBpbiBtYWNPUyAyNiBUYWhvZSAoQXBwbGUgc2lsaWNvbikuIFdoaWxlIHJlYXNvbmFibGUgZWZmb3J0IGlzIG1hZGUgdG8gZW5zdXJlIGxlZ2FjeSBhbmQgY3Jvc3MtT1MgY29tcGF0aWJpbGl0eSwgYW4gZXJyb3ItZnJlZSB1c2VyIGV4cGVyaWVuY2UgaXMgbm90IGd1YXJhbnRlZWQuCgojIyBTdXBwb3J0ZWQgZmlsZSBmb3JtYXRzCgpBdCBwcmVzZW50LCB0aGUgZm9sbG93aW5nIE1SUyBkYXRhIGZpbGUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOgoKLSBESUNPTSAoLmRjbSkKLSBHRSBQLWZpbGUgKC43KQotIE5JZlRJLU1SUyAoLm5paVsuZ3pdKQotIFBoaWxpcHMgLmRhdGEvLmxpc3QKLSBQaGlsaXBzIC5yYXcKLSBQaGlsaXBzIC5zZGF0Ly5zcGFyCi0gU2llbWVucyBESUNPTSAoLmltYSkKLSBTaWVtZW5zIC5yZGEKLSBTaWVtZW5zIFRXSVggKC5kYXQpCgpGb3IgY3JlYXRpbmcgYW5kIGNvLXJlZ2lzdGVyaW5nIHZveGVsIG1hc2tzLCBzdHJ1Y3R1cmFsIGltYWdlcyBuZWVkIHRvIGJlIGluIE5JZlRJIGZvcm1hdCAoRElDT00gZmlsZXMgY2FuIGFsc28gYmUgdXNlZCBpZiBwcm9jZXNzaW5nIEdFIFAtZmlsZXMpLgoKOjo6IHdhcm5pbmcKPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSIgc3R5bGU9ImNvbG9yOiB3aGl0ZSI+PC9pPiBQaGlsaXBzIHVzZXJzOiBEbyBub3QgdXNlIHN0cnVjdHVyYWwgaW1hZ2VzIGV4cG9ydGVkIHVzaW5nIHRoZSAqZnNsLW5pZnRpKiBvcHRpb24gYXMgdGhpcyBjcmVhdGVzIHByb2JsZW1zIHdpdGggY28tcmVnaXN0cmF0aW9uIGluIEdhbm5ldC4KOjo6CgojIyBHZXR0aW5nIGhlbHAKCklmIHlvdSBlbmNvdW50ZXIgYW55IHByb2JsZW1zLCBwbGVhc2UgZmlyc3QgY2hlY2sgdGhlIERvY3VtZW50YXRpb24gb3IgW0ZBUV0oaHR0cHM6Ly9tYXJrbWlra2Vsc2VuLmdpdGh1Yi5pby9HYW5uZXQtZG9jcy9mYXEuaHRtbCkgZm9yIGEgc29sdXRpb24uCgpPdGhlcndpc2UsIHlvdSBjYW4gcG9zdCB5b3VyIHF1ZXJ5IG9uIHRoZSA8YSBocmVmPSJodHRwczovL2ZvcnVtLm1yc2h1Yi5vcmcvYy9tcnMtc29mdHdhcmUvZ2FubmV0LzkiIHRhcmdldD0iX2JsYW5rIj5HYW5uZXQgZm9ydW08L2E+IG9uIDxhIGhyZWY9Imh0dHBzOi8vbXJzaHViLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5NUlNIdWI8L2E+LgoKVGhlIEdhbm5ldCB0ZWFtIGNhbiBhbHNvIGJlIDxhIGhyZWY9Im1haWx0bzptYW00MDQxQG1lZC5jb3JuZWxsLmVkdT9zdWJqZWN0PVtHYW5uZXRdJTIwPFBsZWFzZSBlbnRlciB0aGUgc3ViamVjdCBvZiB5b3VyIHF1ZXJ5IGhlcmU+IiB0YXJnZXQ9Il9ibGFuayI+Y29udGFjdGVkPC9hPiBkaXJlY3RseS4gV2Ugd2lsbCBkbyBvdXIgYmVzdCB0byB3b3JrIHdpdGggeW91IHRvIHNvbHZlIHlvdXIgaXNzdWUuCgojIyBWZXJzaW9uaW5nCgpHYW5uZXQgdXNlcyBhIGZvcm0gb2YgPGEgaHJlZj0iaHR0cHM6Ly9zZW12ZXIub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPnNlbWFudGljIHZlcnNpb25pbmc8L2E+IGluIHRoZSBzdHlsZSAneC54LngnIHRvIG1hcmsgY29kZSByZWxlYXNlcy4gVmVyc2lvbmluZyBpcyBhbHNvIGNvbmR1Y3RlZCBvbiBhIG1vZHVsZS1zcGVjaWZpYyBiYXNpcyB1c2luZyB0aGUgc3R5bGUgJ1lZTU1ERCcuIFRoYXQgaXMsIGVhY2ggR2FubmV0IG1vZHVsZSBoYXMgaXRzIG93biByZWxlYXNlIHZlcnNpb24uIFVzZXJzIHNob3VsZCBub3RlIHRoYXQgbW9kdWxlLXNwZWNpZmljIHZlcnNpb25zIHNvbWV0aW1lcyBhcmUgdXBkYXRlZCBkZXNwaXRlIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciByZW1haW5pbmcgdW5jaGFuZ2VkICh0eXBpY2FsbHkgZm9yIG1pbm9yIHVwZGF0ZXMvYnVnIGZpeGVzKS4KCiMjIERldmVsb3BlcgoKLSBNYXJrIE1pa2tlbHNlbiAoV2VpbGwgQ29ybmVsbCBNZWRpY2luZSkKCiMjIENvbnRyaWJ1dG9ycwoKLSBSaWNoYXJkIEVkZGVuIChKb2hucyBIb3BraW5zIFVuaXZlcnNpdHkgU2Nob29sIG9mIE1lZGljaW5lKSAtIGNyZWF0b3IKLSBHZW9yZyBPZWx0enNjaG5lciAoSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5IFNjaG9vbCBvZiBNZWRpY2luZSkKLSBNdWhhbW1hZCBTYWxlaCAoQ2hpbGRyZW4ncyBIb3NwaXRhbCBvZiBQaGlsYWRlbHBoaWEpCi0gQy4gSm9obiBFdmFucyAoQ2FyZGlmZiBVbml2ZXJzaXR5KSAtIGZvcm1lciBjb250cmlidXRvcgotIEFzaGxleSBIYXJyaXMgKFVuaXZlcnNpdHkgb2YgQ2FsZ2FyeSkgLSBmb3JtZXIgY29udHJpYnV0b3IKLSBOaWNvbGFhcyBQdXRzIChLaW5nJ3MgQ29sbGVnZSBMb25kb24pIC0gZm9ybWVyIGNvbnRyaWJ1dG9yCgojIyBMaWNlbnNlIGFuZCBjaXRpbmcgR2FubmV0CgpUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIGFuIG9wZW4tc291cmNlIFtCU0QtMy1DbGF1c2UgTGljZW5zZV0oaHR0cHM6Ly9tYXJrbWlra2Vsc2VuLmdpdGh1Yi5pby9HYW5uZXQtZG9jcy9nYW5uZXQtbGljZW5zZS5odG1sKS4gU2hvdWxkIHlvdSBkaXNzZW1pbmF0ZSBtYXRlcmlhbCB0aGF0IG1hZGUgdXNlIG9mIEdhbm5ldCwgcGxlYXNlIGNpdGUgdGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbnMsIGFzIGFwcHJvcHJpYXRlOgoKLSBFZGRlbiBSQUUsIFB1dHMgTkFKLCBIYXJyaXMgQUQsIEJhcmtlciBQQiwgRXZhbnMgQ0ouIDxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC4xMDAyL2ptcmkuMjQ0NzgiIHRhcmdldD0iX2JsYW5rIj5HYW5uZXQ6IEEgYmF0Y2gtcHJvY2Vzc2luZyB0b29sIGZvciB0aGUgcXVhbnRpdGF0aXZlIGFuYWx5c2lzIG9mIGdhbW1hLWFtaW5vYnV0eXJpYyBhY2lkLWVkaXRlZCBNUiBzcGVjdHJvc2NvcHkgc3BlY3RyYS48L2E+ICpKb3VybmFsIG9mIE1hZ25ldGljIFJlc29uYW5jZSBJbWFnaW5nKi4gMjAxNDs0MCg2KToxNDQ1LS0xNDUyCgoqKklmIHlvdSBwZXJmb3JtIGZyZXF1ZW5jeS1hbmQtcGhhc2UgY29ycmVjdGlvbiAoRlBDKSB1c2luZzoqKgoKUm9idXN0IHNwZWN0cmFsIHJlZ2lzdHJhdGlvbiAoYFJvYnVzdFNwZWNSZWdgKToKCi0gTWlra2Vsc2VuIE0sIFRhcHBlciBTLCBOZWFyIEosIE1vc3RvZnNreSBTSCwgUHV0cyBOQUosIEVkZGVuIFJBRS4gPGEgaHJlZj0iaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvbmJtLjQzNjgiIHRhcmdldD0iX2JsYW5rIj5Db3JyZWN0aW5nIGZyZXF1ZW5jeSBhbmQgcGhhc2Ugb2Zmc2V0cyBpbiBNUlMgZGF0YSB1c2luZyByb2J1c3Qgc3BlY3RyYWwgcmVnaXN0cmF0aW9uLjwvYT4gKk5NUiBpbiBCaW9tZWRpY2luZSouIDIwMjA7MzMoMTApOmU0MzY4CgptdWx0aS1zdGVwIEZQQyAoYFNwZWNSZWdIRVJNRVNgKToKCi0gTWlra2Vsc2VuIE0sIFNhbGVoIE1HLCBOZWFyIEosIGV0IGFsLiA8YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuMTAwMi9tcm0uMjcwMjciIHRhcmdldD0iX2JsYW5rIj5GcmVxdWVuY3kgYW5kIHBoYXNlIGNvcnJlY3Rpb24gZm9yIG11bHRpcGxleGVkIGVkaXRlZCBNUlMgb2YgR0FCQSBhbmQgZ2x1dGF0aGlvbmUuPC9hPiAqTWFnbmV0aWMgUmVzb25hbmNlIGluIE1lZGljaW5lKi4gMjAxODs4MCgxKToyMS0tMjgKCm9yIHNwZWN0cmFsIHJlZ2lzdHJhdGlvbiAoYFNwZWNSZWdgKToKCi0gTmVhciBKLCBFZGRlbiBSLCBFdmFucyBDSiwgUGFxdWluIFIsIEhhcnJpcyBBLCBKZXp6YXJkIFAuIDxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC4xMDAyL21ybS4yNTA5NCIgdGFyZ2V0PSJfYmxhbmsiPkZyZXF1ZW5jeSBhbmQgcGhhc2UgZHJpZnQgY29ycmVjdGlvbiBvZiBtYWduZXRpYyByZXNvbmFuY2Ugc3BlY3Ryb3Njb3B5IGRhdGEgYnkgc3BlY3RyYWwgcmVnaXN0cmF0aW9uIGluIHRoZSB0aW1lIGRvbWFpbi48L2E+ICpNYWduZXRpYyBSZXNvbmFuY2UgaW4gTWVkaWNpbmUqLiAyMDE1OzczKDEpOjQ0LS01MAoKKipJZiB5b3UgcGVyZm9ybSB2b3hlbCBjby1yZWdpc3RyYXRpb246KioKCi0gUGxlYXNlIGFja25vd2xlZGdlIHRoZSB1c2Ugb2YgU1BNMTIuIFlvdSBtYXkgYWxzbyBsaW5rL2NpdGUgdGhlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmZpbC5pb24udWNsLmFjLnVrL3NwbS9zb2Z0d2FyZS9zcG0xMi8iIHRhcmdldD0iX2JsYW5rIj5TUE0xMiB3ZWJzaXRlPC9hPi4KCioqSWYgeW91IHBlcmZvcm0gdGlzc3VlIHNlZ21lbnRhdGlvbjoqKgoKLSBBc2hidXJuZXIgSiwgRnJpc3RvbiBLSi4gPGEgaHJlZj0iaHR0cHM6Ly9kb2kub3JnLzEwLjEwMTYvai5uZXVyb2ltYWdlLjIwMDUuMDIuMDE4IiB0YXJnZXQ9Il9ibGFuayI+VW5pZmllZCBzZWdtZW50YXRpb24uPC9hPiAqTmV1cm9JbWFnZSouIDIwMDU7MjYoMyk6ODM5LS04NTEKCioqSWYgeW91IHJlcG9ydCB3YXRlci1yZWZlcmVuY2VkLCB0aXNzdWUtY29ycmVjdGVkIG1ldGFib2xpdGUgbWVhc3VyZW1lbnRzIHVzaW5nOioqCgpUaGUgSGFycmlzIGV0IGFsLiBtZXRob2Q6CgotIEhhcnJpcyBBRCwgUHV0cyBOQUosIEVkZGVuIFJBRS4gPGEgaHJlZj0iaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDIvam1yaS4yNDkwMyIgdGFyZ2V0PSJfYmxhbmsiPlRpc3N1ZSBjb3JyZWN0aW9uIGZvciBHQUJBLWVkaXRlZCBNUlM6IENvbnNpZGVyYXRpb25zIG9mIHZveGVsIGNvbXBvc2l0aW9uLCB0aXNzdWUgc2VnbWVudGF0aW9uLCBhbmQgdGlzc3VlIHJlbGF4YXRpb25zLjwvYT4gKkpvdXJuYWwgb2YgTWFnbmV0aWMgUmVzb25hbmNlIEltYWdpbmcqLiAyMDE1OzQyKDUpOjE0MzEtLTE0NDAKCm9yIHRoZSBHYXNwYXJvdmljIGV0IGFsLiBtZXRob2Q6CgotIEdhc3Bhcm92aWMgQywgU29uZyBULCBEZXZpZXIgRCwgZXQgYWwuIDxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC4xMDAyL21ybS4yMDkwMSIgdGFyZ2V0PSJfYmxhbmsiPlVzZSBvZiB0aXNzdWUgd2F0ZXIgYXMgYSBjb25jZW50cmF0aW9uIHJlZmVyZW5jZSBmb3IgcHJvdG9uIHNwZWN0cm9zY29waWMgaW1hZ2luZy48L2E+ICpNYWduZXRpYyBSZXNvbmFuY2UgaW4gTWVkaWNpbmUqLiAyMDA2OzU1KDYpOjEyMTktLTEyMjYKCiMjIEFja25vd2xlZGdtZW50cwoKVGhlIGRldmVsb3BtZW50IGFuZCBkaXNzZW1pbmF0aW9uIG9mIEdhbm5ldCBoYXMgYmVlbiBzdXBwb3J0ZWQgYnkgdGhlIGZvbGxvd2luZyBOYXRpb25hbCBJbnN0aXR1dGVzIG9mIEhlYWx0aCAoTklIKSBncmFudHM6CgotIFIwMSBFQjAxNjA4OQotIFIwMSBFQjAyMzk2MwotIFA0MSBFQjAxNTkwOQotIEs5OSBFQjAyODgyOAotIFIwMSBNSDEwNjU2NAotIFIyMSBNSDA5ODIyOAotIFIyMSBOUzA3NzMwMAotIFIwMSBNSDA5NjI2MwoKV2Ugd2lzaCB0byB0aGFuayB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGZvciB0aGVpciBkaXJlY3Qgb3IgaW5kaXJlY3QgY29udHJpYnV0aW9uczoKCi0gWWFpciBBbHRtYW4gKFVuZG9jdW1lbnRlZCBNYXRsYWIpCi0gUGV0ZXIgQmFya2VyIChKb2hucyBIb3BraW5zIFVuaXZlcnNpdHkpCi0gQWxleCBDcmF2ZW4gKFVuaXZlcnNpdHkgb2YgQmVyZ2VuKQotIFBoaWxpcHAgRWhzZXMgKE1heCBQbGFuY2sgSW5zdGl0dXRlIGZvciBCaW9sb2dpY2FsIEN5YmVybmV0aWNzKQotIFJvYmluIGRlIEdyYWFmIChZYWxlIFNjaG9vbCBvZiBNZWRpY2luZSkKLSBYaWFuZ3J1aSBMaSAoT2hpbyBTdGF0ZSBVbml2ZXJzaXR5KQotIEphbWllIE5lYXIgKFN1bm55YnJvb2sgUmVzZWFyY2ggSW5zdGl0dXRlL1VuaXZlcnNpdHkgb2YgVG9yb250bykKLSBSYWxwaCBOb2Vza2UgKEdFIEhlYWx0aENhcmUpCi0gV291dGVyIFBvdHRlcnMgKFVNQyBBbXN0ZXJkYW0pCi0gSmFuIFNpbW9uIChIZWlkZWxiZXJnKQoKCgo=
Built with R Markdown  in RStudio 
  
Copyright © 2020–2025, Mark Mikkelsen