30 #ifndef GADGETRON_EXTENSIONS 31 #define GADGETRON_EXTENSIONS 33 #define WIN32_LEAN_AND_MEAN 39 #include <ismrmrd/ismrmrd.h> 40 #include <ismrmrd/dataset.h> 42 #include "sirf/Gadgetron/cgadgetron_shared_ptr.h" 45 #include "sirf/common/JacobiCG.h" 46 #include "sirf/iUtilities/LocalisedException.h" 47 #include "sirf/Gadgetron/cgadgetron_shared_ptr.h" 52 #if GADGETRON_TOOLBOXES_AVAILABLE 60 class GadgetronClientConnector;
70 gadgetron::shared_ptr<GadgetronClientConnector> sptr();
72 gadgetron::shared_ptr<GadgetronClientConnector> sptr_con_;
83 GadgetHandle(std::string
id, gadgetron::shared_ptr<aGadget> sptr_g) :
84 id_(
id), sptr_g_(sptr_g) {}
85 std::string id()
const 91 return *sptr_g_.get();
95 return *sptr_g_.get();
97 gadgetron::shared_ptr<aGadget> gadget_sptr()
103 gadgetron::shared_ptr<aGadget> sptr_g_;
140 static const char* class_name()
142 return "GadgetChain";
144 void set_host(
const std::string host)
148 void set_port(
const std::string port)
155 void add_reader(std::string
id, gadgetron::shared_ptr<aGadget> sptr_g)
157 readers_.push_back(gadgetron::shared_ptr<GadgetHandle>
161 void add_writer(std::string
id, gadgetron::shared_ptr<aGadget> sptr_g)
163 writers_.push_back(gadgetron::shared_ptr<GadgetHandle>
167 void set_endgadget(gadgetron::shared_ptr<aGadget> sptr_g)
172 void add_gadget(std::string
id, gadgetron::shared_ptr<aGadget> sptr_g)
174 gadgets_.push_back(gadgetron::shared_ptr<GadgetHandle>
177 gadgetron::shared_ptr<aGadget> gadget_sptr(std::string
id);
179 std::string xml()
const;
184 std::list<gadgetron::shared_ptr<GadgetHandle> > readers_;
185 std::list<gadgetron::shared_ptr<GadgetHandle> > writers_;
186 std::list<gadgetron::shared_ptr<GadgetHandle> > gadgets_;
187 gadgetron::shared_ptr<aGadget> endgadget_;
205 add_reader(
"reader", reader_);
206 add_writer(
"writer", writer_);
210 static const char* class_name()
212 return "AcquisitionsProcessor";
216 gadgetron::shared_ptr<MRAcquisitionData> get_output()
218 if(!sptr_acqs_->sorted())
219 sptr_acqs_->sort_by_time();
225 gadgetron::shared_ptr<IsmrmrdAcqMsgReader> reader_;
226 gadgetron::shared_ptr<IsmrmrdAcqMsgWriter> writer_;
227 gadgetron::shared_ptr<MRAcquisitionData> sptr_acqs_;
245 sptr_images_.reset();
246 add_reader(
"reader", reader_);
247 add_writer(
"writer", writer_);
249 set_endgadget(endgadget);
251 static const char* class_name()
253 return "ImagesReconstructor";
257 gadgetron::shared_ptr<GadgetronImageData> get_output()
263 gadgetron::shared_ptr<IsmrmrdAcqMsgReader> reader_;
264 gadgetron::shared_ptr<IsmrmrdImgMsgWriter> writer_;
265 gadgetron::shared_ptr<GadgetronImageData> sptr_images_;
278 dicom_(dicom), prefix_(prefix),
283 gadgetron::shared_ptr<aGadget> endgadget;
292 add_reader(
"reader", reader_);
293 add_writer(
"writer", writer_);
294 set_endgadget(endgadget);
296 static const char* class_name()
298 return "ImagesProcessor";
301 void check_connection();
303 gadgetron::shared_ptr<GadgetronImageData> get_output()
311 gadgetron::shared_ptr<IsmrmrdImgMsgReader> reader_;
312 gadgetron::shared_ptr<ImageMessageWriter> writer_;
314 gadgetron::shared_ptr<GadgetronImageData> sptr_images_;
355 BFOperator(gadgetron::shared_ptr<MRAcquisitionModel> sptr_am) : sptr_am_(sptr_am) {}
356 virtual gadgetron::shared_ptr<GadgetronImageData>
359 gadgetron::shared_ptr<MRAcquisitionData> sptr_fwd =
360 sptr_am_->fwd(image_data);
361 gadgetron::shared_ptr<GadgetronImageData> sptr_bwd =
362 sptr_am_->bwd(*sptr_fwd);
366 gadgetron::shared_ptr<MRAcquisitionModel> sptr_am_;
376 gadgetron::shared_ptr<MRAcquisitionData> sptr_ac,
377 gadgetron::shared_ptr<GadgetronImageData> sptr_ic
380 this->set_up(sptr_ac, sptr_ic);
383 gadgetron::shared_ptr<MRAcquisitionData> sptr_ac,
384 gadgetron::shared_ptr<GadgetronImageData> sptr_ic,
385 gadgetron::shared_ptr<CoilSensitivitiesVector> sptr_csms,
386 std::string acqs_info
387 ) : sptr_csms_(sptr_csms), acqs_info_(acqs_info)
389 this->set_up(sptr_ac, sptr_ic);
400 float norm(
int num_iter = 2,
int verb = 0)
402 gadgetron::shared_ptr<MRAcquisitionModel> sptr_am
407 jcg.set_num_iterations(num_iter);
408 gadgetron::unique_ptr<GadgetronImageData> sptr_id = sptr_imgs_->clone();
410 image_data.fill(1.0);
411 float lmd = jcg.largest(bf, image_data, verb);
412 return std::sqrt(lmd);
419 void set_acquisition_template
420 (gadgetron::shared_ptr<MRAcquisitionData> sptr_ac)
422 sptr_acqs_ = sptr_ac;
425 void set_image_template
426 (gadgetron::shared_ptr<GadgetronImageData> sptr_ic)
428 check_data_role(*sptr_ic);
429 sptr_imgs_ = sptr_ic;
432 gadgetron::shared_ptr<const MRAcquisitionData> acq_template_sptr()
const 437 gadgetron::shared_ptr<const GadgetronImageData> image_template_sptr()
const 442 void set_csm(gadgetron::shared_ptr<CoilSensitivitiesVector> sptr_csms)
444 sptr_csms_ = sptr_csms;
447 void set_encoder(gadgetron::shared_ptr<sirf::FourierEncoding> sptr_enc)
449 sptr_enc_ = sptr_enc;
453 void set_up(gadgetron::shared_ptr<MRAcquisitionData> sptr_ac,
454 gadgetron::shared_ptr<GadgetronImageData> sptr_ic);
471 if (!sptr_acqs_.get())
473 (
"Acquisition data template not set", __FILE__, __LINE__);
474 if (!sptr_csms_.get() || sptr_csms_->items() < 1)
476 (
"Coil sensitivity maps not found", __FILE__, __LINE__);
478 gadgetron::unique_ptr<MRAcquisitionData> uptr_acqs =
481 fwd(ic, *sptr_csms_, *uptr_acqs);
483 return gadgetron::shared_ptr<MRAcquisitionData>(std::move(uptr_acqs));
490 if (!sptr_imgs_.get())
492 (
"image data template not set", __FILE__, __LINE__);
493 if (!sptr_csms_.get() || sptr_csms_->items() < 1)
495 (
"coil sensitivity maps not found", __FILE__, __LINE__);
496 gadgetron::shared_ptr<GadgetronImageData> sptr_imgs =
497 sptr_imgs_->new_images_container();
498 bwd(*sptr_imgs, *sptr_csms_, ac);
503 std::string acqs_info_;
504 gadgetron::shared_ptr<MRAcquisitionData> sptr_acqs_;
505 gadgetron::shared_ptr<GadgetronImageData> sptr_imgs_;
506 gadgetron::shared_ptr<CoilSensitivitiesVector> sptr_csms_;
507 gadgetron::shared_ptr<FourierEncoding> sptr_enc_;
Shared pointer wrap-up for the abstract gadget class aGadget.
Definition: gadgetron_x.h:81
Definition: LocalisedException.h:32
Class for GadgetIsmrmrdAcquisitionMessageWriter gadget xml-definition generator.
Definition: gadget_lib.h:139
A particular type of Gadget chain that has ImageData on input and output.
Definition: gadgetron_x.h:275
Abstract base class for a gadget xml-definition generator.
Definition: gadget_lib.h:45
A class for MR acquisition modelling.
Definition: gadgetron_x.h:344
File for cartesian fourier encoding and trajectory setting.
A coil sensitivities container based on the GadgetronImagesVector class.
Definition: gadgetron_data_containers.h:1261
Shared pointer wrap-up for GadgetronClientConnector.
Definition: gadgetron_x.h:66
Class for DicomImageWriter gadget xml-definition generator.
Definition: gadget_lib.h:217
Class for the product of backward and forward projectors of the MR acquisition model.
Definition: gadgetron_x.h:353
Definition: gadget_lib.h:647
Specification file for the library of SIRF generators of xml-definitions of Gadgetron gadgets...
Class for MRIImageReader gadget xml-definition generator.
Definition: gadget_lib.h:164
Definition: JacobiCG.h:37
Abstract data container.
Definition: GeometricalInfo.cpp:141
Class for MRIImageWriter gadget xml-definition generator.
Definition: gadget_lib.h:193
A particular type of Gadget chain that has AcquisitionData on input and output.
Definition: gadgetron_x.h:197
float norm(int num_iter=2, int verb=0)
Method computing the norm of the MR acquisition model operator A.
Definition: gadgetron_x.h:400
Specification file for data container classes for Gadgetron data.
Class for communicating with Gadgetron server.
Definition: gadgetron_client.h:292
Class for GadgetIsmrmrdAcquisitionMessageReader gadget xml-definition generator.
Definition: gadget_lib.h:113
Gadget chain class.
Definition: gadgetron_x.h:134
Definition: gadget_lib.h:658
A particular type of Gadget chain that has AcquisitionData on input and ImageData on output...
Definition: gadgetron_x.h:237
Abstract Gadgetron image data container class.
Definition: gadgetron_data_containers.h:632
Abstract MR acquisition data container class.
Definition: gadgetron_data_containers.h:216
Specification file for non-cartesian Fourier encoding.