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

Alternative Trajectories #6

Open
johannesmayer opened this issue Aug 27, 2018 · 7 comments
Open

Alternative Trajectories #6

johannesmayer opened this issue Aug 27, 2018 · 7 comments

Comments

@johannesmayer
Copy link
Owner

johannesmayer commented Aug 27, 2018

The following trajectories are rather easy to simulate:

  • variable density cartesian with golden cut angle increment (this is easy if one alread has a file, but can be simulated relatively easy by ordering the cartesian acquisitions in the correct way) -> check literature of Doneva Poisson Disk sampling or Küstner or Lustig et al. for formulas.

The following 'non-cartesian' trajectories need to be enabled:

  • radial readout / stack-of-stars
  • RPE
  • real 3D encoding / arbitrary sampling trajectories
    For this couple the encoding to The Gadgetron software.

Select encoding based on the trajectory parameter set in the ISMRMRD Header passed to the simulation. Setting this will be enabled in the interface of the python/matlab code
.

@johannesmayer
Copy link
Owner Author

In order to provide RPE support, one needs NFFT encoding:
The interface is given in the toolbox <gadgetron/hoNFFT.h>
Use is exemplified in CPUGriddingReconGadget:


hoNDArray<float_complext> *data;
hoNDArray<floatd2> *traj; // this has to be 2D since we do cartesian readouts
hoNDArray<float> *dcw; // this has to be 0x0 array because we forward project


hoNFFT_plan<float, 2> plan( from_std_vector<size_t, 2>(imageDims),
				               oversamplingFactor,
                    		               kernelWidth);	

hoNDArray<float_complext> result; result.create(imageDimsOs[0], imageDimsOs[1]);

plan.preprocess(*traj);


// last argument has to be forward with Cartesian to non Carteisan layout.
plan.compute(*data, result, *dcw, hoNFFT_plan<float, 2>::NFFT_BACKWARDS_NC2C); 
return boost::make_shared<hoNDArray<float_complext>>(result); // or any other post processing of result!

@johannesmayer
Copy link
Owner Author

In vector_td_utilities the function

template<class T, unsigned int D> inline
vector_td<T,D> from_std_vector( std::vector<T> &_vector )

provides interface to std vector extraction of dimensions

@johannesmayer
Copy link
Owner Author

Check influence of parameter oversampling_factor in encoding call
hoNFFT_plan<float, 2> nufft_operator( from_std_vector<size_t, 2>(slice_dims) , oversampling_factor, kernel_size);

This has to do with deapodization but I don't know how yet.

@johannesmayer
Copy link
Owner Author

Rewrite encoding to take 4d data since coilmaps take up an extra dimension.
Dimensions need then be [N_ro, N_r, N_ang, N_coil]

@johannesmayer
Copy link
Owner Author

Provide automated trajectory computing based on input files.
Slice and Phase encoding then become parameters of the trajectory. This would allow trajectory consistency with the rawdata files at all times.

@johannesmayer
Copy link
Owner Author

Interace is provided now.
Now a radial readout should be enabled!

@johannesmayer
Copy link
Owner Author

Enable subtrajectory sampling, s.t. only points which necessary are actually interpolated

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant