From c6c1e3417a28c4cd9f9d6996382fcb8d702dd54a Mon Sep 17 00:00:00 2001 From: wtclarke Date: Thu, 28 Mar 2024 14:24:20 +0000 Subject: [PATCH 1/4] Add first pass at json definitions --- changelog.md | 3 +++ definitions.json | 3 +++ definitions.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 definitions.json create mode 100644 definitions.md diff --git a/changelog.md b/changelog.md index fde1254..8649b63 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,8 @@ # Changelog +## 28th March 2024 (V0.9) +- Definitions are now packaged as a machine-readable JSON file. + ## 6th December 2023 (V0.8) - Add SpectralWidth as a standard defined header value. However the dwell time stored in `pixdim[4]` is defined as the preferentially used value. diff --git a/definitions.json b/definitions.json new file mode 100644 index 0000000..ac57928 --- /dev/null +++ b/definitions.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a573bd86e8ed6f8b015aacbdae5f70a68e1b3ae6c7c57de8ed93538c97e516be +size 9555 diff --git a/definitions.md b/definitions.md new file mode 100644 index 0000000..24d308c --- /dev/null +++ b/definitions.md @@ -0,0 +1,65 @@ +# Documentation for the definitions.json file + +The `definitions.json` file contains machine-readable definitions of NIfTI-MRS standard meta data and dimension tags. + +Type fields should be generic JSON types: `number`, `string`, `array`, `object`, `bool` +or an array indicating a (optionally nested) array type and element type : `[array, number]` for a vector of numbers or `[array, array, string]` for a matrix of strings. + +## nifti-mrs version number. +Two numeric elements, major and minor + +## Possible dimension tags and descriptions +An object with keys as the possible tage, with documentation/use of those tags as the value. + +## Header fields +All header fields are defined with a JSON object containing type information `type`, appropriate unit definitions `units`, a dco string `doc`, and whether the field should be removed during anonymisation `anon`. + +### Required +Two fields are required, `SpectrometerFrequency` and `ResonantNucleus`. + +### Standard defined +These fields are optional but must not be redefined. +This section currently contains: +#### 5.1 MRS specific Tags +- SpectralWidth +- EchoTime +- RepetitionTime +- InversionTime +- MixingTime +- AcquisitionStartTime +- ExcitationFlipAngle +- TxOffset +- VOI +- WaterSuppressed +- WaterSuppressionType +- SequenceTriggered +#### 5.2 Scanner information +- Manufacturer +- ManufacturersModelName +- DeviceSerialNumber +- SoftwareVersions +- InstitutionName +- InstitutionAddress +- TxCoil +- RxCoil +#### 5.3 Sequence information +- SequenceName +- ProtocolName +#### 5.4 Sequence information +- PatientPosition +- PatientName +- PatientID +- PatientWeight +- PatientDoB +- PatientSex +#### 5.5 Provenance and conversion metadata +- ConversionMethod +- ConversionTime +- OriginalFile +#### 5.6 Spatial information +- kSpace +#### 5.7 Editing Pulse information structure +- EditCondition +- EditPulse +#### 5.8 Processing Provenance +- ProcessingApplied From 4fdd0b184efb73019b873787f49a09e89d7198c2 Mon Sep 17 00:00:00 2001 From: wtclarke Date: Thu, 28 Mar 2024 14:37:23 +0000 Subject: [PATCH 2/4] Remove from lfs --- definitions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/definitions.json b/definitions.json index ac57928..0b85653 100644 --- a/definitions.json +++ b/definitions.json @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a573bd86e8ed6f8b015aacbdae5f70a68e1b3ae6c7c57de8ed93538c97e516be -size 9555 +oid sha256:c3699ceeeed88eedec414d8f53715ccf7eec8c80397bf2bb815edfc94e5f0653 +size 9549 From b0c78bffbf2dd1dc2bbc9ad536b154032cdac712 Mon Sep 17 00:00:00 2001 From: wtclarke Date: Thu, 28 Mar 2024 14:45:01 +0000 Subject: [PATCH 3/4] Restore json files that were previously in LFS --- .gitattributes | 1 - definitions.json | 211 +++++++++++++++++- .../dynamic_examples_aux/mpress_OFF.json | 77 ++++++- .../dynamic_examples_aux/mpress_ON.json | 77 ++++++- .../dynamic_examples_aux/svs_se_35.json | 59 ++++- 5 files changed, 412 insertions(+), 13 deletions(-) diff --git a/.gitattributes b/.gitattributes index 671586d..c559800 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,4 @@ *.dat filter=lfs diff=lfs merge=lfs -text *.nii.gz filter=lfs diff=lfs merge=lfs -text -*.json filter=lfs diff=lfs merge=lfs -text *.h5 filter=lfs diff=lfs merge=lfs -text *.IMA filter=lfs diff=lfs merge=lfs -text diff --git a/definitions.json b/definitions.json index 0b85653..b4b0bf1 100644 --- a/definitions.json +++ b/definitions.json @@ -1,3 +1,208 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3699ceeeed88eedec414d8f53715ccf7eec8c80397bf2bb815edfc94e5f0653 -size 9549 +{ + "nifti_mrs_version": { + "major": 0, + "minor": 8}, + + "dimension_tags": { + "DIM_COIL": "For storage of data from each individual receiver coil element.", + "DIM_DYN": "For storage of each individual acquisition transient. E.g. for post-acquisition B0 drift correction.", + "DIM_INDIRECT_0": "The indirect detection dimension - necessary for 2D (and greater) MRS acquisitions.", + "DIM_INDIRECT_1": "The indirect detection dimension - necessary for 2D (and greater) MRS acquisitions.", + "DIM_INDIRECT_2": "The indirect detection dimension - necessary for 2D (and greater) MRS acquisitions.", + "DIM_PHASE_CYCLE": "Used for increments of phase-cycling, for example in dephasing unwanted coherence order pathways, or TPPI for 2D spectra.", + "DIM_EDIT": "Used for edited MRS techniques such as MEGA or HERMES.", + "DIM_MEAS": "Used to indicate multiple repeats of the full sequence contained within the same original data file.", + "DIM_USER_0": "User defined dimension.", + "DIM_USER_1": "User defined dimension.", + "DIM_USER_2": "User defined dimension.", + "DIM_ISIS": "Dimension for storing image-selected in vivo spectroscopy (ISIS) acquisitions."}, + + "required": { + "SpectrometerFrequency": { + "type": ["array", "number"], + "units": "MHz", + "doc": "Precession frequency in MHz of the nucleus being addressed for each spectral axis.", + "anon": false}, + "ResonantNucleus": { + "type": ["array", "string"], + "units": null, + "doc": "Must be one of the DICOM recognised nuclei “1H”, “3HE”, “7LI”, “13C”, “19F”, “23NA”, “31P”, “129XE” or one named in the specified format. I.e. Mass number followed by the chemical symbol in uppercase.", + "anon": false}}, + + "standard_defined": { + "SpectralWidth": { + "type": ["number"], + "units": "Hz", + "doc": "The spectral bandwidth of the MR signal that is sampled. Inverse of the dwell time. NIfTI-MRS standard compliant software will always preferentially infer the spectral width from the dwell time stored in the NIfTI pixdim field. Units: hertz", + "anon": false}, + "EchoTime": { + "type": ["number"], + "units": "s", + "doc": "Time from centroid of excitation to start of FID or centre of echo. Units: Seconds", + "anon": false}, + "RepetitionTime": { + "type": ["number"], + "units": "s", + "doc": "Sequence repetition time. Units: Seconds", + "anon": false}, + "InversionTime": { + "type": ["number"], + "units": "s", + "doc": "Inversion time. Units: Seconds", + "anon": false}, + "MixingTime": { + "type": ["number"], + "units": "s", + "doc": "Mixing time in e.g. STEAM sequence. Units: Seconds", + "anon": false}, + "AcquisitionStartTime": { + "type": ["number"], + "units": "s", + "doc": "Time, relative to EchoTime, that the acquisition starts. Positive values indicate a time after the EchoTime, negative indicate before the EchoTime, a value of zero indicates no offset. Units: Seconds", + "anon": false}, + "ExcitationFlipAngle": { + "type": ["number"], + "units": "degrees", + "doc": "Nominal excitation pulse flip-angle", + "anon": false}, + "TxOffset": { + "type": ["number"], + "units": "ppm", + "doc": "Transmit chemical shift offset from SpectrometerFrequency", + "anon": false}, + "VOI": { + "type": ["array", "array", "number"], + "units": null, + "doc": "VoI localisation volume for MRSI sequences. Stored as a 4 x 4 affine using identical conventions to the xform NIfTI affine matrix. Not defined for data stored with a single spatial voxel", + "anon": false}, + "WaterSuppressed": { + "type": ["bool"], + "units": null, + "doc": "Boolean value indicating whether data was collected with (True) or without (False) water suppression.", + "anon": false}, + "WaterSuppressionType": { + "type": ["string"], + "units": null, + "doc": "Type of water suppression used.", + "anon": false}, + "SequenceTriggered": { + "type": ["bool"], + "units": null, + "doc": "Boolean value indicating whether the sequence is triggered. If triggered the repetition time might not be constant.", + "anon": false}, + "Manufacturer": { + "type": ["string"], + "units": null, + "doc": "Manufacturer of the device. DICOM tag (0008, 0070).", + "anon": false}, + "ManufacturersModelName": { + "type": ["string"], + "units": null, + "doc": "Manufacturer's model name of the device. DICOM tag (0008,1090).", + "anon": true}, + "DeviceSerialNumber": { + "type": ["string"], + "units": null, + "doc": "Manufacturer's serial number of the device. DICOM tag (0018,1000).", + "anon": true}, + "SoftwareVersions": { + "type": ["string"], + "units": null, + "doc": "Manufacturer's designation of the software version. DICOM tag (0018,1020)", + "anon": false}, + "InstitutionName": { + "type": ["string"], + "units": null, + "doc": "Institution's Name. DICOM tag (0008,0080).", + "anon": false}, + "InstitutionAddress": { + "type": ["string"], + "units": null, + "doc": "Institution's address. DICOM tag (0008,0081).", + "anon": false}, + "TxCoil": { + "type": ["string"], + "units": null, + "doc": "Name or description of transmit RF coil.", + "anon": false}, + "RxCoil": { + "type": ["string"], + "units": null, + "doc": "Name or description of receive RF coil.", + "anon": false}, + "SequenceName": { + "type": ["string"], + "units": null, + "doc": "User defined name. DICOM tag (0018,0024).", + "anon": false}, + "ProtocolName": { + "type": ["string"], + "units": null, + "doc": "User-defined description of the conditions under which the Series was performed. DICOM tag (0018,1030).", + "anon": false}, + "PatientPosition": { + "type": ["string"], + "units": null, + "doc": "Patient position descriptor relative to the equipment. DICOM tag (0018,5100). Must be one of the DICOM defined code strings e.g. HFS, HFP.", + "anon": false}, + "PatientName": { + "type": ["string"], + "units": null, + "doc": "Patient's full name. DICOM tag (0010,0010).", + "anon": true}, + "PatientID": { + "type": ["string"], + "units": null, + "doc": "Patient identifier. DICOM tag (0010,0020).", + "anon": true}, + "PatientWeight": { + "type": ["number"], + "units": "kg", + "doc": "Weight of the Patient in kilograms. DICOM tag (0010,1030).", + "anon": false}, + "PatientDoB": { + "type": ["string"], + "units": null, + "doc": "Date of birth of the named Patient. YYYYMMDD. DICOM tag (0010,0030).", + "anon": true}, + "PatientSex": { + "type": ["string"], + "units": null, + "doc": "Sex of the named Patient. 'M', 'F', 'O'. DICOM tag (0010,0040)", + "anon": false}, + "ConversionMethod": { + "type": ["string"], + "units": null, + "doc": "Description of the process or program used for conversion. May include additional information like software version.", + "anon": false}, + "ConversionTime": { + "type": ["string"], + "units": null, + "doc": "Time and date of conversion. ISO 8601 compliant format", + "anon": false}, + "OriginalFile": { + "type": ["array", "string"], + "units": null, + "doc": "Name and extension of the original file(s)", + "anon": true}, + "kSpace": { + "type": ["array", "bool"], + "units": null, + "doc": "Three element list, corresponding to the first three spatial dimensions. If True the data is stored as a dense k-space representation.", + "anon": false}, + "EditCondition": { + "type": ["array", "string"], + "units": null, + "doc": "List of strings that index the entries of the EditPulse structure that are used in this data acquisition. Typically used in dynamic headers (dim_N_header).", + "anon": false}, + "EditPulse": { + "type": ["object"], + "units": null, + "doc": "Structure defining editing pulse parameters for each condition. Each condition must be assigned a key.", + "anon": false}, + "ProcessingApplied": { + "type": ["array"], + "units": null, + "doc": "Describes and records the processing steps applied to the data.", + "anon": false}} +} diff --git a/example_data/data_generation/dynamic_examples_aux/mpress_OFF.json b/example_data/data_generation/dynamic_examples_aux/mpress_OFF.json index 2e01160..fdf4903 100644 --- a/example_data/data_generation/dynamic_examples_aux/mpress_OFF.json +++ b/example_data/data_generation/dynamic_examples_aux/mpress_OFF.json @@ -1,3 +1,74 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:33a08fded70f311f0ecfcca8862b09b135080ce7e23baee4da1a6542f21e7802 -size 6565 +{ + "sequenceName": "mpress_on", + "description": "68 ms 3T PRESS Siemens sequence, no spatial treatment", + "B0": 2.89, + "centralShift": 4.65, + + "Rx_Points":8192, + "Rx_SW":4000, + "Rx_LW":2, + "Rx_Phase": -1.470, + + "x":[-25,25], + "y":[-25,25], + "z":[-25,25], + "resolution":[1,1,1], + + "CoherenceFilter": [-1,1,null,-1,null], + + "RFUnits":"Hz", + "GradUnits":"mT", + "spaceUnits":"mm", + + "RF": [ + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [2500.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [5000.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.015, + "frequencyOffset": 387.60, + "phaseOffset": 0, + "amp": [0.7656515211318368, 1.5924815883574408, 2.478635625248737, 3.4241136318057257, 4.428915608028407, 5.491188192409393, 6.614638107963458, 7.793704662708096, 9.028387856643308, 10.31683372080136, 11.65718767875418, 13.047596368994377, 14.48620582255422, 15.96745473999086, 17.491343121304293, 19.052308452130983, 20.648497978423887, 22.274349185819467, 23.9261547438426, 25.600207322018168, 27.290944405982632, 28.994658665260875, 30.7057881929497, 32.4187722970666, 34.1280478557877, 35.82990814609821, 37.51693789958755, 39.1835746018922, 40.827964284044405, 42.43898495461882, 44.014781429727016, 45.54979301738649, 47.03660323426598, 48.47150535735071, 49.84893687227713, 51.16333647960239, 52.41099684885138, 53.586356073120896, 54.683851638047415, 55.70163139704421, 56.63413222828743, 57.47950077026965, 58.23217511608772, 58.89215587320194, 59.45388113470915, 59.91735090060933, 60.27885723296703, 60.538400131782225, 60.694125628087214, 60.74603432934232, 60.694125628087214, 60.538400131782225, 60.27885723296703, 59.91735090060933, 59.45388113470915, 58.89215587320194, 58.23217511608772, 57.47950077026965, 56.63413222828743, 55.70163139704421, 54.683851638047415, 53.586356073120896, 52.41099684885138, 51.16333647960239, 49.84893687227713, 48.47150535735071, 47.03660323426598, 45.54979301738649, 44.014781429727016, 42.43898495461882, 40.827964284044405, 39.1835746018922, 37.51693789958755, 35.82990814609821, 34.1280478557877, 32.4187722970666, 30.7057881929497, 28.994658665260875, 27.290944405982632, 25.600207322018168, 23.9261547438426, 22.274349185819467, 20.648497978423887, 19.052308452130983, 17.491343121304293, 15.96745473999086, 14.48620582255422, 13.047596368994377, 11.65718767875418, 10.31683372080136, 9.028387856643308, 7.793704662708096, 6.614638107963458, 5.491188192409393, 4.428915608028407, 3.4241136318057257, 2.478635625248737, 1.5924815883574408, 0.7656515211318368], + "phase": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "grad": [0,0,0] + }, + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [5000.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.015, + "frequencyOffset": 387.60, + "phaseOffset": 0, + "amp": [0.7656515211318368, 1.5924815883574408, 2.478635625248737, 3.4241136318057257, 4.428915608028407, 5.491188192409393, 6.614638107963458, 7.793704662708096, 9.028387856643308, 10.31683372080136, 11.65718767875418, 13.047596368994377, 14.48620582255422, 15.96745473999086, 17.491343121304293, 19.052308452130983, 20.648497978423887, 22.274349185819467, 23.9261547438426, 25.600207322018168, 27.290944405982632, 28.994658665260875, 30.7057881929497, 32.4187722970666, 34.1280478557877, 35.82990814609821, 37.51693789958755, 39.1835746018922, 40.827964284044405, 42.43898495461882, 44.014781429727016, 45.54979301738649, 47.03660323426598, 48.47150535735071, 49.84893687227713, 51.16333647960239, 52.41099684885138, 53.586356073120896, 54.683851638047415, 55.70163139704421, 56.63413222828743, 57.47950077026965, 58.23217511608772, 58.89215587320194, 59.45388113470915, 59.91735090060933, 60.27885723296703, 60.538400131782225, 60.694125628087214, 60.74603432934232, 60.694125628087214, 60.538400131782225, 60.27885723296703, 59.91735090060933, 59.45388113470915, 58.89215587320194, 58.23217511608772, 57.47950077026965, 56.63413222828743, 55.70163139704421, 54.683851638047415, 53.586356073120896, 52.41099684885138, 51.16333647960239, 49.84893687227713, 48.47150535735071, 47.03660323426598, 45.54979301738649, 44.014781429727016, 42.43898495461882, 40.827964284044405, 39.1835746018922, 37.51693789958755, 35.82990814609821, 34.1280478557877, 32.4187722970666, 30.7057881929497, 28.994658665260875, 27.290944405982632, 25.600207322018168, 23.9261547438426, 22.274349185819467, 20.648497978423887, 19.052308452130983, 17.491343121304293, 15.96745473999086, 14.48620582255422, 13.047596368994377, 11.65718767875418, 10.31683372080136, 9.028387856643308, 7.793704662708096, 6.614638107963458, 5.491188192409393, 4.428915608028407, 3.4241136318057257, 2.478635625248737, 1.5924815883574408, 0.7656515211318368], + "phase": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "grad": [0,0,0] + } + ], + + "delays": [0.00765, 0.01365, 0.00525, 0.00525, 0.00595], + "rephaseAreas": [ + [0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00] + ] +} \ No newline at end of file diff --git a/example_data/data_generation/dynamic_examples_aux/mpress_ON.json b/example_data/data_generation/dynamic_examples_aux/mpress_ON.json index 5c6e987..3c59976 100644 --- a/example_data/data_generation/dynamic_examples_aux/mpress_ON.json +++ b/example_data/data_generation/dynamic_examples_aux/mpress_ON.json @@ -1,3 +1,74 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0b087139d9344214b040578b28d0fa82212c9f94cc482d8e6a28d899f766014 -size 6567 +{ + "sequenceName": "mpress_on", + "description": "68 ms 3T PRESS Siemens sequence, no spatial treatment", + "B0": 2.89, + "centralShift": 4.65, + + "Rx_Points":8192, + "Rx_SW":4000, + "Rx_LW":2, + "Rx_Phase": -1.470, + + "x":[-25,25], + "y":[-25,25], + "z":[-25,25], + "resolution":[1,1,1], + + "CoherenceFilter": [-1,1,null,-1,null], + + "RFUnits":"Hz", + "GradUnits":"mT", + "spaceUnits":"mm", + + "RF": [ + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [2500.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [5000.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.015, + "frequencyOffset": -340.85, + "phaseOffset": 0, + "amp": [0.7656515211318368, 1.5924815883574408, 2.478635625248737, 3.4241136318057257, 4.428915608028407, 5.491188192409393, 6.614638107963458, 7.793704662708096, 9.028387856643308, 10.31683372080136, 11.65718767875418, 13.047596368994377, 14.48620582255422, 15.96745473999086, 17.491343121304293, 19.052308452130983, 20.648497978423887, 22.274349185819467, 23.9261547438426, 25.600207322018168, 27.290944405982632, 28.994658665260875, 30.7057881929497, 32.4187722970666, 34.1280478557877, 35.82990814609821, 37.51693789958755, 39.1835746018922, 40.827964284044405, 42.43898495461882, 44.014781429727016, 45.54979301738649, 47.03660323426598, 48.47150535735071, 49.84893687227713, 51.16333647960239, 52.41099684885138, 53.586356073120896, 54.683851638047415, 55.70163139704421, 56.63413222828743, 57.47950077026965, 58.23217511608772, 58.89215587320194, 59.45388113470915, 59.91735090060933, 60.27885723296703, 60.538400131782225, 60.694125628087214, 60.74603432934232, 60.694125628087214, 60.538400131782225, 60.27885723296703, 59.91735090060933, 59.45388113470915, 58.89215587320194, 58.23217511608772, 57.47950077026965, 56.63413222828743, 55.70163139704421, 54.683851638047415, 53.586356073120896, 52.41099684885138, 51.16333647960239, 49.84893687227713, 48.47150535735071, 47.03660323426598, 45.54979301738649, 44.014781429727016, 42.43898495461882, 40.827964284044405, 39.1835746018922, 37.51693789958755, 35.82990814609821, 34.1280478557877, 32.4187722970666, 30.7057881929497, 28.994658665260875, 27.290944405982632, 25.600207322018168, 23.9261547438426, 22.274349185819467, 20.648497978423887, 19.052308452130983, 17.491343121304293, 15.96745473999086, 14.48620582255422, 13.047596368994377, 11.65718767875418, 10.31683372080136, 9.028387856643308, 7.793704662708096, 6.614638107963458, 5.491188192409393, 4.428915608028407, 3.4241136318057257, 2.478635625248737, 1.5924815883574408, 0.7656515211318368], + "phase": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "grad": [0,0,0] + }, + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [5000.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.015, + "frequencyOffset": -340.85, + "phaseOffset": 0, + "amp": [0.7656515211318368, 1.5924815883574408, 2.478635625248737, 3.4241136318057257, 4.428915608028407, 5.491188192409393, 6.614638107963458, 7.793704662708096, 9.028387856643308, 10.31683372080136, 11.65718767875418, 13.047596368994377, 14.48620582255422, 15.96745473999086, 17.491343121304293, 19.052308452130983, 20.648497978423887, 22.274349185819467, 23.9261547438426, 25.600207322018168, 27.290944405982632, 28.994658665260875, 30.7057881929497, 32.4187722970666, 34.1280478557877, 35.82990814609821, 37.51693789958755, 39.1835746018922, 40.827964284044405, 42.43898495461882, 44.014781429727016, 45.54979301738649, 47.03660323426598, 48.47150535735071, 49.84893687227713, 51.16333647960239, 52.41099684885138, 53.586356073120896, 54.683851638047415, 55.70163139704421, 56.63413222828743, 57.47950077026965, 58.23217511608772, 58.89215587320194, 59.45388113470915, 59.91735090060933, 60.27885723296703, 60.538400131782225, 60.694125628087214, 60.74603432934232, 60.694125628087214, 60.538400131782225, 60.27885723296703, 59.91735090060933, 59.45388113470915, 58.89215587320194, 58.23217511608772, 57.47950077026965, 56.63413222828743, 55.70163139704421, 54.683851638047415, 53.586356073120896, 52.41099684885138, 51.16333647960239, 49.84893687227713, 48.47150535735071, 47.03660323426598, 45.54979301738649, 44.014781429727016, 42.43898495461882, 40.827964284044405, 39.1835746018922, 37.51693789958755, 35.82990814609821, 34.1280478557877, 32.4187722970666, 30.7057881929497, 28.994658665260875, 27.290944405982632, 25.600207322018168, 23.9261547438426, 22.274349185819467, 20.648497978423887, 19.052308452130983, 17.491343121304293, 15.96745473999086, 14.48620582255422, 13.047596368994377, 11.65718767875418, 10.31683372080136, 9.028387856643308, 7.793704662708096, 6.614638107963458, 5.491188192409393, 4.428915608028407, 3.4241136318057257, 2.478635625248737, 1.5924815883574408, 0.7656515211318368], + "phase": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "grad": [0,0,0] + } + ], + + "delays": [0.00765, 0.01365, 0.00525, 0.00525, 0.00595], + "rephaseAreas": [ + [0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00] + ] +} \ No newline at end of file diff --git a/example_data/data_generation/dynamic_examples_aux/svs_se_35.json b/example_data/data_generation/dynamic_examples_aux/svs_se_35.json index 62582ab..d8d80f2 100644 --- a/example_data/data_generation/dynamic_examples_aux/svs_se_35.json +++ b/example_data/data_generation/dynamic_examples_aux/svs_se_35.json @@ -1,3 +1,56 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7ccebe99aea2d1e6c90e716422dfeeb1b496922aa9f7b084d481acf800ffbb7d -size 1265 +{ + "sequenceName": "svs_se", + "description": "35 ms 3T PRESS Siemens sequence, no spatial treatment", + "B0": 3.0, + "centralShift": 4.65, + + "Rx_Points":8192, + "Rx_SW":4000, + "Rx_LW":2, + "Rx_Phase": 0.695, + + "x":[-25,25], + "y":[-25,25], + "z":[-25,25], + "resolution":[1,1,1], + + "CoherenceFilter": [-1,1,-1], + + "RFUnits":"Hz", + "GradUnits":"mT", + "spaceUnits":"mm", + + "RF": [ + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [2500.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [5000.0], + "phase": [0.00000], + "grad": [0,0,0] + }, + { + "time": 0.0001, + "frequencyOffset": -283.0, + "phaseOffset": 0, + "amp": [5000.0], + "phase": [0.00000], + "grad": [0,0,0] + } + ], + + "delays": [0.007775, 0.0174,0.009575], + "rephaseAreas": [ + [0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00], + [ 0.000e+00, 0.000e+00, 0.000e+00] + ] +} \ No newline at end of file From dc227e4c8808f4cef545ccb1b2c368854603ea4c Mon Sep 17 00:00:00 2001 From: wtclarke Date: Mon, 1 Apr 2024 20:42:09 +0100 Subject: [PATCH 4/4] Prep for new release. --- changelog.md | 2 +- definitions.json | 2 +- specification.MD | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index 8649b63..3619f01 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,6 @@ # Changelog -## 28th March 2024 (V0.9) +## 1st April 2024 (V0.9) - Definitions are now packaged as a machine-readable JSON file. ## 6th December 2023 (V0.8) diff --git a/definitions.json b/definitions.json index b4b0bf1..7bcc8f5 100644 --- a/definitions.json +++ b/definitions.json @@ -1,7 +1,7 @@ { "nifti_mrs_version": { "major": 0, - "minor": 8}, + "minor": 9}, "dimension_tags": { "DIM_COIL": "For storage of data from each individual receiver coil element.", diff --git a/specification.MD b/specification.MD index c6d63df..e71fae3 100644 --- a/specification.MD +++ b/specification.MD @@ -1,6 +1,6 @@ # NIfTI MRS format specification -Version 0.8 +Version 0.9 # 1 Purpose