musrfit  1.6.0
musrfit - a framework to analyse muSR data.

This pages here are meant to explain the software structure of the musrfit framework. Only the core-classes are described, i.e. not the Qt GUI related stuff.

People merely interested in the handling of the programs should check this link: musrfit user manual

People which would like to know how to install the musrfit framework, please check this link: How to setup musrfit on different platforms


The purpose of the musrfit framework is to provide software to analyze muSR spectra, in a very flexible and sound way. The musrfit framework is free software, published under the General Public License Version 2 or later. It is currently running under Linux, Mac OS X, and (with some more work) under Windows. The musrfit framework heavily relies on the ROOT framework from CERN

The musrfit framework provides the following programs:

  • musrfit: carries out fits based on a msr-file.
  • musrview: is used show the data in a graphical representation.
  • musrFT: is used to show Fourier transforms of data without the need of a theory (raw data Fourier transform).
  • musrt0: is used to set graphically t0's, background and data ranges off raw histogram data.
  • msr2data: a program (originally written by Bastian M. Wojek). Its purpose is to process/generate multiple musrfit msr-files with the same parameters and summarize the fitting results either in a TRIUMF DB or a column ASCII file.
  • msr2msr: old WKM like msr-files can be transformed into musrfit style msr-files with this little program.
  • musrgui (obsolete): an editor to handle msr-files, calling musrfit, etc. from within the editor, based on Qt3.x. Only bug fixing will be done on this version, and if you have >= Qt4.6 available you should use musredit instead.
  • musredit: an editor to handle msr-files, calling musrfit, etc. from within a simple text editor, based on >= Qt4.6. A technical documentation of musredit can be found here.
  • musrWiz (beta): allows to create an initial msr-file by a step-by-step instruction wizard.
  • musrStep: allows to efficiently deal with initial step values of msr-files. Especially useful for msr-files dealing with many runs/detectors.
  • mupp: is the muSR parameter plotter. It allows to plot values in db- or dat-files (collections). A technical documentation of mupp can be found here.
  • MuSRFit: a graphical user interface based on PerlQt (written by Z. Salman) for an easy to use interface to the musrfit framework. Compared to the more general approach of writing msr-files, it has some limitations, though it might be easier for a first user of the musrfit framework.
  • any2many: should be a "universal" muSR data-file-format converter.
  • dump_header: is a small program to dump the header information of a muSR data file to the standard output.
  • musrRootValidation: this is a program to validate MusrRoot files.
  • write_musrRoot_runHeader: Is a little example program showing how to write MusrRoot files.

Road map and missing features

Support for NeXus files is fully available from early 2012 on.

The following features should eventually be implemented, but are still missing:

  • non-muSR: The plan is to add an option to fit/plot $f(x_1,\ldots,x_n)$ versus $g(x_1,\ldots,x_n)$, where $x_i$ is a given data set element.
  • as soon as ROOT will properly support MS Windows platforms, some better support for MS Windows will be added. Currently only the cygwin version will be supported.
  • add an interface to maxent
  • we will provide rpm's for various linux flavors.

Short comings of the current musrfit design

The musrfit framework has some shortcomings which will shortly discussed here:

  1. musrfit is not fully thread save do to the current implementation of LF in PTheory. Perhaps this part should be redesigned at some point to resolve this problem.
  2. Currently each msr-file run holds its one theory object. This is not very nice for costly user functions which will need to setup internal things for each run, even though resources could be shared.

This two points are somewhat contradictory, and currently it is not clear which way to go.

How to report bugs

Bugs, unexpected features, can be reported directly to me:, 

or entered in the bug-tracking tool at bitbkucket