Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Corrections in JSON Template #77

Open
cecilyen opened this issue Dec 6, 2021 · 6 comments
Open

Corrections in JSON Template #77

cecilyen opened this issue Dec 6, 2021 · 6 comments
Labels
enhancement New feature or request
Milestone

Comments

@cecilyen
Copy link

cecilyen commented Dec 6, 2021

Is your feature request related to a problem? Please describe.
I compared BIDS 1.6 specs, PV 6.0.1 parameters, and brkraw 0.3.7. I found some issues shown below.

ManufacturersModelName = 'VisuStation'
The model name should be listed in “System” of “uxnmr.info” For example, it can be "Avance III NMR spectrometer"

ReceiveCoilActiveElements = 'VisuCoilReceiveType',
This shall be “VisuCoilReceiveMultiName”. But this parameter doesn't use much in PV 6.

MRTransmitCoilSequence = dict(Name = 'VisuCoilTransmitName',
”MRTransmitCoilSequence” is not an array. You may want to use “VisuCoilTransmitName”. Not used much PV 6.

GradientSetType = 'ACQ_status',
brkraw can’t find “ACQ_status”, which is in “configscan”.

CoilConfigName = 'ACQ_coil_config_file', # if Transmit and Receive coil info in None
”CoilConfigName” is not defined in BIDS specs. “ACQ_coil_config_file” is not a PV parameter.

CoilCombinationMethod
This is in PV parameter “RecoCombineMode”.

NonlinearGradientCorrection = 'VisuAcqKSpaceTraversal',
This is a Boolean value, not a string. PV 6 doesn't implement nonlinear gradient correction. So, this is "false" by default.

MRAcquisitionType
It is missing in your Metadata keyword. I think it shall be “PVM_SpatDimEnum” in PV.

MTOffsetFrequency
MTPulseBandwidth
MTNumberOfPulses
MTPulseShape
MTPulseDuration
SpoilingState
SpoilingType
SpoilingRFPhaseIncrement
SpoilingGradientMoment SpoilingGradientDuration
MT and Spoiler are all missing.

ParallelReductionFactorInPlane = 'ACQ_phase_factor',
This shall be “RecoGrappaAccelFactor”, not “ACQ_phase_factor”.

ParallelAcquisitionTechnique
Bruker uses “GRAPPA” by default.

PartialFourier = 'VisuAcqPartialFourier',
This shall be a number, not an array.

PartialFourierDirection
This can be decoded from “VisuAcqPartialFourier”

PhaseEncodingDirection = [dict(key = 'VisuAcqGradEncoding',
BIDS also defined the polarity of the phase encoding, which is important for topup correction in EPI. If the phase encoding went from high to low, a negative sign“-“ is appended. It can be decoded from "PVM_EncSteps1".

EffectiveEchoSpacing
The echo spacing calculation is not correct. For EPI, echo spacing is stored in "PVM_EpiEchoSpacing", which is calculated internally in PV. For B0 field map, this is "EchoSpacing".

TotalReadoutTime
ETL is not used but read here. The equation shall be EffectiveEchoSpacing * ( ReconMatrixPE – 1) as defined in BIDS and FSL.

MixingTime
Missing?

SliceTiming
Your equation may fail for scans with inter-volume delay (PackDel).

FlipAngle
This can be an array.

DelayTime
This is related to the issue in SliceTiming. This shall be "PackDel" for EPI and most sequences with the number of repetitions>1.

@gdevenyi
Copy link
Collaborator

gdevenyi commented Dec 6, 2021

Hi, a PR proposing corrections to the template would be welcome.

@cecilyen
Copy link
Author

cecilyen commented Dec 7, 2021

I found few more issues as below:

"NumberShots": "VisuAcqKSpaceTrajectoryCnt",
This is not correct for RARE. It should be math.ceil( PVM_EnCMatrix[1]/PVM_RareFactor )

EffectiveEchoSpacing
For RARE, this is PVM_EchoTime

TotalReadoutTime
For RARE, this is PVM_EchoTime*(PVM_RareFactor-1)

@cecilyen
Copy link
Author

cecilyen commented Dec 8, 2021

Two more issues

"SequenceVariant"
"VisuAcqEchoSequenceType" basically tells whether this sequence can do "SpinEcho", "GradientEcho" or "Both". It doesn't provide much information, which can be safely ignored.

"VolumeTiming"
"AcquisitionDuration"
When "RepetitionTime" and "SliceTiming" are defined, neither "VolumeTiming" nor "AcquisitionDuration" must be defined.
Please see BIDS 1.6 specs p.56 option D.

@cecilyen
Copy link
Author

cecilyen commented Dec 8, 2021

One suggestion

MagneticFieldStrength
Water resonance frequency will drift a little every day. So, it may be better to round to the nearest two decimal digits for reporting the magnetic field strength. round( VisuAcqImagingFrequency/42.57638474, 2)

@cecilyen
Copy link
Author

Just realize that SliceEncodingDirection also has direction.

"SliceEncodingDirection"
A - sign indicates that the contents of SliceTiming are defined in reverse order - that is, the first entry corresponds to the slice with the largest index, and the final entry corresponds to slice index zero. It can be decoded from "PVM_ObjOrderList".

@dvm-shlee
Copy link
Member

@cecilyen Hi Thank you for your contribution, I will review your comment and apply it to our template! Really helpful!

@dvm-shlee dvm-shlee added the enhancement New feature or request label Jul 1, 2023
@dvm-shlee dvm-shlee added this to the v0.4.0 release milestone Jul 1, 2023
@dvm-shlee dvm-shlee pinned this issue May 6, 2024
@dvm-shlee dvm-shlee modified the milestones: v0.4.0 release, BIDS May 15, 2024
@dvm-shlee dvm-shlee unpinned this issue May 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: No status
Development

No branches or pull requests

3 participants