29 #ifndef TRAJECTORYPREPARATION_H 30 #define TRAJECTORYPREPARATION_H 34 #include <ismrmrd/xml.h> 35 #include <ismrmrd/ismrmrd.h> 38 #include "sirf/iUtilities/LocalisedException.h" 42 const static double SIRF_PI = 3.14159265358979323846;
43 const static double SIRF_GOLDEN_ANGLE = SIRF_PI*0.618034;
55 template <std::u
int16_t D>
59 typedef typename std::array<float, D> TrajPointType;
60 typedef typename std::vector<TrajPointType> TrajPointSet;
68 for(
size_t ia=0; ia<mr_acq.number(); ++ia)
70 ISMRMRD::Acquisition acq;
71 mr_acq.get_acquisition(ia, acq);
73 mr_acq.set_acquisition(ia, acq);
79 if(mr_acq.number() <= 0){
80 throw std::runtime_error(
"Please pass a non-empty container.");
83 ISMRMRD::Acquisition acq;
84 mr_acq.get_acquisition(0, acq);
86 if( acq.trajectory_dimensions() != D){
87 throw std::runtime_error(
"Please give Acquisition with a the correct dimensionality if you want to use it here.");
92 for(
int ia=0; ia<mr_acq.number(); ++ia)
94 mr_acq.get_acquisition(ia, acq);
95 append_to_trajectory(traj, acq);
102 ISMRMRD::Encoding kspace_encoding_;
121 acq.resize(acq.number_of_samples(),acq.active_channels(), D);
122 TrajPointSet acq_traj = this->calculate_trajectory(acq);
123 acq.setTraj(&(acq_traj[0][0]));
133 ISMRMRD::IsmrmrdHeader hdr = mr_acq.acquisitions_info().get_IsmrmrdHeader();
135 if(hdr.encoding.size() != 1)
136 throw LocalisedException(
"Currrently only files with one encoding are supported", __FILE__, __LINE__);
139 kspace_encoding_ = hdr.encoding[0];
141 std::stringstream hdr_stream;
142 serialize(hdr, hdr_stream);
145 mr_acq.set_acquisitions_info(ai);
148 virtual TrajPointSet calculate_trajectory(ISMRMRD::Acquisition& acq)
const =0;
149 virtual void append_to_trajectory(TrajPointSet& tps, ISMRMRD::Acquisition& acq)
const =0;
189 TrajPointSet calculate_trajectory(ISMRMRD::Acquisition& acq)
const;
190 virtual void append_to_trajectory(TrajPointSet& tps, ISMRMRD::Acquisition& acq)
const;
193 std::uint16_t circ_mod(std::uint16_t
const a, std::uint16_t
const b)
const {
return (((a%b) + b ) % b);}
194 const std::vector< std::uint16_t > rad_shift_ = {0, 2, 1, 3};
205 virtual TrajPointSet calculate_trajectory(ISMRMRD::Acquisition& acq)
const;
207 virtual void append_to_trajectory(TrajPointSet& tps, ISMRMRD::Acquisition& acq)
const;
212 virtual float calculate_pe_angle(ISMRMRD::Acquisition& acq)
const =0;
231 ISMRMRD::Limit ang_lims(0,0,0);
233 if(this->kspace_encoding_.encodingLimits.kspace_encoding_step_1.is_present())
234 ang_lims = this->kspace_encoding_.encodingLimits.kspace_encoding_step_1.get();
236 const ISMRMRD::EncodingCounters idx = acq.idx();
237 unsigned short num_angles = ang_lims.maximum;
239 return (SIRF_PI/(
float)num_angles * idx.kspace_encode_step_1);
251 traj_type_ = ISMRMRD::TrajectoryType::GOLDENANGLE;
257 const ISMRMRD::EncodingCounters idx = acq.idx();
258 return (SIRF_GOLDEN_ANGLE * idx.kspace_encode_step_1);
264 #endif// TRAJECTORYPREPARATION_H Definition: LocalisedException.h:32
Abstract class defining the interface to set trajectories.
Definition: TrajectoryPreparation.h:56
Class to get cartesian encoding phase encoding locations.
Definition: TrajectoryPreparation.h:165
Class to set the golden-angle radial phase encoding (GRPE) trajectory.
Definition: TrajectoryPreparation.h:181
virtual float calculate_pe_angle(ISMRMRD::Acquisition &acq) const
Abstract function computing a anglular increment depending on the trajectory type.
Definition: TrajectoryPreparation.h:229
virtual float calculate_pe_angle(ISMRMRD::Acquisition &acq) const
Abstract function computing a anglular increment depending on the trajectory type.
Definition: TrajectoryPreparation.h:255
Implementation to set anglular increment for 2D radial trajectory based on doi:10.1109/TMI.2006.885337.
Definition: TrajectoryPreparation.h:247
Abstract data container.
Definition: GeometricalInfo.cpp:141
Implementation to set anglular increment for 2D radial trajectory based on (Pi=3.141...)/#Angles.
Definition: TrajectoryPreparation.h:220
virtual void set_acquisition_trajectory(ISMRMRD::Acquisition &acq) const
Sets the trajectory field in an ISMRMRD::Acquisition.
Definition: TrajectoryPreparation.h:119
Definition: gadgetron_data_containers.h:83
Interface to set the 2D radial trajectory.
Definition: TrajectoryPreparation.h:202
virtual void overwrite_trajectory_name(sirf::MRAcquisitionData &mr_acq)
Overwrites the trajectory name in the argument with the traj_type_ member.
Definition: TrajectoryPreparation.h:131
Specification file for data container classes for Gadgetron data.
ISMRMRD::TrajectoryType traj_type_
Labels which trajectory type the TrajectoryPreparation is for.
Definition: TrajectoryPreparation.h:108
Abstract MR acquisition data container class.
Definition: gadgetron_data_containers.h:216