Osprey (Open-Source Processing, Reconstruction & Estimation of MRS data) Overview

Osprey (Open-Source Processing, Reconstruction & Estimation of MRS data) is an all-in-one software suite written in MATLAB for state-of-the art processing and quantitative analysis of in-vivo magnetic resonance spectroscopy (MRS) data.

Osprey is completely free and entirely open-source, available on GitHub. It is designed to provide a modular analysis workflow, and to enable community development.

Features include:

  • 1-file job definition system for reproducible data analysis
  • Automated recognition of input file format and sequence origin
  • Fully-automated loading and pre-processing pipeline for optimal SNR, linewidth, phasing, and alignment
  • Integrated linear-combination modeling module
  • Full density-matrix simulated basis sets (using real pulses and sequence timings; including effects of localization and spectral editing) for many metabolites and common sequence implementations
  • Functions to create custom basis sets and import basis sets from LCModel or Tarquin
  • Integrated voxel co-registration and segmentation module (requires SPM12)
  • Quantification based on tissue fractions and (customizable) metabolite/tissue water relaxation times
  • GUI to display data, quality assessment, and quantitative results at each step of the analysis
  • Rich ‘Overview’ GUI panel for batched datasets to visualize distributions of metabolite estimates and mean +/- SD spectra

If you encounter errors or bugs, have questions about Osprey, or would like to contribute a module of your own - this is the community space to do it. We’re looking forward to your messages!

Georg Oeltzschner

I am a French master’s student in biomedical imaging, I am working on a dissertation: SRM-in vivo quantification with Osprey, I have Matlab 2022 I have installed your osprey guide but the “FIT” module does not appear even in gray I do not understand not why?

I apologize for disturbing you


I’m working with Megapress and CSI data. I’ve used Gannet for processing Megapress previously and am now looking into Osprey for the tissue segmentation of the different metabolites. Running CoRegister and Segment in Osprey generates an output of the tissue segmentation for the subject but not each metabolite, is that an option within Osprey?

Additionally, when trying to run Process data within Osprey, I’m getting the following error message even after editing the osp_onOffClassifyMEGA.m file.
Please see the error below:
MEGA ON/OFF classifier does not recognize the input argument ‘target’. We automatically assume no reordering. You can change that in osp_onOFFClassifyMEGA.m
Unrecognized function or variable ‘inA’.

Error in osp_onOffClassifyMEGA (line 69)
** outA = inA;**

Error in OspreyProcess (line 405)
** [raw, switchOrder] = osp_onOffClassifyMEGA(raw, target,Order);**

Error in osp_onProc (line 37)
** MRSCont = OspreyProcess(MRSCont);**

Error while evaluating UIControl Callback.

Can you please assist?

Thank you so much!

Hi Rhi,

Thanks for using Osprey and for getting in touch. Please consider posting a separate thread next time - this is merely the overview thread. Now for your problems:

  1. I’m not sure I understand what you mean by “tissue segmentation for each metabolite”. Co-registration and segmentation are the same for each metabolite within a voxel (unless you talk about accounting for the chemical shift displacement artefact and generating different masks for each frequency, which would be possible in theory, but in practice requires knowledge of the pulse bandwidth and gradient directions, which is usually not saved in the headers - I’m not aware of any software offering this function).

  2. You shouldn’t have to edit the osp_onOffClassifyMEGA file at all. Is this MEGA-edited data? What sequence are you using and on which system? The error message suggests that you have entered an invalid value in the job file for the editing target. Can you post the relevant lines of your job file here?


Hi Georg,

Thank you for getting back to me. Sorry about that, will be sure to post on a separate thread next time!

  1. Understood, I think my question was based off the thinking we can calculate GM, WM, and CSF fractions from each metabolite?
  2. This is unedited Megapress data (using .dat files). Yes, please see the lines from my job file below:

% Specify sequence type
seqType = ‘MEGA’; % OPTIONS: - ‘unedited’ (default)
** % - ‘MEGA’**
** % - ‘HERMES’**
** % - ‘HERCULES’**

% Specify editing targets
editTarget = {‘unedited’}; % OPTIONS: - {‘none’} (default if ‘unedited’)
** % - {‘GABA’}, {‘GSH’}, {‘Lac’}, {‘PE322’}, {‘PE398’} (for ‘MEGA’)**
** % - {‘GABA’, ‘GSH’}, {‘GABA’, ‘Lac’}, {‘NAA’, ‘NAAG’} (for 'HERMES’and ‘HERCULES’)**

** % Specify data scenario**
dataScenario = ‘MRSI’; % OPTIONS: - ‘invivo’ (default)
** % - ‘phantom’ **
** % - ‘PRIAM’ **
** % - ‘MRSI’ **

Really appreciate your help with this!