iFit: a simple library to analyze data

E. Farhi, ILL/DS/CS - Version 2.0.2 - Nov. 27, 2018
(2022 update: Legacy Ubuntu 16.04-based docker available, see https://github.com/McStasMcXtrace/iFit-16.04-Docker)

Welcome to the iFit Data Analysis library !

"Simple methods to be used for complex data analysis"

Main functionalities are
[ iData Load Plot Math Fit Save Optimization iFunc Models File formats]
[ miFit PyFit Phonons ResLibCal McStas Neutron Scattering ]


The iFit library (pronounce [eye-fit]) is a set of methods to load, analyze, plot, fit and optimize scientific data sets and models, and export results. iFit is based on Matlab, but can also be launched without Matlab license (stand-alone version).Matlab The library focuses on doing the math right. Any text file can be imported straight away, and a large set of binary files are supported. Any data dimensionality can be handled, including event based data sets (even though not all methods do work for these). Any model can be assembled for fitting data sets.
Animated features
A gallery of some of the things iFit can do

Main functionalities

The iFit package constitutes a full data analysis infrastructure. To summarize, we list below the most important resources you may use:

iData the main container for data sets
Load how to import data sets into iData objects
Plot how to plot a data set (1D, 2D, 3D and above)
Math plenty of math to work with data sets
Fit how to fit a model onto a data set (using an optimizer)
Save saving data sets
Optimization routines for optimisation of anything (including models)
iFunc the main model object
File formats a list of supported input file formats (for data sets and models)
miFit the main iFit user interface (for those avoiding command lines)
PyFit using iFit from PythonPython

In addition, we provide some higher level applications:

Models pre-defined models (1D, 2D, 4D)
Neutron Scattering
Neutron scattering data treatment
Phonons lattice dynamics aka phononsModels_sqw_phon
ResLibCal Neutron triple-axis spectrometer model, resolution and fittingResLibCal
McStas Monte-Carlo neutron/x-ray ray-tracing instrument simulationmcstas

The library can be used from user interfaces, or from the prompt as a set of commands and scripts.

From the prompt (command line)
User interface: miFit
neutron TAS: ResLibCal
iFit prompt
Have a look at the Quick Start or the iFit standalone page. There, you mostly manipulate iData and iFunc objects.
an advanced yet simple user interface to load data sets, plot, transform, export, and fit.
compute the neutron TAS spectrometer resolution ellipsoid (ResCal/ResLib merge)

Get more details about what's in the box.box

Ok, let's start !

To download and install the package, refer to the Install page.

We then recommend that you start with the miFit user interface.

If you want a quick example with commands, refer to the Quick Start page. Otherwise, the typical usage would be:
Start Matlab... or iFit stand-alone
(genpath('/some/path/to/iFit')); % not needed for the stand-alone version
>> a = iData([ ifitpath 'Data/ILL_IN6.dat' ]);
>> plot(log10(a))
>> b=2*a+log(a)
>> plot(gauss2d)
>> parameters=fits(a,gauss2d)
>> saveas(a,'filename.pdf')

For beginners

If you do not know Matlab already, you will discover that using the iFit library does not require advanced IT knowledge. The general syntax are rather intuitive, and all methods are able to tolerate (and correct) most of the user mistakes. In this respect, when some of the input parameters are missing, sensible choices can be made automatically. You can look at the iFit standalone page, where a short Matlab introduction is available.

If you have used in the past the MFit/MView suite, you will find that this library has the same scope, but omitting the user interface.
If you have used the Spec1d object, you will quickly find that the iFit follows exactly the same syntax.

If you come from the Python world, you will find out that the iFit syntax is pretty close. We provide for you a Python interface to iFit which exposes iFit objects and methods into Python. Refer to the PyFit page.

Help me !HELP

An extensive documentation is provided as web pages (such as this one) which you access from Matlab with either
>> doc(iData)
>> doc(iFunc)
>> methods(iData)
and help pages for each function/method, which you can access with e.g.
>> help iData
>> help iData/load
>> help iFunc
A Tutorial (Jan 2012) is available as PDF presentations with exercises.
You may also search this whole documentation (using Google):
Finally, the whole Matlab documentation is available on-line for free, especially to complement the standalone limited help system.
A list of bugs and release history is recorded in the Changes page.
If you find new bugs please send them to me [farhi (at) ill.fr] with:
  1. your Matlab version
  2. the iFit version which you can get from the Matlab command version(iData)
  3. the script/command that reproduces the error together with any required external data file
  4. a copy of the error messages produced by the script/command.
  5. a smile ;-)
The ifit-users is the list set-up in order to exchange information (issues, questions, announcements). Messages should be sent to ifit-users@mccode.org.

You may register by entering your email address and press subscribe:

Obtaining the package

To install the package, refer to the Install page. See the Changes.

Installation for Linux Debian-class systems is simplified using package managers - see here.
When starting from scratch, we recommend installing a Ubuntu system, then add package ifit-phonons from our Debian repository.

Please register to the ifit-users mailing list.

Credits, Links and Disclaimer

iFit was invented by E. Farhi and took many years to come to you.
Substantial contributions from Y. Debab and P. Willendrup.
If you produce scientific output using iFit, I'd appreciate if you cite the following reference:
iFit is a product from the Computing for Science group at the Institut Laue-Langevin, Grenoble, France.

See the Credits page for more information on contributions, including licensing.
A set of links to related packages is also included there.

If you wish to contribute, send suggestions, scripts, and new functions/methods to [farhi (at) ill.fr]. Your contribution will then be included in the next release, with proper credits to the authors.

An other solution is to use the GitHub 'pull request' mechanism, i.e. login at GitHub, fork your own iFit repository, modify it at your convenience, and then mark changes for inclusion back into the master iFit branch. These changes will then eventually be validated, and inserted into the project.

This software is experimental, and should not be considered bullet-proof. In particular, expect many bugs - which should be reported to me [farhi (at) ill.fr] or as an 'issue' on GitHub if you want them to be fixed quickly. Also, this prototype is known to be slow. This will be improved gradually...

E. Farhi - iFit Welcome - Nov. 27, 2018 2.0.2 - back to Main iFit Page ILL,
          Grenoble, France <www.ill.eu>