63 #ifndef NONCARTESIAN_ENCODING_H 64 #define NONCARTESIAN_ENCODING_H 68 #include <gadgetron/hoNDArray.h> 69 #include <gadgetron/vector_td.h> 70 #include <gadgetron/vector_td_utilities.h> 72 #include <gadgetron/hoNDFFT.h> 73 #include <gadgetron/hoNFFT.h> 78 typedef Gadgetron::hoNDArray<std::complex<float> > CFGThoNDArr;
87 template <
unsigned int D>
91 typedef Gadgetron::hoNDArray<Gadgetron::vector_td<float,D> > TrajectoryArrayType;
93 Gridder(
const std::vector<size_t> img_output_dims,
const TrajectoryArrayType &traj) :
94 nufft_operator_(Gadgetron::from_std_vector<size_t, D>(img_output_dims), (
float)this->oversampling_factor_, (
float)this->kernel_size_)
96 setup_nufft(img_output_dims, traj);
99 void setup_nufft(
const std::vector<size_t> img_output_dims,
const TrajectoryArrayType &traj)
101 if( img_output_dims.size() != D)
102 throw LocalisedException(
"The image dimensions of the output should be of the dimensions of the Gridder." , __FILE__, __LINE__);
104 traj.get_dimensions(this->trajdims_);
105 this->output_dims_ = img_output_dims;
106 this->nufft_operator_.preprocess(traj);
109 void ifft(CFGThoNDArr& img,
const CFGThoNDArr& kdata)
const 111 auto sptr_const_dcw = std::make_shared<Gadgetron::hoNDArray<float> >( this->trajdims_);
112 float const normed_dcw_value = 1.0;
114 sptr_const_dcw ->fill(normed_dcw_value);
116 img.create(this->output_dims_);
117 img.fill(std::complex<float>(0.f, 0.f));
119 this->nufft_operator_.compute(kdata, img, sptr_const_dcw.get(), Gadgetron::NFFT_comp_mode::BACKWARDS_NC2C);
122 void fft(CFGThoNDArr& kdata,
const CFGThoNDArr& img)
const 124 auto sptr_unit_dcw = std::make_shared<Gadgetron::hoNDArray<float> >( this->trajdims_);
125 sptr_unit_dcw ->fill(1.f);
126 kdata.create(this->trajdims_);
128 this->nufft_operator_.compute(img, kdata, sptr_unit_dcw.get(), Gadgetron::NFFT_comp_mode::FORWARDS_C2NC);
132 static const size_t oversampling_factor_ = 2;
133 static size_t const kernel_size_ = 2;
135 std::vector<size_t> trajdims_;
136 std::vector<size_t> output_dims_;
138 mutable Gadgetron::hoNFFT_plan<float, D> nufft_operator_;
163 Gridder2D::TrajectoryArrayType get_trajectory(
const MRAcquisitionData& ac)
const;
175 Gridder2D::TrajectoryArrayType get_trajectory(
const MRAcquisitionData& ac)
const;
176 std::vector<int> get_slice_encoding_subset_indices(
const MRAcquisitionData& full_dataset,
unsigned int kspace_enc_step_2)
const;
182 #endif // NONCARTESIAN_ENCODING_H Definition: LocalisedException.h:32
Abstract class defining the interface to perform Fourier transforms.
Definition: FourierEncoding.h:51
Class to perform a NUFFT for 2D data.
Definition: NonCartesianEncoding.h:88
File for cartesian fourier encoding and trajectory setting.
Abstract data container.
Definition: GeometricalInfo.cpp:141
Definition: NonCartesianEncoding.h:167
Implementation to perform a non-cartesian FFT for RPE MR data.
Definition: NonCartesianEncoding.h:155
Abstract MR acquisition data container class.
Definition: gadgetron_data_containers.h:216