bool setISMRMRMetaValues(ISMRMRD::MetaContainer& attrib, const std::string& name, const std::vector<std::string>& v) { try { size_t num = v.size(); if ( num == 0 ) { GWARN_STREAM("setISMRMRMetaValues, input vector is empty ... " << name); return true; } attrib.set(name.c_str(), v[0].c_str()); size_t ii; for ( ii=1; ii<v.size(); ii++ ) { attrib.append(name.c_str(), v[ii].c_str()); } } catch(...) { GERROR_STREAM("Error happened in setISMRMRMetaValues(ISMRMRD::MetaContainer& attrib, const std::string& name, const std::vector<std::string>& v) ... "); return false; } return true; }
bool getISMRMRMetaValues(const ISMRMRD::MetaContainer& attrib, const std::string& name, std::vector<std::string>& v) { try { size_t num = attrib.length(name.c_str()); if ( num == 0 ) { v.clear(); GWARN_STREAM("getISMRMRMetaValues, can not find field : " << name); return true; } v.resize(num); size_t ii; for ( ii=0; ii<num; ii++ ) { v[ii] = std::string( attrib.as_str(name.c_str(), ii) ); } } catch(...) { GERROR_STREAM("Error happened in getISMRMRMetaValues(const ISMRMRD::MetaContainer& attrib, const std::string& name, std::vector<std::string>& v) ... "); return false; } return true; }
bool GtPlusAccumulatorImageTriggerGadget::storeImage(const ISMRMRD::ImageHeader& imgHeader, const hoNDArray<ValueType>& img, const ISMRMRD::MetaContainer& attrib, ImageBufferType& buf) { try { long long cha = attrib.as_long(GADGETRON_CHA, 0); size_t slc = imgHeader.slice; long long e2 = attrib.as_long(GADGETRON_E2, 0); size_t con = imgHeader.contrast; size_t phs = imgHeader.phase; size_t rep = imgHeader.repetition; size_t set = imgHeader.set; size_t ave = imgHeader.average; // create image ImageType* storedImage = new ImageType(); GADGET_CHECK_RETURN_FALSE(storedImage!=NULL); storedImage->from_NDArray(img); storedImage->attrib_ = attrib; GADGET_CHECK_RETURN_FALSE(gtPlus_util_.setMetaAttributesFromImageHeaderISMRMRD(imgHeader, storedImage->attrib_)); storedImage->attrib_.set(GADGETRON_PASS_IMMEDIATE, (long)0); buf(cha, slc, e2, con, phs, rep, set, ave) = storedImage; if ( pass_image_immediate_ ) { Gadgetron::GadgetContainerMessage<ImageBufferType>* cm1 = new Gadgetron::GadgetContainerMessage<ImageBufferType>(); ImageBufferType& imgBuf = *(cm1->getObjectPtr()); std::vector<size_t> dim2D(num_of_dimensions_, 1); imgBuf.create(dim2D); imgBuf(0) = new ImageType(); *imgBuf(0) = *storedImage; // set the pass_image flag, so next gadget knows imgBuf(0)->attrib_.set(GADGETRON_PASS_IMMEDIATE, (long)1); if (this->next()->putq(cm1) < 0) { cm1->release(); return false; } } } catch(...) { GERROR_STREAM("Error happens in GtPlusAccumulatorImageTriggerGadget::storeImage(const ISMRMRD::ImageHeader& imgHeader, const hoNDArray<ValueType>& img, const ISMRMRD::MetaContainer& attrib, ImageBufferType& buf) ... "); return false; } return true; }