-
Notifications
You must be signed in to change notification settings - Fork 228
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
Determine Effective Echo Spacing for Philips #377
Comments
Closing this issue. I do not have access to Philips hardware to validate solutions and no Philips users have stepped up. The upcoming release will not populate BIDS (f your readout time is identical for all acquisitions you don’t necessarily have to specify a valid value in this column (you can e.g. just set it to 1). So this is a 'want' not 'need' feature. Without being confident of the optimal solution, it is best not to report this tag. |
For Philips, (0018,0091) EchoTrainLength does not take partial Fourier into account. For example, one a Siemens scanner for an image with a base resolution of 90, the ETL will be 90 for full Fourier, 79 for 7/8th pF and 56 for 5/8th pF. In contrast, Philips will report 90 for all these values. Therefore, dcm2niix can not populate the tag EchoTrainLength for Philips data where PartialFourier (0018,9081) is [YES]. |
Hi I think there may be some historical changes here. I haven't tested exhaustively but the following seems to be consistent. I have checked these figures on a latest r5.6 system basic EPI scans In the above table the first 4 columns are the information available to the user on the information tab - Sense factor, Halfscan factor Water fat shift and EPI Factor. Using some internal tooling the actual echo spacing and actual EPI repetition number are displayed. Using the formula EffectiveEchoSpacing = (((1000 * WaterFatShift)/(434.282 * (EPI Factor + 1)) produces echo spacings which closely match the internal values. The logic for this is that the WFS value is our surrogate for distortion in combination with the EPI factor - half scan does not substantially change distortion but Sense does - so the combination of EPI Factor and WFS is sufficient to calculate the echo spacing. I think there may be some historical confusion as in some very early releases the Sense factor did not change the EPIF on display and hence some formulas include a /(acceleration) factor but I'm not sure when this changed. The magic number by the has some varaition in different sources but should the the fat water shift in Hz (3.4 * 0.000001 * 127.73e6 ) In terms of populating the echo train length value - thats no going to be easy to get the correct value with halfscan but if this is empty - I wouldnt want to prevent users from not being able to use distortion correction software if it needs a value here to calculate the actual number of interest - the echo spacing. M |
@drmclem this is timely. @parekhpravesh and Paul Morgan have each sent me Philips validation datasets. I believe my formula is the same as yours, with 2 modifications:
The @drmclem I would be grateful if you could look over the following Excel spreadsheet created by @ parekhpravesh and me. There are three worksheets, for no acceleration, partial Fourier, and SENSE. It would be great to have your thoughts on the red column (TotalReadoutTime): Philips_IngeniaCX_EPI_Validation_Guide.xlsx As a final check, I am running all images with Eddy, to see if the Thanks to a great team effort, it appears we are close to closing this issue. |
@drmclem @captainnova and other Philips users. @parekhpravesh and Paul Morgan have kindly provided open source validation datasets. I have created a Open Science Framework resource named Calculating TotalReadoutTime for Philips MRI that includes the DICOM datasets, Excel spreadsheets (with critical variables clearly listed), Python scripts, generated field maps (in Hz) and a brief overview of the problem. Based on this, my current working hypothesis is that the formula I describe above is robust. However, I would be grateful if others could either validate my formula or describe a better formula. For those who are not members of an OSF institution, here is a public link |
I have updated the sample data, validation scripts and description. The values for TotalReadoutTIme and EffectiveEchoSpacing are our best approximation for the FSL definitions for these values.
As @parekhpravesh notes:
The fieldmaps generated by FSL's TOPUP look pretty similar across settings, but not identical. This could reflect a combination of an error in the TotalRedoutTIme formula or changes to the Fieldmap due to Philips sequences. The latter is clearly at least part of the issue, as the differences are not simply scaling issues. As a general rule, one should keep all parameters identical except phase encoding polarity for images provided to TOPUP. When this advice is obeyed, the TotalReadoutTime has no impact. Philips users should be particularly cautious if they ignore this guidance. Unless someone provides a better solution, I consider this issue closed. Therefore, I plan to make a new stable release of dcm2niix next week. |
If you look at the estimated field map images, this is clearly still not right for all situations, in my opinion. In which case, I would argue that it is dangerous to populate the sidecar json with these estimates for On the OSF page you mention that "scanner shimming across these settings" may be a factor in the inconsistent maps, but I thought that the latest round of data was acquired on a phantom in a single imaging session with the same shim setting throughout the entire session...? |
I just checked all the ExamCards. The preparation phases for all the scans are set to auto i.e. no reshimming would have happened between the protocols in the SE stack. And yes, they were acquired in the same session |
Pragmatically, the results seem in the same range of magnitudes, but the morphology looks different. This seems to suggest that adjusting the It seems like dcm2niix can either populate the BIDS tags with our best guess, or we just provide no information reflecting our uncertainty in the solution. Regardless, Philips users need to be especially careful when wanting to provide inputs to Eddy where any parameter beyond phase encoding polarity is changed. |
My perspective is that an extremely small percentage of Philips users will ever be aware of these "warnings", in which case I would tend toward not providing the values, consistent with the uncertainty of the situation. |
Understood. Since it does not appear we have data to resolve this completely, and since it is typically not important but users expect these values, I propose we populate BIDS JSON fields with the
|
I agree with your suggestion. I think its a good idea to still populate these values (as Bogus fields) and let the user decide whether they think the method works for them or not. Perhaps populating this with Bogus field will also attract attention of other Philips users who might have additional insight. |
Sounds good to me. |
@effigies do you have a preference for a prefix for a BIDS tag when we are unable to confirm the accuracy? |
I don't and I can't think of any justification in BIDS that would lead me toward any particular one. None of them seems likely to ever become a prefix of some actual metadata field. |
Hi - I do feel these are a bit judgemental - how about Estimated ? |
Good point. This sort of makes sense, as FSL definitions for |
I don't think that |
Hi - I'm not familiar with the calculations needed for the other manufacturers - but I thought the FSL definitions were pragmatic rather than actual (i.e. could either be based on the actual read out time, or a fictitious one based on the reconstructed matrix). The calculation in my post above seems to be valid for echo spacing and presumably total equivalent readout would be as good as FSL expects. Seems a bit harsh to single Philips data out as "bogus" - (disclaimer - I am a Philips Scientist :-) when others seem to be supplied on a "pragmatic approach to amibiguous data". My suspicion is that there is high variation in the accuracy to which you can derive the field map from the associated distortion over the range of parameters in the Ingenia test set - between sense 4 and No sense, there is almost a factor of 5 difference in the distortion sensitivty. Looking at Mharms data here https://github.com/neurolabusc/dcm_qa/tree/master/In/TotalReadoutTime the consistency has been based on a very different assesment. A better comparision would be against an anatomical outline - i.e does the distortion correction based on the derived values actually work, and from my users this appears to be the case. |
Well, as @neurolabusc has repeatedly pointed out to users, for most practical use cases in I'm not as familiar with I agree that |
@drmclem - I appreciate you are explicit about your potential conflict of interest, but once noted I think it is also appropriate for you be an advocate for your employer. @mharms I am actually fine with From this perspective, a logical approach might be to just have the user (or sdcflows) use the EstimatedTotalReadoutTime but expect that subsequent software (e.g. sdcflows) will generate an error if this value differs between an image pair. |
@drmclem, if you work for Philips, can you provide any insight as to what we might be missing and why the field maps that Chris calculated using |
Hi, I think the biggest issue is that the phantom data is a bit extreme - coupled with the fact that it is higher SNR than brain data leads to interesting effects at the edges when the distortion is large due to bit reolution isssues. To illustrate - I looked at the phantom set for the large WFS (series 4,5) - The phantom images are pretty crazy and topup fails to correct them so the field maps are going to be off. Compared to the head images with similar WFS (but different matrix) Things are much more well behaved. Also - I am not familiar with the FSL field output but I guess the field predicted outside the head is just some extraoplation of coefficients ? in which case for a good comparison shouldn't these be masked to head signal locations ? I don't have access to scanners at the moment but a better validation set would be to collect on a head I feel. M |
I guess its possible that The problem with using a person is that they are likely to move, esp. over the potentially longish session over which all the acquisition variants were collected. That movement will change the field, and thus add "error" to the metric that we are using here. |
Do you have an example Phantom image with the same distortion sensitivity from Siemens ? Without looking at this in detail I would suspect the phantom support - was this a perspex phantom holder? This can have very large susceptibility changes at the points of contact with the phantom. |
The Siemens TotalReadoutTime validation dataset is part of dcm_qa. |
* tag 'v1.0.20200331': (52 commits) Update submodules Update dcm_qa submodule. UIH 3D sequence quirk New release, EstimatedTotalReadoutTime/EstimatedEffectiveEchoSpacing (rordenlab#377) Philips TotalReadoutTime (rordenlab#377) Cleanup Experimental Canon DICOM support (rordenlab#388) Experimental solution for issue 384 (rordenlab#384) Detect catastrophic anonymization (rordenlab#383) Only report "multiple inversion times" if 0018,9079 values differ (e.g. Bangalore data in https://github.com/neurolabusc/dcm_qa_philips) Consistent echo naming (rordenlab#381) Philips partial Fourier (rordenlab#377) Support InversionTImes (0018,9079) tag (rordenlab#380) Philips effective echo spacing formula ambiguous (rordenlab#377) TR for Philips 3D EPI (rordenlab#369) Citation (rordenlab#102) GE PET with variable slice intensity (rordenlab#374) Estimate Philips EffectiveEchoSpacing (nipreps/sdcflows#5) GE slice interpolation (rordenlab#373) 3D EPI TR (rordenlab#369) 3D phase (rordenlab#371) Enhanced ordering (rordenlab#372 (comment)) ...
Sorry for unearthing this issue again. Coming back to it I noticed one more reason to get it right:
It's not, so long: i - The EPI up/down blips you supply have exactly the same total readout time (it is possible to have uneven EPI sequences for some reason) for the estimation of the fieldmap. This is to say that I agree with Michael that it is really important for Philips to help their users get accurate values. Has there been any relevant development on the matter? @drmclem @neurolabusc . |
@oesteban the Philips DICOM images do not contain the required information. This is a limitation of the Philips data, not dcm2niix. Therefore, I am unable to resolve this. @sandeepganji is leading two independent paths to aid Philips users:
I urge you to contact Sandeed directly. You can help him curate his wishlist for new meta data. Also, you can help him identify Philips users who can work together to lobby Philips. |
Thanks much! |
Now that I'm actually working with some Philips (5.7) data, I went went back and looked at this issue a bit more closely. Something fundamentally doesn't make sense to me. Both in the examples shown previously by @drmclem (for "EffectiveEchoSpacing", under the Formula column: #377 (comment)), as well as in the spreadsheet Philips_IngeniaCX_EPI_Validation_Guide.xlsx (see #377 (comment)), the computed "EffectiveEchoSpacing" is not changing when some in-plane acceleration (SENSE) is added. It seems like that can't be correct. (The reason it is called "Effective" Echo Spacing is to reflect the fact that the value should at a minimum change when in-plane acceleration is used). Am I missing something in reviewing this (complicated) issue? |
Ahh, I just noticed that as of the March 23, 2020 post (#377 (comment)), you changed the calculation, such that what you were previously calling
whereas the two comments and the spreadsheet that I cite above were created before that date. It's easy to miss that the stuff before March 23, 2020 in this Issue was superseded by revised formulas. Hopefully this will help others to avoid making the same mistake. |
FWIW, it would be good to link to #377 on https://github.com/rordenlab/dcm2niix/tree/master/Philips, since it provides a more complete, and more recent discussion of the issue than the current link to nipreps/sdcflows#5 |
That said, taking another look at the numbers in that spreadsheet, and revising them for the March 23, 2020 equations, I still have some questions. For example, Partial Fourier should have no impact on the amount of distortion, and thus no impact on the computed values for For example, Series 201 ( |
@mharms my sense is that we close this issue. The current Philips DICOMs are underspecified to determine |
That's fine. Although I'm not sure if it is a matter of the Philips DICOMs being underspecified, confusion about what exactly For anyone wanting to take this up, I believe that the current calculations are fine regarding use of in-plane acceleration (SENSE), but I'm not convinced that In particular, given that And the interpretation of |
@mharms I wish to close this issue to push a new release. Do you want to suggest a modification to the Philips-specific handling by dcm2niix page (even if it is only a link to this issue)? |
Maybe something like the following for the relevant paragraph in the Philips README? Another value desirable for susceptibility distortion correction (e.g., TOPUP) is the "TotalReadoutTime". Be aware that the FSL definition is not intuitive for scans with parallel imaging, phase oversampling, partial Fourier, interpolation, etc. It has been challenging to establish and validate the correct equations to calculate "TotalReadoutTime" on Philips in the presence of all these possible factors, and the issue is further complicated by the fact that Philips have may changed the manner in which it reports the relevant information over time (#377 (comment)). For this reason, for Philips data, |
Hi! Regarding the water-fat shift, if I remember correctly, we did not set this parameter at any point...it was calculated automatically by Philips and displayed as part of the ExamCard summary. I do not recall seeing a way to set WFS to a given value. Digging through old emails, I see in one of our email exchanges ["Study Times", March 17, 2020] that we were picking up the WFS value from these ExamCards directly, which further convinces me that it was not a setting we could manipulate explicitly (at least not for the sequences we acquired) |
Digging through the emails, I see that the last point we had discussed over emails (just before the pandemic lockdown) was that the Philips help documentation states that "echo spacing" is a paramater that is displayed on the console in case of a (multishot?) TSE sequence. However, despite that statement, the console summary did not show the parameter. Perhaps it is possible now with the newer software releases? I, unfortunately, do not have access to a Philips scanner anymore. |
If I understand correctly, you should have been able to use |
@mharms I am closing this issue. The documentation is updated with your suggestions. Thanks! |
The current stable version of dcm2niix does not populate the BIDS field
EffectiveEchoSpacing
for Philips data. While this is often not a crucial parameter, the sdcflows repository does attempt to estimate this. It would be great to validate this. I suspect the sdcflows formula does not account for partial Fourier acquisitions. Tag 0018,9081 and 2001,1019 only reveals if pF is on/off. This could be inferred by knowing the echo train length (from 2001,1013), the SENSE factor (2005,140f) and the un-interpolated matrix size. @drmclem do you have any hints on determining partial Fourier? Ideally, it would be nice to have a simple validation dataset from someone with access to Philips equipment (e.g. scans where interpolation, partial Fourier, and SENSE are varied).The text was updated successfully, but these errors were encountered: