Examples for BRUKERIO

Reading Bruker headers and data shouldn’t be all that complicated. Here are some examples on how to do this:

>>> import sarpy
>>> fname = 'sarpy/test/test-data/Moosvi.ii1/2/acqp'
>>> header = sarpy.readJCAMP(fname)

The header is a dictionary with parameter names as the keys:

>>> type(header)
<type 'dict'>

All of the BRUKER header files are in this JCAMP format. So the method parameter file can be loaded as well:

>>> fname = 'sarpy/test/test-data/Moosvi.ii1/2/method'
>>> header = sarpy.readJCAMP(fname)
>>> header['ExcPulse']
'(1, 5400, 30, 9.02336512447152, 100, 0, 100, LIB_EXCITATION, < hermite.exc>, 5400, 0.1794, 50, 0.1024, conventional)'

Loading k-space data (BRUKER calls the file fid) is also doable:

>>> fname = 'sarpy/test/test-data/Moosvi.ii1/2/fid'
>>> data = sarpy.readfid(fname)
/tmp/sarpy/sarpy/test/test-data/Moosvi.ii1/2
opening /tmp/sarpy/sarpy/test/test-data/Moosvi.ii1/2/acqp
opening /tmp/sarpy/sarpy/test/test-data/Moosvi.ii1/2/method
ACQ_size = [128, 128, 15], NR=1, ACQ_obj_order=[0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13], EncSteps=[
   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35
  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53
  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71
  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89
  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107
 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
 126 127]
size(fid) = (245760,) ?=? ACQ_size*NR=245760

Function readfid returns another dictionary that bundles the actual data and header information:

>>> data.keys()
['isImage', 'header', 'data']
>>> data['data'].shape
(128, 128, 15, 1)
>>> data['isImage']
False

Because we are now dealing with these dictionaries nested in dictionaries, there is no need to load header data separately before the fid data (unless you don’t need the actual data and would rather avoid filling your memory).

>>> data['header']['method']['ExcPulse']
'(1, 5400, 30, 9.02336512447152, 100, 0, 100, LIB_EXCITATION, < hermite.exc>, 5400, 0.1794, 50, 0.1024, conventional)'

Here is a little python string kung-fu to turn this structure into a list of strings for further processing:

>>> data['header']['method']['ExcPulse'].strip('()').split(',')
['1', ' 5400', ' 30', ' 9.02336512447152', ' 100', ' 0', ' 100', ' LIB_EXCITATION', ' < hermite.exc>', ' 5400', ' 0.1794', ' 50', ' 0.1024', ' conventional']