.. _repository_api:

Repository API
==============

See also :ref:`repository_design` and :ref:`brainvisa_repositories`

FMRI datasets often have the structure:

* Group (sometimes) e.g. Patients, Controls

  * Subject e.g. Subject1, Subject2

    * Session e.g. Sess1, Sess1

How about an interface like:

::

   repo = GSSRespository(
       root_dir = '/home/me/data/experiment1',
       groups = {'patients':
                 {'subjects':
                  {'patient1':
                   {'sess1':
                    'filter': 'raw*nii'},
                   {'sess2':
                    'filter': 'raw*nii'}
                   },
                  {'patient2':
                   {'sess1':
                    'filter': 'raw*nii'}
                   {'sess2':
                    'filter': 'raw*nii'}
                   }
                  },
                 'controls':
                 {'subjects':
                  {'control1':
                   {'sess1':
                    'filter': 'raw*nii'},
                   {'sess2':
                    'filter': 'raw*nii'}
                   },
                  {'control2':
                   {'sess1':
                    'filter': 'raw*nii'}
                   {'sess2':
                    'filter': 'raw*nii'}
                   }
                  }
                 })

   for group in repo.groups:
       for subject in group.subjects:
           for session in subject.sessions:
               img = session.image
               # do something with image


We would need to think about adding metadata such as behavioral data
from the scanning session, and so on.  I suppose this will help us
move transparently to using something like HDF5 for data storage.
