brukerapi 0.2.5__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. {brukerapi-0.2.5/brukerapi.egg-info → brukerapi-0.3.0}/PKG-INFO +41 -121
  2. {brukerapi-0.2.5 → brukerapi-0.3.0}/README.rst +40 -120
  3. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/cli.py +1 -1
  4. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_2dseq_core.json +11 -3
  5. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_2dseq_custom.json +15 -3
  6. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_fid_core.json +91 -46
  7. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_fid_custom.json +3 -3
  8. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_rawdata_core.json +40 -16
  9. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_traj_core.json +1 -41
  10. brukerapi-0.3.0/brukerapi/data.py +7 -0
  11. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/dataset.py +279 -49
  12. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/exceptions.py +17 -17
  13. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/folders.py +41 -30
  14. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/jcampdx.py +173 -111
  15. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/schemas.py +187 -70
  16. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/splitters.py +1 -4
  17. {brukerapi-0.2.5 → brukerapi-0.3.0/brukerapi.egg-info}/PKG-INFO +41 -121
  18. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi.egg-info/SOURCES.txt +3 -0
  19. {brukerapi-0.2.5 → brukerapi-0.3.0}/pyproject.toml +1 -1
  20. brukerapi-0.3.0/test/test_dataset.py +827 -0
  21. {brukerapi-0.2.5 → brukerapi-0.3.0}/test/test_exceptions.py +24 -1
  22. brukerapi-0.3.0/test/test_folders.py +148 -0
  23. brukerapi-0.3.0/test/test_jcampdx.py +339 -0
  24. brukerapi-0.3.0/test/test_property_configs.py +154 -0
  25. brukerapi-0.3.0/test/test_random_access.py +20 -0
  26. brukerapi-0.3.0/test/test_rawdata.py +17 -0
  27. {brukerapi-0.2.5 → brukerapi-0.3.0}/test/test_split.py +11 -1
  28. {brukerapi-0.2.5 → brukerapi-0.3.0}/test/test_trajectory.py +11 -0
  29. brukerapi-0.2.5/brukerapi/data.py +0 -7
  30. brukerapi-0.2.5/test/test_dataset.py +0 -72
  31. brukerapi-0.2.5/test/test_jcampdx.py +0 -42
  32. brukerapi-0.2.5/test/test_random_access.py +0 -42
  33. {brukerapi-0.2.5 → brukerapi-0.3.0}/LICENSE +0 -0
  34. {brukerapi-0.2.5 → brukerapi-0.3.0}/MANIFEST.in +0 -0
  35. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/__init__.py +0 -0
  36. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_rawdata_custom.json +0 -0
  37. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/config/properties_traj_custom.json +0 -0
  38. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/mergers.py +0 -0
  39. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi/utils.py +0 -0
  40. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi.egg-info/dependency_links.txt +0 -0
  41. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi.egg-info/entry_points.txt +0 -0
  42. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi.egg-info/not-zip-safe +0 -0
  43. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi.egg-info/requires.txt +0 -0
  44. {brukerapi-0.2.5 → brukerapi-0.3.0}/brukerapi.egg-info/top_level.txt +0 -0
  45. {brukerapi-0.2.5 → brukerapi-0.3.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brukerapi
3
- Version: 0.2.5
3
+ Version: 0.3.0
4
4
  Summary: Bruker API
5
5
  Author-email: Tomas Psorn <tomaspsorn@isibrno.cz>, Jiri Vitous <vitous@isibrno.cz>
6
6
  Maintainer-email: Jiri Vitous <vitous@isibrno.cz>
@@ -50,9 +50,9 @@ Load any **data set**:
50
50
  .. code-block:: python
51
51
 
52
52
  from brukerapi.dataset import Dataset
53
- dataset = Dataset('{path}/2dseq') # create data set, works for fid, 2dseq, rawdata.x, ser
53
+ dataset = Dataset('{path}/2dseq') # also supports fid, fid_proc.64, traj, and rawdata.jobN
54
54
  dataset.data # access data array
55
- dataset.VisuCoreSize # get a value of a single parameter
55
+ dataset.get_value('VisuCoreSize') # get a parameter value
56
56
 
57
57
  Load an entire **study**:
58
58
 
@@ -62,17 +62,7 @@ Load an entire **study**:
62
62
  study = Study('{path_to_study_folder}')
63
63
  dataset = study.get_dataset(exp_id='1', proc_id='1')
64
64
 
65
- # get_dataset returns an empty dataset
66
- # in order to load data into the data set, you can either use the context manager:
67
-
68
- with dataset as d:
69
- d.data # access data array
70
- d.VisuCoreSize # get a value of a parameter
71
-
72
- # or the load function
73
- dataset.load()
74
- dataset.data # access data array
75
- dataset.VisuCoreSize # get a value of a single parameter
65
+ dataset.data # Study loads datasets by default
76
66
 
77
67
  Load a parametric file:
78
68
 
@@ -82,8 +72,8 @@ Load a parametric file:
82
72
 
83
73
  parameters = JCAMPDX('path_to_scan/method')
84
74
 
85
- TR = data.params["PVM_RepetitionTime"].value # This way
86
- TR = data.get_value("PVM_RepetitionTime") # Or this way
75
+ TR = parameters.params["PVM_RepetitionTime"].value
76
+ TR = parameters.get_value("PVM_RepetitionTime")
87
77
 
88
78
 
89
79
 
@@ -94,16 +84,17 @@ Features
94
84
 
95
85
  * **I/O** interface for **fid** data sets
96
86
  * **I/O** interface for **2dseq** data sets
97
- * **I/O** interface for **ser** data sets
98
87
  * **I/O** interface for **rawdata** data sets
99
88
  * **Random access** for **fid** and **2dseq** data sets
100
89
  * **Split** operation implemented over **2dseq** data sets
101
90
  * **Filter** operation implemented over Bruker **folders** (allowing you to work with a subset of your study only)
91
+ * ParaVision 5.1, 6.0.1, 7.0.0, and 360 metadata and binary-layout support
92
+ * Metadata-based fallback inference for custom Cartesian, EPI, radial/UTE, spiral, ZTE, CSI, and spectroscopy sequences
102
93
 
103
94
  Examples
104
95
  ========
105
96
 
106
- * How to `read <examples/read_fid.ipynb>`_ a Bruker fid, 2dseq, rawdata, or ser file
97
+ * How to `read <examples/read_fid.ipynb>`_ a Bruker fid, 2dseq, or rawdata file
107
98
  * How to `split slice packages <examples/split_sp_demo.ipynb>`_ of a 2dseq data set
108
99
  * How to `split FG_ECHO <examples/split_fg_echo_demo.ipynb>`_ of a 2dseq data set
109
100
  * How to `split FG_ISA <examples/examples/split_fg_isa_demo.ipynb>`_ of a 2dseq data set
@@ -128,8 +119,7 @@ From source:
128
119
 
129
120
  git clone https://github.com/isi-nmr/brukerapi-python.git
130
121
  cd brukerapi-python
131
- python setup.py build
132
- python setup.py install
122
+ python -m pip install -e .[dev]
133
123
 
134
124
  Testing
135
125
  ========
@@ -138,108 +128,38 @@ data sets:
138
128
 
139
129
  * `BrukerAPI test data set (Bruker ParaVision v5.1) <https://doi.org/10.5281/zenodo.3899268>`_
140
130
  * `BrukerAPI test data set (Bruker ParaVision v6.0.1) <https://doi.org/10.5281/zenodo.3894651>`_
141
- * `bruker2nifti_qa data set <https://gitlab.com/naveau/bruker2nifti_qa>`_
131
+ * BrukerAPI test data set for ParaVision v7.0.0 (Zenodo DOI collection ``10.5281/zenodo.4522220``)
132
+ * `PV360 standard data <https://github.com/cecilyen/PV360_StdData>`_
133
+
134
+ The corpus download is opt-in for local runs:
135
+
136
+ .. code-block:: shell
137
+
138
+ python -m pytest test --download_test_data
139
+
140
+ Without that flag, pytest uses any corpus already present under ``test/test_data`` and
141
+ skips unavailable collections.
142
+
143
+ File format reference
144
+ =====================
145
+
146
+ `Bruker ParaVision Raw Data Format
147
+ <https://github.com/gdevenyi/brkraw-legacy/blob/main/FILE_FORMAT.md>`_ is the source of truth
148
+ for file-format parsing, binary layouts, dataset typing, and metadata-driven acquisition
149
+ scheme inference in this project.
142
150
 
143
151
  Compatibility
144
152
  =============
145
153
 
146
- The API was tested using various data sets obtained by **ParaVision 5.1**, **6.0.1** and **360**. It it is compatible
147
- with the following data set types from individual ParaVision versions.
148
-
149
- ParaVision v5.1
150
- """""""""""""""
151
- Compatible data set types:
152
-
153
- * **fid**
154
- * **2dseq**
155
- * **rawdata.job0**
156
- * **rawdata.Navigator**
157
-
158
- Compatible pulse sequences for **fid** data sets:
159
-
160
- * FLASH.ppg
161
- * MGE.ppg
162
- * MSME.ppg
163
- * RARE.ppg
164
- * FAIR_RARE.ppg
165
- * RAREVTR.ppg
166
- * RAREst.ppg
167
- * MDEFT.ppg
168
- * FISP.ppg
169
- * FLOWMAP.ppg
170
- * DtiStandard.ppg
171
- * EPI.ppg
172
- * FAIR_EPI.ppg
173
- * DtiEpi.ppg
174
- * T1_EPI.ppg
175
- * T2_EPI.ppg
176
- * T2S_EPI.ppg
177
- * SPIRAL.ppg
178
- * DtiSpiral.ppg
179
- * UTE.ppg
180
- * UTE3D.ppg
181
- * ZTE.ppg
182
- * CSI.ppg
183
- * FieldMap.ppg
184
- * NSPECT.ppg
185
- * PRESS.ppg
186
- * STEAM.ppg
187
- * igFLASH.ppg
188
-
189
- ParaVision v6.0.1 and v7.0.0
190
- """""""""""""""""""""""""""""""
191
- Compatible data set types:
192
-
193
- * **fid**
194
- * **2dseq**
195
- * **rawdata.job0**
196
- * **rawdata.Navigator**
197
-
198
- Compatible pulse sequences for **fid** data sets:
199
-
200
- * FLASH.ppg,
201
- * FLASHAngio.ppg
202
- * IgFLASH.ppg
203
- * MGE.ppg
204
- * MSME.ppg
205
- * RARE.ppg
206
- * FAIR_RARE.ppg
207
- * RAREVTR.ppg
208
- * RAREst.ppg
209
- * MDEFT.ppg
210
- * FISP.ppg
211
- * FLOWMAP.ppg
212
- * DtiStandard.ppg
213
- * EPI.ppg
214
- * FAIR_EPI.ppg
215
- * CASL_EPI.ppg
216
- * DtiEpi.ppg
217
- * T1_EPI.ppg
218
- * T2_EPI.ppg
219
- * T2S_EPI.ppg
220
- * SPIRAL.ppg
221
- * DtiSpiral.ppg
222
- * UTE.ppg
223
- * UTE3D.ppg
224
- * ZTE.ppg
225
- * CSI.ppg
226
- * FieldMap.ppg
227
- * SINGLEPULSE.ppg
228
- * NSPECT.ppg
229
- * EPSI.ppg
230
- * PRESS.ppg
231
- * STEAM.ppg
232
- * ISIS.ppg
233
- * CPMG.ppg
234
- * RfProfile.ppg
235
-
236
-
237
- ParaVision 360 v1.1 v3.0-v3.7
238
- """""""""""""""""""""""""""""""""
239
- Reading rawdata is supported only in a basic form, no reshaping into k-space is supported at the moment.
240
- Compatible data set types:
241
-
242
- * **2dseq**
243
- * **rawdata.job0**
244
- * **rawdata.Navigator**
245
-
154
+ Tested releases are ParaVision 5.1, 6.0.1, 7.0.0, and PV360 3.x. Supported
155
+ primary binaries are ``fid``, ``fid_proc.64``, ``2dseq``, ``traj``,
156
+ ``rawdata.jobN``, and ``rawdata.Navigator``. Known ``fid.spiral``,
157
+ ``fid.navFid``, and ``fid.orig`` files are exposed as auxiliary subdatasets of
158
+ their parent ``fid``; they are not accepted as standalone primary datasets.
159
+ TopSpin/NMR ``ser`` is intentionally unsupported.
160
+
161
+ Known pulse-program names use dedicated layouts. For custom sequences the
162
+ reader also infers common acquisition families from metadata; callers can pass
163
+ ``scheme_id=`` when inference is ambiguous. Rawdata is returned as complex
164
+ ordered samples, not as reconstructed k-space. See the compatibility page in
165
+ the documentation for behavior and current reconstruction limitations.
@@ -28,9 +28,9 @@ Load any **data set**:
28
28
  .. code-block:: python
29
29
 
30
30
  from brukerapi.dataset import Dataset
31
- dataset = Dataset('{path}/2dseq') # create data set, works for fid, 2dseq, rawdata.x, ser
31
+ dataset = Dataset('{path}/2dseq') # also supports fid, fid_proc.64, traj, and rawdata.jobN
32
32
  dataset.data # access data array
33
- dataset.VisuCoreSize # get a value of a single parameter
33
+ dataset.get_value('VisuCoreSize') # get a parameter value
34
34
 
35
35
  Load an entire **study**:
36
36
 
@@ -40,17 +40,7 @@ Load an entire **study**:
40
40
  study = Study('{path_to_study_folder}')
41
41
  dataset = study.get_dataset(exp_id='1', proc_id='1')
42
42
 
43
- # get_dataset returns an empty dataset
44
- # in order to load data into the data set, you can either use the context manager:
45
-
46
- with dataset as d:
47
- d.data # access data array
48
- d.VisuCoreSize # get a value of a parameter
49
-
50
- # or the load function
51
- dataset.load()
52
- dataset.data # access data array
53
- dataset.VisuCoreSize # get a value of a single parameter
43
+ dataset.data # Study loads datasets by default
54
44
 
55
45
  Load a parametric file:
56
46
 
@@ -60,8 +50,8 @@ Load a parametric file:
60
50
 
61
51
  parameters = JCAMPDX('path_to_scan/method')
62
52
 
63
- TR = data.params["PVM_RepetitionTime"].value # This way
64
- TR = data.get_value("PVM_RepetitionTime") # Or this way
53
+ TR = parameters.params["PVM_RepetitionTime"].value
54
+ TR = parameters.get_value("PVM_RepetitionTime")
65
55
 
66
56
 
67
57
 
@@ -72,16 +62,17 @@ Features
72
62
 
73
63
  * **I/O** interface for **fid** data sets
74
64
  * **I/O** interface for **2dseq** data sets
75
- * **I/O** interface for **ser** data sets
76
65
  * **I/O** interface for **rawdata** data sets
77
66
  * **Random access** for **fid** and **2dseq** data sets
78
67
  * **Split** operation implemented over **2dseq** data sets
79
68
  * **Filter** operation implemented over Bruker **folders** (allowing you to work with a subset of your study only)
69
+ * ParaVision 5.1, 6.0.1, 7.0.0, and 360 metadata and binary-layout support
70
+ * Metadata-based fallback inference for custom Cartesian, EPI, radial/UTE, spiral, ZTE, CSI, and spectroscopy sequences
80
71
 
81
72
  Examples
82
73
  ========
83
74
 
84
- * How to `read <examples/read_fid.ipynb>`_ a Bruker fid, 2dseq, rawdata, or ser file
75
+ * How to `read <examples/read_fid.ipynb>`_ a Bruker fid, 2dseq, or rawdata file
85
76
  * How to `split slice packages <examples/split_sp_demo.ipynb>`_ of a 2dseq data set
86
77
  * How to `split FG_ECHO <examples/split_fg_echo_demo.ipynb>`_ of a 2dseq data set
87
78
  * How to `split FG_ISA <examples/examples/split_fg_isa_demo.ipynb>`_ of a 2dseq data set
@@ -106,8 +97,7 @@ From source:
106
97
 
107
98
  git clone https://github.com/isi-nmr/brukerapi-python.git
108
99
  cd brukerapi-python
109
- python setup.py build
110
- python setup.py install
100
+ python -m pip install -e .[dev]
111
101
 
112
102
  Testing
113
103
  ========
@@ -116,108 +106,38 @@ data sets:
116
106
 
117
107
  * `BrukerAPI test data set (Bruker ParaVision v5.1) <https://doi.org/10.5281/zenodo.3899268>`_
118
108
  * `BrukerAPI test data set (Bruker ParaVision v6.0.1) <https://doi.org/10.5281/zenodo.3894651>`_
119
- * `bruker2nifti_qa data set <https://gitlab.com/naveau/bruker2nifti_qa>`_
109
+ * BrukerAPI test data set for ParaVision v7.0.0 (Zenodo DOI collection ``10.5281/zenodo.4522220``)
110
+ * `PV360 standard data <https://github.com/cecilyen/PV360_StdData>`_
111
+
112
+ The corpus download is opt-in for local runs:
113
+
114
+ .. code-block:: shell
115
+
116
+ python -m pytest test --download_test_data
117
+
118
+ Without that flag, pytest uses any corpus already present under ``test/test_data`` and
119
+ skips unavailable collections.
120
+
121
+ File format reference
122
+ =====================
123
+
124
+ `Bruker ParaVision Raw Data Format
125
+ <https://github.com/gdevenyi/brkraw-legacy/blob/main/FILE_FORMAT.md>`_ is the source of truth
126
+ for file-format parsing, binary layouts, dataset typing, and metadata-driven acquisition
127
+ scheme inference in this project.
120
128
 
121
129
  Compatibility
122
130
  =============
123
131
 
124
- The API was tested using various data sets obtained by **ParaVision 5.1**, **6.0.1** and **360**. It it is compatible
125
- with the following data set types from individual ParaVision versions.
126
-
127
- ParaVision v5.1
128
- """""""""""""""
129
- Compatible data set types:
130
-
131
- * **fid**
132
- * **2dseq**
133
- * **rawdata.job0**
134
- * **rawdata.Navigator**
135
-
136
- Compatible pulse sequences for **fid** data sets:
137
-
138
- * FLASH.ppg
139
- * MGE.ppg
140
- * MSME.ppg
141
- * RARE.ppg
142
- * FAIR_RARE.ppg
143
- * RAREVTR.ppg
144
- * RAREst.ppg
145
- * MDEFT.ppg
146
- * FISP.ppg
147
- * FLOWMAP.ppg
148
- * DtiStandard.ppg
149
- * EPI.ppg
150
- * FAIR_EPI.ppg
151
- * DtiEpi.ppg
152
- * T1_EPI.ppg
153
- * T2_EPI.ppg
154
- * T2S_EPI.ppg
155
- * SPIRAL.ppg
156
- * DtiSpiral.ppg
157
- * UTE.ppg
158
- * UTE3D.ppg
159
- * ZTE.ppg
160
- * CSI.ppg
161
- * FieldMap.ppg
162
- * NSPECT.ppg
163
- * PRESS.ppg
164
- * STEAM.ppg
165
- * igFLASH.ppg
166
-
167
- ParaVision v6.0.1 and v7.0.0
168
- """""""""""""""""""""""""""""""
169
- Compatible data set types:
170
-
171
- * **fid**
172
- * **2dseq**
173
- * **rawdata.job0**
174
- * **rawdata.Navigator**
175
-
176
- Compatible pulse sequences for **fid** data sets:
177
-
178
- * FLASH.ppg,
179
- * FLASHAngio.ppg
180
- * IgFLASH.ppg
181
- * MGE.ppg
182
- * MSME.ppg
183
- * RARE.ppg
184
- * FAIR_RARE.ppg
185
- * RAREVTR.ppg
186
- * RAREst.ppg
187
- * MDEFT.ppg
188
- * FISP.ppg
189
- * FLOWMAP.ppg
190
- * DtiStandard.ppg
191
- * EPI.ppg
192
- * FAIR_EPI.ppg
193
- * CASL_EPI.ppg
194
- * DtiEpi.ppg
195
- * T1_EPI.ppg
196
- * T2_EPI.ppg
197
- * T2S_EPI.ppg
198
- * SPIRAL.ppg
199
- * DtiSpiral.ppg
200
- * UTE.ppg
201
- * UTE3D.ppg
202
- * ZTE.ppg
203
- * CSI.ppg
204
- * FieldMap.ppg
205
- * SINGLEPULSE.ppg
206
- * NSPECT.ppg
207
- * EPSI.ppg
208
- * PRESS.ppg
209
- * STEAM.ppg
210
- * ISIS.ppg
211
- * CPMG.ppg
212
- * RfProfile.ppg
213
-
214
-
215
- ParaVision 360 v1.1 v3.0-v3.7
216
- """""""""""""""""""""""""""""""""
217
- Reading rawdata is supported only in a basic form, no reshaping into k-space is supported at the moment.
218
- Compatible data set types:
219
-
220
- * **2dseq**
221
- * **rawdata.job0**
222
- * **rawdata.Navigator**
223
-
132
+ Tested releases are ParaVision 5.1, 6.0.1, 7.0.0, and PV360 3.x. Supported
133
+ primary binaries are ``fid``, ``fid_proc.64``, ``2dseq``, ``traj``,
134
+ ``rawdata.jobN``, and ``rawdata.Navigator``. Known ``fid.spiral``,
135
+ ``fid.navFid``, and ``fid.orig`` files are exposed as auxiliary subdatasets of
136
+ their parent ``fid``; they are not accepted as standalone primary datasets.
137
+ TopSpin/NMR ``ser`` is intentionally unsupported.
138
+
139
+ Known pulse-program names use dedicated layouts. For custom sequences the
140
+ reader also infers common acquisition families from metadata; callers can pass
141
+ ``scheme_id=`` when inference is ambiguous. Rawdata is returned as complex
142
+ ordered samples, not as reconstructed k-space. See the compatibility page in
143
+ the documentation for behavior and current reconstruction limitations.
@@ -141,7 +141,7 @@ def report(args):
141
141
  elif output is None:
142
142
  Dataset(input, add_parameters=["subject"]).report(props=args.props, verbose=args.verbose)
143
143
  # dataset to folder, or dataset to file
144
- elif output.is_dir():
144
+ else:
145
145
  Dataset(input, add_parameters=["subject"]).report(path=output, props=args.props, verbose=args.verbose)
146
146
 
147
147
 
@@ -30,7 +30,7 @@
30
30
  {
31
31
  "cmd": "np.dtype('uint8').newbyteorder('<')",
32
32
  "conditions": [
33
- ["#VisuCoreWordType",["_8BIT_USGN_INT"]],
33
+ ["#VisuCoreWordType",["_8BIT_UNSGN_INT"]],
34
34
  ["#VisuCoreByteOrder",["littleEndian"]]
35
35
  ]
36
36
  },
@@ -58,7 +58,7 @@
58
58
  {
59
59
  "cmd": "np.dtype('uint8').newbyteorder('>')",
60
60
  "conditions": [
61
- ["#VisuCoreWordType",["_8BIT_USGN_INT"]],
61
+ ["#VisuCoreWordType",["_8BIT_UNSGN_INT"]],
62
62
  ["#VisuCoreByteOrder",["bigEndian"]]
63
63
  ]
64
64
  }
@@ -143,12 +143,20 @@
143
143
  {
144
144
  "cmd": "#VisuCoreDataSlope.array",
145
145
  "conditions": []
146
+ },
147
+ {
148
+ "cmd": "#RECO_map_slope.array",
149
+ "conditions": []
146
150
  }
147
151
  ],
148
152
  "offset": [
149
153
  {
150
154
  "cmd": "#VisuCoreDataOffs.array",
151
155
  "conditions": []
156
+ },
157
+ {
158
+ "cmd": "#RECO_map_offset.array",
159
+ "conditions": []
152
160
  }
153
161
  ],
154
162
  "dim_type": [
@@ -169,4 +177,4 @@
169
177
  "conditions": ["@is_single_slice==False"]
170
178
  }
171
179
  ]
172
- }
180
+ }
@@ -130,6 +130,18 @@
130
130
  "#VisuCorePosition.size[0]==1",
131
131
  "#VisuCoreDim==2"]
132
132
  },
133
+ {
134
+ "cmd": "np.array([#VisuCoreExtent[0] / #VisuCoreSize[0], #VisuCoreExtent[1] / #VisuCoreSize[1], np.linalg.norm(#VisuCorePosition[1,:] - #VisuCorePosition[0,:])])",
135
+ "conditions": [
136
+ "#VisuCorePosition.size[0]>1",
137
+ "#VisuCoreDim==2"]
138
+ },
139
+ {
140
+ "cmd": "np.array([#VisuCoreExtent[0] / #VisuCoreSize[0], #VisuCoreExtent[1] / #VisuCoreSize[1], #VisuCoreFrameThickness])",
141
+ "conditions": [
142
+ "#VisuCorePosition.size[0]==1",
143
+ "#VisuCoreDim==2"]
144
+ },
133
145
  {
134
146
  "cmd": "np.array([#VisuCoreExtent[0] / #VisuCoreSize[0], #VisuCoreExtent[1] / #VisuCoreSize[1], #VisuCoreExtent[2] / #VisuCoreSize[2]])",
135
147
  "conditions": [
@@ -253,13 +265,13 @@
253
265
  {
254
266
  "cmd": "datetime.datetime.strptime(#VisuStudyDate[1:-1], '%X %d %b %Y')",
255
267
  "conditions": [
256
- "#VisuVersion==1"
268
+ "'T' not in #VisuStudyDate"
257
269
  ]
258
270
  },
259
271
  {
260
272
  "cmd": "datetime.datetime.strptime(#VisuStudyDate[1:-1], '%Y-%m-%dT%X,%f%z')",
261
273
  "conditions": [
262
- "#VisuVersion==3"
274
+ "'T' in #VisuStudyDate"
263
275
  ]
264
276
  }
265
277
  ],
@@ -274,4 +286,4 @@
274
286
  "comment": "default value"
275
287
  }
276
288
  ]
277
- }
289
+ }