[ismrmrd] 23/177: Removing old hdf5 related stuff. Removed xml specific windows exports definitions.
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:01:58 UTC 2015
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to annotated tag v1.1.0.beta.1
in repository ismrmrd.
commit fcdeffbda6c446d5894d3fee8e49a56f179d73e0
Author: Souheil Inati <souheil.inati at nih.gov>
Date: Mon Aug 25 16:31:10 2014 -0400
Removing old hdf5 related stuff. Removed xml specific windows exports definitions.
---
ismrmrd_hdf5.cpp | 715 -----------------------------------------------
ismrmrd_hdf5.h | 312 ---------------------
ismrmrd_hdf5_datatypes.h | 346 -----------------------
ismrmrd_xsd_export.h | 21 --
xml/ismrmrd_meta.h | 6 +-
xml/ismrmrd_xml.h | 6 +-
xml/ismrmrd_xml_export.h | 14 -
7 files changed, 6 insertions(+), 1414 deletions(-)
diff --git a/ismrmrd_hdf5.cpp b/ismrmrd_hdf5.cpp
deleted file mode 100644
index 03c5fca..0000000
--- a/ismrmrd_hdf5.cpp
+++ /dev/null
@@ -1,715 +0,0 @@
-#include "ismrmrd_hdf5.h"
-#include "ismrmrd_hdf5_datatypes.h"
-
-
-#include <iostream>
-#include <boost/algorithm/string.hpp>
-
-
-namespace ISMRMRD
-{
-
-int IsmrmrdDataset::openHDF5File()
-{
- std::cout << "Opening file" << std::endl;
- if (file_exists_) {
- try {
- if (!H5File::isHdf5(filename_.c_str())) {
- std::cerr << "File \"" << filename_ << "\" is not an HDF file file" << std::endl;
- return -1;
- }
- file_ = boost::shared_ptr<H5File>(new H5File(filename_.c_str(), H5F_ACC_RDWR));
- } catch (...) {
- try {
- file_ = boost::shared_ptr<H5File>(new H5File(filename_.c_str(), H5F_ACC_RDONLY));
- } catch (...) {
- std::cerr << "Failed to open HDF5 file." << std::endl;
- return -1;
- }
- }
- file_open_ = true;
- } else if (create_file_if_needed_){
- try {
- file_ = boost::shared_ptr<H5File>(new H5File(filename_, H5F_ACC_TRUNC));
-
- //We will close and then immediately open the file again.
- //We need to make sure the file is saved as an HDF5 file in case other processes and functions
- //need to access it immediately. The line above does not cause the file to be marked as and HDF5 file.
- //H5File::isHdf5(filename_.c_str()) will return false at this point.
- file_->close();
- file_ = boost::shared_ptr<H5File>(new H5File(filename_, H5F_ACC_RDWR));
-
- } catch (...) {
- std::cerr << "Failed to create and open HDF5 file." << std::endl;
- return -1;
- }
- file_open_ = true;
- file_exists_ = true;
- } else {
- std::cerr << "Unable to find HDF5 file (" << filename_ << "), and file cannot be created." << std::endl;
- return -1;
- }
-
- return 0;
-}
-
-void IsmrmrdDataset::close(void)
-{
- if (file_open_) {
- dataset_->flush(H5F_SCOPE_LOCAL);
- dataset_->close();
- dataset_.reset();
- file_->flush(H5F_SCOPE_LOCAL);
- file_->close();
- file_.reset();
- file_open_ = false;
- }
-}
-
-
-
-bool IsmrmrdDataset::linkExists(const char* name)
-{
- if (!file_open_) {
- std::cerr << "IsmrmrdDataset::linkExists: file not open." << std::endl;
- return false;
- }
- std::vector<std::string> name_elements;
- std::string splitstr("/");
- std::string namestr(name);
- boost::split(name_elements, namestr, boost::is_any_of(splitstr));
- std::string current_path("");
- for (unsigned int i = 0; i < name_elements.size(); i++) {
- if (name_elements[i].size() > 0) {
- current_path = current_path + std::string("/") + name_elements[i];
- if (!H5Lexists(file_->getId(), current_path.c_str(), H5P_DEFAULT )) {
- return false;
- }
- }
- }
- return true;
-}
-
-int IsmrmrdDataset::createGroupForDataset(const char* name)
-{
- if (!file_open_) {
- std::cerr << "IsmrmrdDataset::linkExists: file not open." << std::endl;
- return -1;
- }
-
- std::vector<std::string> name_elements;
- std::string splitstr("/");
- std::string namestr(name);
- boost::split(name_elements, namestr, boost::is_any_of(splitstr));
- std::string current_path("");
- for (unsigned int i = 0; i < name_elements.size(); i++) {
- if (name_elements[i].size() > 0) {
- current_path = current_path + std::string("/") + name_elements[i];
- if (!H5Lexists(file_->getId(), current_path.c_str(), H5P_DEFAULT )) {
- file_->createGroup( current_path.c_str());
- }
- }
- }
- return 0;
-}
-
-template <typename T> int IsmrmrdDataset::appendArray(NDArrayContainer<T>& a, const char* varname)
-{
-
- std::string data_path = groupname_ + std::string("/") + std::string(varname);
-
- if (!a.is_consistent()) {
- std::cerr << "IsmrmrdDataset::append(..): Asking to append inconsistent array." << std::endl;
- return -1;
- }
-
- boost::shared_ptr<DataSet> dataset;
- boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<T>();
-
- std::vector<hsize_t> dims;
- std::vector<hsize_t> max_dims;
- if (!linkExists(data_path.c_str())) {
- std::vector<hsize_t> dims;
- std::vector<hsize_t> max_dims;
- dims.push_back(1);
- max_dims.push_back(H5S_UNLIMITED);
- for (std::vector<unsigned int>::reverse_iterator it = a.dimensions_.rbegin(); it != a.dimensions_.rend(); it++) {
- dims.push_back(static_cast<unsigned long long int>(*it));
- max_dims.push_back(static_cast<unsigned long long int>(*it));
- }
-
- try {
-
- if (createGroupForDataset(groupname_.c_str()) < 0) {
- std::cout << "Failed to create group in HDF 5 file." << std::endl;
- return -1;
- }
-
- DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
-
- DSetCreatPropList cparms;
- cparms.setChunk( dims.size(), &dims[0] );
-
- dataset = boost::shared_ptr<DataSet>(new DataSet(file_->createDataSet( data_path.c_str(), *datatype, mspace1, cparms)));
- mspace1 = dataset->getSpace();
-
- DataSpace mspace2( dims.size(), &dims[0] );
-
- std::vector<hsize_t> offset(dims.size());
- mspace1.selectHyperslab(H5S_SELECT_SET, &dims[0], &offset[0]);
- dataset->write( &(a.data_[0]), *datatype, mspace2, mspace1 );
-
- } catch( Exception& e ) {
- std::cerr << "Exception caught while creating HDF5 dataset" << std::endl;
- std::cerr << e.getDetailMsg() << std::endl;
- return -1;
- }
- } else {
- try { // to determine if the dataset exists in the group
- dataset = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path.c_str())));
-
- DataType mtype = dataset->getDataType();
- if (!(mtype == (*datatype))) {
- std::cout << "Attempting to append data to HDF5 dataset with the wrong type" << std::endl;
- return -1;
- }
-
- DataSpace mspace1 = dataset->getSpace();
- int rank = mspace1.getSimpleExtentNdims();
- std::vector<hsize_t> ddims(rank,0);
- mspace1.getSimpleExtentDims(&ddims[0], NULL);
-
-
- if ((ddims.size()-1) != a.dimensions_.size()) {
- std::cerr << "Dimensions in dataset does not match with existing HDF5 dataset" << std::endl;
- }
-
- dims.push_back(1);
- for (unsigned int i = 1; i < ddims.size(); i++) {
- if (a.dimensions_[ddims.size()-1-i] != ddims[i]) {
- std::cerr << "Error trying to write array to existing HDF5 file. Variable has wrong size." << std::endl;
- std::cerr << a.dimensions_[ddims.size()-1-i] << ", " << ddims[i];
- std::cerr << std::endl;
- return -1;
- }
- dims.push_back(ddims[i]);
- }
-
- std::vector<hsize_t> offset(rank, 0);
- offset[0] = ddims[0];
-
- ddims[0]++;
-
- dataset->extend(&ddims[0]);
-
- DataSpace fspace2 = dataset->getSpace();
- fspace2.selectHyperslab( H5S_SELECT_SET, &dims[0], &offset[0] );
-
- DataSpace mspace2( rank, &dims[0] );
-
- dataset->write( &(a.data_[0]), *datatype, mspace2, fspace2 );
-
- }
- catch( FileIException& not_found_error)
- {
- std::cout << "Dataset is not found. At this point, it should have been created!" << std::endl;
- return -1;
- }
- }
- return 0;
-}
-
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< unsigned short int >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< float >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< double >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< std::complex<float> >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< std::complex<double> >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< ImageHeader >& a,const char* varname);
-
-template <typename T> boost::shared_ptr< NDArrayContainer<T> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index)
-{
- boost::shared_ptr< NDArrayContainer<T> > ret(new NDArrayContainer<T>());
- boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<T>();
-
- std::string data_path = groupname_ + std::string("/") + std::string(varname);
-
-
- try {
-
- if (!linkExists(data_path.c_str())) {
- std::cout << "Trying to access non-existing variable in HDF5 file." << std::endl;
- return ret;
- }
-
- DataSet d = file_->openDataSet(H5std_string(data_path.c_str()));
- DataSpace dataspace = d.getSpace();
- DataType dtype = d.getDataType();
-
- if (!(dtype == *datatype)) {
- std::cout << "HDF5 datatype for selected variable does not match signature of reading function" << std::endl;
- return ret;
- }
-
- int rank = dataspace.getSimpleExtentNdims();
- std::vector<hsize_t> dims(rank,0);
- dataspace.getSimpleExtentDims(&dims[0]);
-
- if (dims[0] <= index) {
- std::cout << "Attempting to access non-existing hyperslice" << std::endl;
- return ret;
- }
-
- std::vector<hsize_t> slice_dims(rank,0);
- std::vector<hsize_t> offset(rank,0);
- ret->dimensions_ = std::vector<unsigned int>(rank-1,0);
- slice_dims[0] = 1;
- offset[0] = index;
-
- for (unsigned int i = 1; i < rank; i++) {
- slice_dims[i] = dims[i];
- ret->dimensions_[ret->dimensions_.size()-i] = dims[i]; //Flip dimensions for NDArray.
- }
-
- dataspace.selectHyperslab( H5S_SELECT_SET, &slice_dims[0], &offset[0] );
-
- DataSpace memspace(rank,&slice_dims[0]);
-
- ret->data_.resize(ret->elements());
-
- //OK finally ready, now read the data.
- d.read(reinterpret_cast<void*>(&(ret->data_[0])), *datatype, memspace, dataspace, H5P_DEFAULT);
-
- } catch (...) {
- std::cout << "Error caught while attempting to read HDF5 file" << std::endl;
- return ret;
- }
-
- return ret;
-
-}
-
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer<unsigned short int> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer<float> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer<double> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer< std::complex<float> > > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer< std::complex<double> > > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-
-
-int IsmrmrdDataset::appendAcquisition(Acquisition* a)
-{
- std::vector<hsize_t> dims(2,1);
- std::vector<hsize_t> max_dims(2,1);max_dims[0] = H5S_UNLIMITED;
-
- int rank = 2;
- std::vector<hsize_t> ddims = dims;
- std::vector<hsize_t> offset(rank,0);
-
- bool new_dataset = false;
-
- if (!dataset_open_) {
- try {
- boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<AcquisitionHeader_with_data>();
- if (!linkExists(data_path_.c_str())) {
- DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
- DSetCreatPropList cparms;
- cparms.setChunk( dims.size(), &dims[0] );
- dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->createDataSet( data_path_.c_str(), *datatype, mspace1, cparms)));
- new_dataset = true;
- } else {
- dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path_.c_str())));
- DataType mtype = dataset_->getDataType();
- if (!(mtype == (*datatype))) {
- std::cout << "Attempting to append data to HDF5 dataset with the wrong type" << std::endl;
- return -1;
- }
-
- }
- dataset_open_ = true;
- } catch( Exception& e ) {
- std::cout << "Exception caught while opening (creating) HDF5 dataset" << std::endl;
- std::cout << e.getDetailMsg() << std::endl;
- return -1;
- }
- }
-
- try {
- boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<AcquisitionHeader_with_data>();
- AcquisitionHeader_with_data tmp;
- tmp.head = a->getHead();
- tmp.traj.len = tmp.head.trajectory_dimensions*tmp.head.number_of_samples;
- tmp.traj.p = const_cast<float*>(&a->getTraj()[0]);
-
- tmp.data.len = tmp.head.active_channels*tmp.head.number_of_samples*2;
- tmp.data.p = const_cast<float*>(&a->getData()[0]);
-
- DataSpace mspace1 = dataset_->getSpace();
- rank = mspace1.getSimpleExtentNdims();
- if (rank != 2) {
- std::cerr << "Wrong rank (" << rank << ") found in HDF5 dataset" << std::endl;
- return -1;
- }
-
- if (!new_dataset) {
- mspace1.getSimpleExtentDims(&ddims[0], NULL);
- offset[0] = ddims[0];
- ddims[0]++;
-
- dataset_->extend(&ddims[0]);
- }
- DataSpace fspace2 = dataset_->getSpace();
- fspace2.selectHyperslab( H5S_SELECT_SET, &dims[0], &offset[0] );
-
- DataSpace mspace2( rank, &dims[0] );
- dataset_->write( &tmp, *datatype, mspace2, fspace2 );
-
- } catch( Exception& e ) {
- std::cout << "Exception caught while writing HDF5 data" << std::endl;
- std::cout << e.getDetailMsg() << std::endl;
- return -1;
- }
-
- return 0;
-}
-
-
-
-unsigned long IsmrmrdDataset::getNumberOfAcquisitions()
-{
- unsigned long ret = 0;
-
- if (!linkExists(data_path_.c_str())) {
- std::cerr << "Data path (" << data_path_ << ") does not exist in HDF5 dataset" << std::endl;
- return ret;
- }
-
- if (!dataset_open_) {
- try{
- dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path_.c_str())));
- dataset_open_ = true;
- } catch( Exception& e ) {
- std::cout << "Exception caught while opening HDF5 dataset" << std::endl;
- std::cout << e.getDetailMsg() << std::endl;
- return ret;
- }
- }
-
- try {
- DataSpace dataspace = dataset_->getSpace();
- int rank = dataspace.getSimpleExtentNdims();
- std::vector<hsize_t> dims(rank,0);
- dataspace.getSimpleExtentDims(&dims[0]);
- ret = dims[0];
- } catch (...) {
- std::cout << "Error caught while attempting to access the number of elements in HDF5 file" << std::endl;
- return ret;
- }
-
- return ret;
-}
-
-boost::shared_ptr< Acquisition > IsmrmrdDataset::readAcquisition(unsigned long int index)
-{
- boost::shared_ptr<Acquisition> ret;
-
- if (!linkExists(data_path_.c_str())) {
- std::cerr << "Data path does not exist in HDF5 dataset" << std::endl;
- return ret;
- }
-
-
- boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<AcquisitionHeader_with_data>();
- if (!dataset_open_) {
- try{
- dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path_.c_str())));
- dataset_open_ = true;
- } catch( Exception& e ) {
- std::cout << "Exception caught while opening (creating) HDF5 dataset" << std::endl;
- std::cout << e.getDetailMsg() << std::endl;
- return ret;
- }
- }
-
- try {
- DataSpace dataspace = dataset_->getSpace();
- DataType dtype = dataset_->getDataType();
-
- if (!(dtype == *datatype)) {
- std::cout << "Attempting to open HDF5 dataset with the wrong type" << std::endl;
- return ret;
- }
-
- int rank = dataspace.getSimpleExtentNdims();
- std::vector<hsize_t> dims(rank,0);
- dataspace.getSimpleExtentDims(&dims[0]);
-
- if (dims[0] <= index) {
- std::cout << "Attempting to access non-existing hyperslice in HDF5 dataset" << std::endl;
- return ret;
- }
-
- std::vector<hsize_t> slice_dims(rank,1);
- std::vector<hsize_t> offset(rank,0);
-
- slice_dims[0] = 1;
- offset[0] = index;
-
-
- dataspace.selectHyperslab( H5S_SELECT_SET, &slice_dims[0], &offset[0] );
-
- DataSpace memspace(rank,&slice_dims[0]);
-
- AcquisitionHeader_with_data tmp;
-
- //OK finally ready, now read the data.
- dataset_->read(reinterpret_cast<void*>(&tmp), *datatype, memspace, dataspace, H5P_DEFAULT);
-
- ret = boost::shared_ptr<Acquisition>(new Acquisition());
- ret->setHead(tmp.head);
- //ret->head_ = tmp.head;
- size_t tl = tmp.traj.len;
- size_t dl = tmp.data.len;
- if ((tl != ret->getTraj().size()) || (dl != ret->getData().size())) {
- std::cout << "Header does not match data length in file" << std::endl;
- throw;
- }
- memcpy(const_cast<float*>(&ret->getTraj()[0]), tmp.traj.p, sizeof(float)*tl);
- free(tmp.traj.p); //Avoid memory leak
- memcpy(const_cast<float*>(&ret->getData()[0]), tmp.data.p, sizeof(float)*dl);
- free(tmp.data.p); //Avoid memory leak
-
- } catch (...) {
- std::cout << "Error caught while attempting to read HDF5 file" << std::endl;
- return ret;
- }
-
- return ret;
-
-}
-
-int IsmrmrdDataset::writeHeader(const std::string& xml) {
- std::vector<hsize_t> dims(1,1);
- std::vector<hsize_t> max_dims(1,1);
-
- boost::shared_ptr<DataSet> xml_dataset;
- boost::shared_ptr<DataType> datatype(new StrType(0, H5T_VARIABLE));
- try {
- if (!linkExists(xml_header_path_.c_str())) {
- DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
- xml_dataset = boost::shared_ptr<DataSet>(new DataSet(file_->createDataSet( xml_header_path_.c_str(), *datatype, mspace1)));
- } else {
- xml_dataset = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(xml_header_path_.c_str())));
- DataType mtype = xml_dataset->getDataType();
- if (!(mtype == (*datatype))) {
- std::cout << "Attempting to append XML data to HDF5 dataset with the wrong type" << std::endl;
- return -1;
- }
- }
- DataSpace mspace1 = xml_dataset->getSpace();
- xml_dataset->write(xml,*datatype,mspace1);
-
- } catch( Exception& e ) {
- std::cout << "Exception caught while writing XML Header to HDF5 file" << std::endl;
- std::cout << e.getDetailMsg() << std::endl;
- return -1;
- }
- return 0;
-}
-
-boost::shared_ptr<std::string> IsmrmrdDataset::readHeader()
-{
- boost::shared_ptr<std::string> ret(new std::string(""));
-
- if (!linkExists(xml_header_path_.c_str())) {
- std::cerr << "Path for XML parameters not found in HDF5 file" << std::endl;
- return ret;
- }
-
- try {
- boost::shared_ptr<DataSet> xml_dataset = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(xml_header_path_.c_str())));
- boost::shared_ptr<DataType> datatype(new StrType(0, H5T_VARIABLE));
- DataType dt = xml_dataset->getDataType();
- xml_dataset->read(*ret,dt);
- } catch( Exception& e ) {
- std::cout << "Exception caught while reading XML Header to HDF5 file" << std::endl;
- std::cout << e.getDetailMsg() << std::endl;
- return ret;
- }
-
- return ret;
-}
-
-template <typename T> int IsmrmrdDataset::appendImage(Image<T>& m, const char* varname) {
- ImageHeader_with_data<T> tmp;
- tmp.head = m.getHead();
- tmp.data.len = m.getNumberOfElements();
- tmp.data.p = const_cast<T*>(&m.getData()[0]);
- std::vector<unsigned int> dims(1,1);
- NDArrayContainer<ImageHeader_with_data<T> > cont(dims, &tmp);
- return appendArray<ImageHeader_with_data<T> >(cont, varname);
-}
-
-template <typename T> boost::shared_ptr< Image<T> > IsmrmrdDataset::readImage(const char* varname, unsigned long index)
-{
- boost::shared_ptr< Image<T> > ret(new Image<T>);
-
- boost::shared_ptr<NDArrayContainer<ImageHeader_with_data<T> > > tmp = readArray<ImageHeader_with_data<T> >(varname, index);
-
- if (tmp->elements() != 1) {
- std::cerr << "IsmrmrdDataset::readImage(..): readArray returned an unexpected number of elements (";
- std::cerr << tmp->elements() << "). Should be 1.";
- std::cerr << std::endl;
- return ret;
- }
- //We will copy the header
- ret->setHead(tmp->data_[0].head);
-
- size_t dlen = tmp->data_[0].data.len;
- memcpy (const_cast<T*>(&ret->getData()[0]), tmp->data_[0].data.p, dlen*sizeof(T));
- free(tmp->data_[0].data.p); //Avoid memory leak
- return ret;
-}
-
-boost::shared_ptr< ImageHeader > IsmrmrdDataset::readImageHeader(const char* varname, unsigned long index)
-{
- boost::shared_ptr< ImageHeader > ret(new ImageHeader);
-
- boost::shared_ptr<NDArrayContainer<ImageHeader> > tmp = readArray<ImageHeader>(varname,index);
- if (tmp->elements() != 1) {
- std::cerr << "IsmrmrdDataset::readImageHeader(..): readArray returned an unexpected number of elements (" << tmp->elements() << "). Should be 1." << std::endl;
- return ret;
- }
-
- *ret = tmp->data_[0];
-
- return ret;
-}
-
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image<float>& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image<double>& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image<unsigned short>& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image< std::complex<float> >& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image< std::complex<double> >& m, const char* varname);
-
-template EXPORTISMRMRD boost::shared_ptr< Image<float> > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image<double> > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image<unsigned short> > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image< std::complex<float> > > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image< std::complex<double> > > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-
-int IsmrmrdDataset::appendImageAttrib(std::string& a, const char* varname)
-{
- std::string data_path = groupname_ + std::string("/") + std::string(varname);
-
- boost::shared_ptr<DataSet> dataset;
- boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<std::string>();
-
- std::vector<hsize_t> dims;
- std::vector<hsize_t> max_dims;
- if (!linkExists(data_path.c_str()))
- {
- std::vector<hsize_t> dims(1,1);
- std::vector<hsize_t> max_dims(1,1);
-
- try
- {
- if (createGroupForDataset(groupname_.c_str()) < 0)
- {
- std::cout << "Failed to create group in HDF 5 file." << std::endl;
- return -1;
- }
-
- DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
-
- DSetCreatPropList cparms;
- cparms.setChunk( dims.size(), &dims[0] );
-
- dataset = boost::shared_ptr<DataSet>(new DataSet(file_->createDataSet( data_path.c_str(), *datatype, mspace1, cparms)));
- mspace1 = dataset->getSpace();
-
- DataSpace mspace2( dims.size(), &dims[0] );
-
- std::vector<hsize_t> offset(dims.size());
- mspace1.selectHyperslab(H5S_SELECT_SET, &dims[0], &offset[0]);
- dataset->write( a, *datatype, mspace2, mspace1 );
-
- } catch( Exception& e ) {
- std::cerr << "Exception caught while creating HDF5 dataset" << std::endl;
- std::cerr << e.getDetailMsg() << std::endl;
- return -1;
- }
- }
- else
- {
- try
- { // to determine if the dataset exists in the group
- dataset = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path.c_str())));
-
- DataType mtype = dataset->getDataType();
- if (!(mtype == (*datatype))) {
- std::cout << "Attempting to append data to HDF5 dataset with the wrong type" << std::endl;
- return -1;
- }
-
- std::vector<hsize_t> dims(1,1);
- std::vector<hsize_t> max_dims(1,1);
- DataSpace mspace2( dims.size(), &dims[0] );
-
- DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
- mspace1 = dataset->getSpace();
-
- std::vector<hsize_t> offset(dims.size());
- mspace1.selectHyperslab(H5S_SELECT_SET, &dims[0], &offset[0]);
- dataset->write( a, *datatype, mspace2, mspace1 );
-
- /*DataSpace mspace1 = dataset->getSpace();
- int rank = mspace1.getSimpleExtentNdims();
- std::vector<hsize_t> ddims(rank,0);
- mspace1.getSimpleExtentDims(&ddims[0], NULL);
-
- dims.push_back(1);
- for (unsigned int i = 1; i < ddims.size(); i++)
- {
- dims.push_back(ddims[i]);
- }
-
- std::vector<hsize_t> offset(rank, 0);
- offset[0] = ddims[0];
-
- DataSpace fspace2 = dataset->getSpace();
- fspace2.selectHyperslab( H5S_SELECT_SET, &dims[0], &offset[0] );
-
- DataSpace mspace2( rank, &dims[0] );
-
- dataset->write( a, *datatype, mspace2, fspace2 );*/
-
- }
- catch( FileIException& not_found_error)
- {
- std::cout << "Dataset is not found. At this point, it should have been created!" << std::endl;
- return -1;
- }
- }
- return 0;
-}
-
-HDF5Lock* HDF5Lock::instance()
-{
- if (!instance_) instance_ = new HDF5Lock();
- return instance_;
-}
-
-void HDF5Lock::acquire()
-{
- mutex_.lock();
-}
-
-void HDF5Lock::release()
-{
- mutex_.unlock();
-}
-
-EXPORTISMRMRD HDF5Lock* HDF5Lock::instance_ = NULL;
-
-
-} //End of ISMRMRD namespace
-
diff --git a/ismrmrd_hdf5.h b/ismrmrd_hdf5.h
deleted file mode 100644
index 3e29858..0000000
--- a/ismrmrd_hdf5.h
+++ /dev/null
@@ -1,312 +0,0 @@
-#pragma once
-#ifndef ISMRMRD_HDF5_H
-#define ISMRMRD_HDF5_H
-
-#include "ismrmrd_export.h"
-#include "ismrmrd.h"
-
-#include <fstream>
-#include <typeinfo>
-#include <map>
-#include <string>
-
-#include <boost/shared_ptr.hpp>
-#include <boost/thread.hpp>
-
-
-#include <hdf5.h>
-
-//#ifndef H5_NO_NAMESPACE
-//using namespace H5;
-//#endif
-
-
-namespace ISMRMRD
-{
-
-struct AcquisitionHeader_with_data
-{
- AcquisitionHeader head;
- hvl_t traj;
- hvl_t data;
-};
-
-template <typename T> struct ImageHeader_with_data
-{
- ImageHeader head;
- hvl_t data;
-};
-
-}
-
-
-#include "ismrmrd_hdf5_datatypes.h"
-
-namespace ISMRMRD
-{
-
-
-/**
- * This class provides a simple interface for accessing an ISMRMRD Data Set stored
- * in HDF5 format.
- *
- *
- * A given ISMRMRD dataset if assumed to be stored under one group name in the HDF5 file. To make the datasets consistent,
- * this library enforces that the XML configuration is stored in the variable groupname/xml and the Acquisitions are
- * stored in groupname/data.
- *
- */
-class EXPORTISMRMRD IsmrmrdDataset
-{
-public:
- /**
- * Constructor.
- *
- * @param filename is the full path to HDF5 file used for storing the data set
- * @param groupname is the group name within the HDF5 file used for this data set.
- * @param create_file_if_needed can be used to automatically create the file if needed.
- *
- */
- IsmrmrdDataset(const char* filename, const char* groupname, bool create_file_if_needed = true)
- : filename_(filename)
- , groupname_(groupname)
- , file_open_(false)
- , dataset_open_(false)
- , create_file_if_needed_(create_file_if_needed)
- {
- std::ifstream ifile(filename_.c_str());
- file_exists_ = ifile.is_open();
-
- if (openHDF5File() < 0) {
- std::cerr << "IsmrmrdDataset: Error opening HDF file." << std::endl;
- }
-
- if (!linkExists(groupname_.c_str())) {
- if (createGroupForDataset(groupname_.c_str()) < 0) {
- std::cerr << "IsmrmrdDataset: Error create HDF5 group." << std::endl;
- }
- }
-
- xml_header_path_ = groupname_ + std::string("/xml");
- data_path_ = groupname_ + std::string("/data");
-
- hid_t t;
-
- t = this->type_container_.get_type<float>();
- std::cout << "Type for float: " << t << std::endl;
-
- t = this->type_container_.get_type<double>();
- std::cout << "Type for double: " << t << std::endl;
-
- t = this->type_container_.get_type< std::complex<float> >();
- std::cout << "Type for complex float: " << t << std::endl;
-
- t = this->type_container_.get_type< std::complex<double> >();
- std::cout << "Type for complex double: " << t << std::endl;
-
- t = this->type_container_.get_type< EncodingCounters >();
- std::cout << "Type for EncodingCounters: " << t << std::endl;
-
- t = this->type_container_.get_type< AcquisitionHeader >();
- std::cout << "Type for AcquisitionHeader: " << t << std::endl;
-
- t = this->type_container_.get_type< AcquisitionHeader_with_data >();
- std::cout << "Type for AcquisitionHeader_with_data: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader >();
- std::cout << "Type for ImageHeader: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader_with_data<float> >();
- std::cout << "Type for ImageHeader_with_data<float>: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader_with_data<double> >();
- std::cout << "Type for ImageHeader_with_data<double>: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader_with_data<unsigned short> >();
- std::cout << "Type for ImageHeader_with_data<unsigned short>: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader_with_data<ccomplex_t> >();
- std::cout << "Type for ImageHeader_with_data<ccomplex_t>: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader_with_data<cdouble_complex_t> >();
- std::cout << "Type for ImageHeader_with_data<cdouble_complex_t>: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader_with_data< std::complex<float> > >();
- std::cout << "Type for ImageHeader_with_data< std::complex<float> >: " << t << std::endl;
-
- t = this->type_container_.get_type< ImageHeader_with_data< std::complex<double> > >();
- std::cout << "Type for ImageHeader_with_data< std::complex<double> >: " << t << std::endl;
-
- t = this->type_container_.get_type< std::string >();
- std::cout << "Type for std::string: " << t << std::endl;
- }
-
- /**
- * Closes all references to the underlying HDF5 file.
- *
- * This method does not NEED to be called. It is most useful in
- * a Python interpreter when a dataset instance has not been
- * garbage collected but another process needs to read the HDF5 file.
- */
- void close(void);
-
- /**
- * Appends and NMR/MRI acquisition to the data set.
- *
- * Please consult @See Acquisition class for details.
- */
- int appendAcquisition(Acquisition* a);
-
- /**
- * Reads the acquisition with the specified index from the HDF5 file.
- */
- boost::shared_ptr<Acquisition> readAcquisition(unsigned long index = 0);
-
- /**
- * Return the number of acquisitions in the dataset.
- */
- unsigned long getNumberOfAcquisitions();
-
- /**
- * Writes the xml string to the XML header field.
- *
- * @warning There is no check of whether the string is a valid XML document at this point.
- *
- */
- int writeHeader(const std::string& xml);
-
- /**
- * Reads the XML configuration header from the data set.
- */
- boost::shared_ptr<std::string> readHeader();
-
- /**
- * Appends an Image to the variable named varname.
- *
- * With this function, the image data is stored as a field in the variable (as a one dimensional array)
- * and when reading it, it would need to be reshaped according to the image dimensions.
- *
- * If you would like to store header and image data separately for easy viewing and reading in other applications,
- * please use the appendImageHeader and appendArray functions to store the data in separate variables.
- *
- */
- template <typename T> int appendImage(Image<T>& m, const char* varname);
-
- /**
- * Reads an image stored with appendImage above. The index indicates which image to read.
- */
- template <typename T> boost::shared_ptr< Image<T> > readImage(const char* varname, unsigned long index = 0);
-
- /**
- * This function appends only the ImageHeader to the data set. Typically used in conjunction with
- * appendArray to store data and header in separate variables.
- *
- */
- int appendImageHeader(ImageHeader& h, const char* varname) {
- std::vector<unsigned int> dims(1,1);
- NDArrayContainer<ImageHeader> tmp(dims,&h);
- return appendArray<ImageHeader>(tmp,varname);
- }
-
- /**
- * Returns the image header with the indicated index.
- */
- boost::shared_ptr< ImageHeader > readImageHeader(const char* varname, unsigned long index = 0);
-
- /**
- * Appends a generic array (which can contain simple data elements such as float, double, etc).
- *
- * In the file the variable (with name varname) will contain a multidimensional array with one
- * more dimension than the array in a. The first dimension can expand and when new arrays are appended the
- * first dimension will grow accordingly.
- *
- */
- template <typename T> int appendArray(NDArrayContainer<T>& a, const char* varname);
-
- /**
- * Appends an array directly without using the NDArrayContainer class.
- *
- */
- template <typename T> int appendArray(std::vector<unsigned int>& dimensions, T* data, const char* varname) {
- NDArrayContainer<T> tmp(dimensions, data);
- return appendArray<T>(tmp,varname);
- }
-
- /**
- * Reads a multi-dimensional array from the data file.
- */
- template <typename T> boost::shared_ptr< NDArrayContainer<T> > readArray(const char* varname, unsigned long index = 0);
-
-
- /**
- * This function appends the meta attribute information to the data set. The meta attributes are stored as an xml file.
- */
- int appendImageAttrib(std::string& a, const char* varname);
-
-protected:
- int openHDF5File();
- bool linkExists(const char* name);
- int createGroupForDataset(const char* name);
-
- bool fileExists() {
- return file_exists_;
- }
-
-
- std::string filename_;
- std::string groupname_;
- std::string xml_header_path_;
- std::string data_path_;
-
- bool file_open_;
- bool file_exists_;
- bool create_file_if_needed_;
- bool dataset_open_;
-
- boost::shared_ptr<H5File> file_;
- boost::shared_ptr<DataSet> dataset_;
-
- IsmrmrdHDF5TypeContainer type_container_;
-};
-
-/**
- * Convenience class to provide thread-safe access to HDF5 in cases
- * where that is not compiled into the HDF5 library.
- */
-class EXPORTISMRMRD HDF5Lock
-{
-
-public:
- static HDF5Lock* instance();
-
- void acquire();
- void release();
-
-protected:
- HDF5Lock()
- : mutex_() { }
-
- virtual ~HDF5Lock() { }
-
- static HDF5Lock* instance_;
-
- boost::mutex mutex_;
-};
-
-class HDF5Exclusive
-{
-public:
- HDF5Exclusive() {
- HDF5Lock::instance()->acquire();
- }
-
- ~HDF5Exclusive() {
- HDF5Lock::instance()->release();
- }
-
-};
-
-
-} //end of ISMRMRD namespace
-
-#endif //ISMRMRD_HDF5_H
diff --git a/ismrmrd_hdf5_datatypes.h b/ismrmrd_hdf5_datatypes.h
deleted file mode 100644
index c57df8f..0000000
--- a/ismrmrd_hdf5_datatypes.h
+++ /dev/null
@@ -1,346 +0,0 @@
-#pragma once
-#ifndef ISMRMRD_HDF5_DATATYPES_H_
-#define ISMRMRD_HDF5_DATATYPES_H_
-
-#include "ismrmrd.h"
-
-#include <hdf5.h>
-#include <boost/shared_ptr.hpp>
-
-
-#include <vector>
-#include <complex>
-#include <string>
-
-//#ifndef H5_NO_NAMESPACE
-// using namespace H5;
-//#endif
-
-namespace ISMRMRD
-{
-
- /* HDF5 C Interface (begin) */
-
- class IsmrmrdHDF5TypeContainer {
-
- public:
-
- ~IsmrmrdHDF5TypeContainer() {
- std::map<const std::type_info*, hid_t>::iterator it = hdf5_type_map_.begin();
- while (it != hdf5_type_map_.end()) {
- H5Tclose(it->second);
- it++;
- }
- it = hdf5_vlen_type_map_.begin();
- while (it != hdf5_vlen_type_map_.end()) {
- H5Tclose(it->second);
- it++;
- }
-
- }
-
- template <typename T> hid_t get_type() {
- std::map<const std::type_info*, hid_t>::iterator it = hdf5_type_map_.find(&typeid(T));
- if (it != hdf5_type_map_.end()) {
- return it->second;
- } else {
- hid_t t = this->getIsmrmrdHDF5Type<T>();
- hdf5_type_map_[&typeid(T)] = t;
- return t;
- }
- }
-
- template <typename T, int N> hid_t get_array_type() {
- std::map<const std::type_info*, hid_t>::iterator it = hdf5_type_map_.find(&typeid( T[N] ));
- if (it != hdf5_type_map_.end()) {
- return it->second;
- } else {
- hid_t t = this->getIsmrmrdHDF5ArrayType<T,N>();
- hdf5_type_map_[&typeid(T[N])] = t;
- return t;
- }
- }
-
- template <typename T> hid_t get_vlen_type() {
- std::map<const std::type_info*, hid_t>::iterator it = hdf5_vlen_type_map_.find(&typeid(T));
- if (it != hdf5_vlen_type_map_.end()) {
- return it->second;
- } else {
- hid_t t = this->getIsmrmrdHDF5VLenType<T>();
- hdf5_vlen_type_map_[&typeid(T)] = t;
- return t;
- }
- }
-
-
- protected:
- struct compare_typeinfo {
- bool operator ()(const std::type_info* a, const std::type_info* b) const {
- return a->before(*b);
- }
- };
-
- std::map<const std::type_info*, hid_t, compare_typeinfo> hdf5_type_map_;
- std::map<const std::type_info*, hid_t, compare_typeinfo> hdf5_vlen_type_map_;
- template <typename T> hid_t getIsmrmrdHDF5Type();
- template <typename T, int N> hid_t getIsmrmrdHDF5ArrayType();
- template <typename T> hid_t getIsmrmrdHDF5VLenType();
-
- }; //class IsmrmrdHDF5TypeContainer
-
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<float>() {
- return H5Tcopy(H5T_NATIVE_FLOAT);
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<double>() {
- return H5Tcopy(H5T_NATIVE_DOUBLE);
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<char>() {
- return H5Tcopy(H5T_NATIVE_CHAR);;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<unsigned short>() {
- return H5Tcopy(H5T_NATIVE_USHORT);;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type< std::complex<float> >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(std::complex<float>));
- H5Tinsert(t, "real", 0, H5T_NATIVE_FLOAT);
- H5Tinsert(t, "imag", sizeof(float), H5T_NATIVE_FLOAT);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type< std::complex<double> >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(std::complex<double>));
- H5Tinsert(t, "real", 0, H5T_NATIVE_DOUBLE);
- H5Tinsert(t, "imag", sizeof(double), H5T_NATIVE_DOUBLE);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5ArrayType< uint16_t, 3 >() {
- std::vector<hsize_t> dims(1,3);
- hid_t t = H5Tarray_create(H5T_NATIVE_UINT16, 1, &dims[0]);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5ArrayType< uint16_t, ISMRMRD_USER_INTS >() {
- std::vector<hsize_t> dims(1,ISMRMRD_USER_INTS);
- hid_t t = H5Tarray_create(H5T_NATIVE_UINT16, 1, &dims[0]);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5ArrayType< uint32_t, 3 >() { //TODO: The 3 should be replace with ISMRMRD_PHYS_TIME_STAMPS when that is corrected
- std::vector<hsize_t> dims(1,3);//TODO: Replace when header is updated
- hid_t t = H5Tarray_create(H5T_NATIVE_UINT32, 1, &dims[0]);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5ArrayType< int32_t, ISMRMRD_USER_INTS >() {
- std::vector<hsize_t> dims(1,ISMRMRD_USER_INTS);
- hid_t t = H5Tarray_create(H5T_NATIVE_INT32, 1, &dims[0]);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5ArrayType< uint64_t, ISMRMRD_CHANNEL_MASKS >() {
- std::vector<hsize_t> dims(1,ISMRMRD_CHANNEL_MASKS);
- hid_t t = H5Tarray_create(H5T_NATIVE_UINT64, 1, &dims[0]);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5ArrayType< float, ISMRMRD_POSITION_LENGTH >() {
- std::vector<hsize_t> dims(1,ISMRMRD_POSITION_LENGTH);
- hid_t t = H5Tarray_create(H5T_NATIVE_FLOAT, 1, &dims[0]);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5ArrayType< float, ISMRMRD_USER_FLOATS >() {
- std::vector<hsize_t> dims(1,ISMRMRD_USER_FLOATS);
- hid_t t = H5Tarray_create(H5T_NATIVE_FLOAT, 1, &dims[0]);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<EncodingCounters>() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(EncodingCounters));
- H5Tinsert(t, "kspace_encode_step_1", HOFFSET(EncodingCounters, kspace_encode_step_1), H5T_NATIVE_UINT16);
- H5Tinsert(t, "kspace_encode_step_2", HOFFSET(EncodingCounters, kspace_encode_step_2), H5T_NATIVE_UINT16);
- H5Tinsert(t, "average", HOFFSET(EncodingCounters, average), H5T_NATIVE_UINT16);
- H5Tinsert(t, "slice", HOFFSET(EncodingCounters, slice), H5T_NATIVE_UINT16);
- H5Tinsert(t, "contrast", HOFFSET(EncodingCounters, contrast), H5T_NATIVE_UINT16);
- H5Tinsert(t, "phase", HOFFSET(EncodingCounters, phase), H5T_NATIVE_UINT16);
- H5Tinsert(t, "repetition", HOFFSET(EncodingCounters, repetition), H5T_NATIVE_UINT16);
- H5Tinsert(t, "set", HOFFSET(EncodingCounters, set), H5T_NATIVE_UINT16);
- H5Tinsert(t, "segment", HOFFSET(EncodingCounters, segment), H5T_NATIVE_UINT16);
- H5Tinsert(t, "user", HOFFSET(EncodingCounters, user), get_array_type< uint16_t, ISMRMRD_USER_INTS >());
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<AcquisitionHeader>() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(AcquisitionHeader));
- H5Tinsert(t,"version", HOFFSET(AcquisitionHeader, version), H5T_NATIVE_UINT16);
- H5Tinsert(t,"flags", HOFFSET(AcquisitionHeader, flags), H5T_NATIVE_UINT64);
- H5Tinsert(t, "measurement_uid", HOFFSET(AcquisitionHeader, measurement_uid), H5T_NATIVE_UINT32);
- H5Tinsert(t, "scan_counter", HOFFSET(AcquisitionHeader, scan_counter), H5T_NATIVE_UINT32);
- H5Tinsert(t, "acquisition_time_stamp", HOFFSET(AcquisitionHeader, acquisition_time_stamp), H5T_NATIVE_UINT32);
- H5Tinsert(t, "physiology_time_stamp", HOFFSET(AcquisitionHeader, physiology_time_stamp), get_array_type<uint32_t,3>()); //TODO: should be get_array_type<uint32_t,ISMRMRD_PHYS_STAMPS>()
- H5Tinsert(t, "number_of_samples", HOFFSET(AcquisitionHeader, number_of_samples), H5T_NATIVE_UINT16);
- H5Tinsert(t, "available_channels", HOFFSET(AcquisitionHeader, available_channels), H5T_NATIVE_UINT16);
- H5Tinsert(t, "active_channels", HOFFSET(AcquisitionHeader, active_channels), H5T_NATIVE_UINT16);
- H5Tinsert(t, "channel_mask", HOFFSET(AcquisitionHeader, channel_mask), get_array_type<uint64_t,ISMRMRD_CHANNEL_MASKS>());
- H5Tinsert(t, "discard_pre", HOFFSET(AcquisitionHeader, discard_pre), H5T_NATIVE_UINT16);
- H5Tinsert(t, "discard_post", HOFFSET(AcquisitionHeader, discard_post), H5T_NATIVE_UINT16);
- H5Tinsert(t, "center_sample", HOFFSET(AcquisitionHeader, center_sample), H5T_NATIVE_UINT16);
- H5Tinsert(t, "encoding_space_ref", HOFFSET(AcquisitionHeader, encoding_space_ref), H5T_NATIVE_UINT16);
- H5Tinsert(t, "trajectory_dimensions", HOFFSET(AcquisitionHeader, trajectory_dimensions), H5T_NATIVE_UINT16);
- H5Tinsert(t, "sample_time_us", HOFFSET(AcquisitionHeader, sample_time_us), H5T_NATIVE_FLOAT);
- H5Tinsert(t, "position", HOFFSET(AcquisitionHeader, position), get_array_type<float,ISMRMRD_POSITION_LENGTH>());
- H5Tinsert(t, "read_dir", HOFFSET(AcquisitionHeader, read_dir), get_array_type<float,ISMRMRD_DIRECTION_LENGTH>());
- H5Tinsert(t, "phase_dir", HOFFSET(AcquisitionHeader, phase_dir), get_array_type<float,ISMRMRD_DIRECTION_LENGTH>());
- H5Tinsert(t, "slice_dir", HOFFSET(AcquisitionHeader, slice_dir), get_array_type<float,ISMRMRD_DIRECTION_LENGTH>());
- H5Tinsert(t, "patient_table_position", HOFFSET(AcquisitionHeader, patient_table_position), get_array_type<float,ISMRMRD_DIRECTION_LENGTH>());
- H5Tinsert(t, "idx", HOFFSET(AcquisitionHeader, idx), get_type<EncodingCounters>());
- H5Tinsert(t, "user_int", HOFFSET(AcquisitionHeader, user_int), get_array_type<int32_t,ISMRMRD_USER_INTS>());
- H5Tinsert(t, "user_float", HOFFSET(AcquisitionHeader, user_float), get_array_type<float,ISMRMRD_USER_FLOATS>());
- return t;
- }
-
- struct ccomplex_t
- {
- float real;
- float imag;
- };
-
- struct cdouble_complex_t
- {
- double real;
- double imag;
- };
-
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type< ccomplex_t >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(ccomplex_t));
- H5Tinsert(t, "real", HOFFSET(ccomplex_t, real), H5T_NATIVE_FLOAT);
- H5Tinsert(t, "imag", HOFFSET(ccomplex_t, imag), H5T_NATIVE_FLOAT);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type< cdouble_complex_t >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(cdouble_complex_t));
- H5Tinsert(t, "real", HOFFSET(cdouble_complex_t, real), H5T_NATIVE_FLOAT);
- H5Tinsert(t, "imag", HOFFSET(cdouble_complex_t, imag), H5T_NATIVE_FLOAT);
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5VLenType< float >() {
- return H5Tvlen_create(H5T_NATIVE_FLOAT);
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5VLenType< double >() {
- return H5Tvlen_create(H5T_NATIVE_DOUBLE);
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5VLenType< ccomplex_t >() {
- return H5Tvlen_create(get_type<ccomplex_t>());
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5VLenType< cdouble_complex_t >() {
- return H5Tvlen_create(get_type<cdouble_complex_t>());
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5VLenType< uint16_t >() {
- return H5Tvlen_create(H5T_NATIVE_UINT16);
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<AcquisitionHeader_with_data>() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(AcquisitionHeader_with_data));
- H5Tinsert(t, "head", HOFFSET(AcquisitionHeader_with_data,head), get_type<AcquisitionHeader>());
- H5Tinsert(t, "traj", HOFFSET(AcquisitionHeader_with_data,traj), get_vlen_type<float>());
- H5Tinsert(t, "data", HOFFSET(AcquisitionHeader_with_data,data), get_vlen_type< ccomplex_t>());
- return t;
- }
-
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader>() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(ImageHeader));
-
- H5Tinsert(t, "version", HOFFSET(ImageHeader, version), H5T_NATIVE_UINT16);
- H5Tinsert(t, "flags", HOFFSET(ImageHeader, flags), H5T_NATIVE_UINT64);
- H5Tinsert(t, "measurement_uid", HOFFSET(ImageHeader, measurement_uid), H5T_NATIVE_UINT32);
- H5Tinsert(t, "matrix_size", HOFFSET(ImageHeader, matrix_size), get_array_type<uint16_t,3>());
- H5Tinsert(t, "field_of_view", HOFFSET(ImageHeader, field_of_view), get_array_type<float, ISMRMRD_POSITION_LENGTH>());
- H5Tinsert(t, "channels", HOFFSET(ImageHeader, channels), H5T_NATIVE_UINT16);
- H5Tinsert(t, "position", HOFFSET(ImageHeader, position), get_array_type<float, ISMRMRD_POSITION_LENGTH>());
- H5Tinsert(t, "read_dir", HOFFSET(ImageHeader, read_dir), get_array_type<float, ISMRMRD_DIRECTION_LENGTH>());
- H5Tinsert(t, "phase_dir", HOFFSET(ImageHeader, phase_dir), get_array_type<float, ISMRMRD_DIRECTION_LENGTH>());
- H5Tinsert(t, "slice_dir", HOFFSET(ImageHeader, slice_dir), get_array_type<float, ISMRMRD_DIRECTION_LENGTH>());
- H5Tinsert(t, "patient_table_position", HOFFSET(ImageHeader, patient_table_position), get_array_type<float, ISMRMRD_POSITION_LENGTH>());
- H5Tinsert(t, "average", HOFFSET(ImageHeader, average), H5T_NATIVE_UINT16);
- H5Tinsert(t, "slice", HOFFSET(ImageHeader, slice), H5T_NATIVE_UINT16);
- H5Tinsert(t, "contrast", HOFFSET(ImageHeader, contrast), H5T_NATIVE_UINT16);
- H5Tinsert(t, "phase", HOFFSET(ImageHeader, phase), H5T_NATIVE_UINT16);
- H5Tinsert(t, "repetition", HOFFSET(ImageHeader, repetition), H5T_NATIVE_UINT16);
- H5Tinsert(t, "set", HOFFSET(ImageHeader, set), H5T_NATIVE_UINT16);
- H5Tinsert(t, "acquisition_time_stamp", HOFFSET(ImageHeader, acquisition_time_stamp), H5T_NATIVE_UINT32);
- H5Tinsert(t, "physiology_time_stamp", HOFFSET(ImageHeader, physiology_time_stamp), get_array_type<uint32_t, 3>()); //TODO: get_array_type<uint32_t, ISMRMRD_PHYS_STAMPS>()
- H5Tinsert(t, "image_data_type", HOFFSET(ImageHeader, image_data_type), H5T_NATIVE_UINT16);
- H5Tinsert(t, "image_type", HOFFSET(ImageHeader, image_type), H5T_NATIVE_UINT16);
- H5Tinsert(t, "image_index", HOFFSET(ImageHeader, image_index), H5T_NATIVE_UINT16);
- H5Tinsert(t, "image_series_index", HOFFSET(ImageHeader, image_series_index), H5T_NATIVE_UINT16);
- H5Tinsert(t, "user_int", HOFFSET(ImageHeader, user_int), get_array_type<int32_t, ISMRMRD_USER_INTS>());
- H5Tinsert(t, "user_float", HOFFSET(ImageHeader, user_float), get_array_type<float, ISMRMRD_USER_FLOATS>());
- return t;
-}
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data<float> >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(ImageHeader_with_data<float>));
- H5Tinsert(t, "head", HOFFSET(ImageHeader_with_data<float>,head), get_type<ImageHeader>());
- H5Tinsert(t, "data", HOFFSET(ImageHeader_with_data<float>,data), get_vlen_type<float>());
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data<double> >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(ImageHeader_with_data<double>));
- H5Tinsert(t, "head", HOFFSET(ImageHeader_with_data<double>,head), get_type<ImageHeader>());
- H5Tinsert(t, "data", HOFFSET(ImageHeader_with_data<double>,data), get_vlen_type<double>());
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data<unsigned short> >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(ImageHeader_with_data<unsigned short>));
- H5Tinsert(t, "head", HOFFSET(ImageHeader_with_data<unsigned short>,head), get_type<ImageHeader>());
- H5Tinsert(t, "data", HOFFSET(ImageHeader_with_data<unsigned short>,data), get_vlen_type<unsigned short>());
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data<ccomplex_t> >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(ImageHeader_with_data<ccomplex_t>));
- H5Tinsert(t, "head", HOFFSET(ImageHeader_with_data<ccomplex_t>,head), get_type<ImageHeader>());
- H5Tinsert(t, "data", HOFFSET(ImageHeader_with_data<ccomplex_t>,data), get_vlen_type<ccomplex_t>());
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data<cdouble_complex_t> >() {
- hid_t t = H5Tcreate(H5T_COMPOUND, sizeof(ImageHeader_with_data<cdouble_complex_t>));
- H5Tinsert(t, "head", HOFFSET(ImageHeader_with_data<cdouble_complex_t>,head), get_type<ImageHeader>());
- H5Tinsert(t, "data", HOFFSET(ImageHeader_with_data<cdouble_complex_t>,data), get_vlen_type<cdouble_complex_t>());
- return t;
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data< std::complex<float> > >() {
- return IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data<ccomplex_t> >();
- }
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data< std::complex<double> > >() {
- return IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type<ImageHeader_with_data<cdouble_complex_t> >();
- }
-
-
- template <> inline hid_t IsmrmrdHDF5TypeContainer::getIsmrmrdHDF5Type< std::string >() {
- hid_t t = H5Tcopy (H5T_C_S1);
- H5Tset_size (t,H5T_VARIABLE);
- return t;
- }
- /* HDF5 C Interface (end) */
-
-#endif /* ISMRMRD_HDF5_DATATYPES_H_ */
diff --git a/ismrmrd_xsd_export.h b/ismrmrd_xsd_export.h
deleted file mode 100644
index cbb30de..0000000
--- a/ismrmrd_xsd_export.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * ismrmrd_xsd_export.h
- *
- * Created on: Sep 13, 2012
- * Author: hansenms
- */
-
-#ifndef ISMRMRD_XSD_EXPORT_H_
-#define ISMRMRD_XSD_EXPORT_H_
-
-#if defined (WIN32)
-#if defined (ismrmrd_xsd_EXPORTS)
-#define EXPORTISMRMRDXSD __declspec(dllexport)
-#else
-#define EXPORTISMRMRDXSD __declspec(dllimport)
-#endif
-#else
-#define EXPORTISMRMRDXSD
-#endif
-
-#endif /* ISMRMRD_XSD_EXPORT_H_ */
diff --git a/xml/ismrmrd_meta.h b/xml/ismrmrd_meta.h
index 477c2aa..1bb87fd 100644
--- a/xml/ismrmrd_meta.h
+++ b/xml/ismrmrd_meta.h
@@ -1,7 +1,7 @@
#ifndef ISMRMRDMETA_H
#define ISMRMRDMETA_H
-#include "ismrmrd_xml_export.h"
+#include "ismrmrd_export.h"
#include <string>
#include <sstream>
@@ -243,8 +243,8 @@ namespace ISMRMRD
template void MetaContainer::append<double>(const char* name, double);
*/
- EXPORTISMRMRDXML void deserialize(const char* xml, MetaContainer& h);
- EXPORTISMRMRDXML void serialize(MetaContainer& h, std::ostream& o);
+ EXPORTISMRMRD void deserialize(const char* xml, MetaContainer& h);
+ EXPORTISMRMRD void serialize(MetaContainer& h, std::ostream& o);
}
diff --git a/xml/ismrmrd_xml.h b/xml/ismrmrd_xml.h
index 1650c7b..b3786f4 100644
--- a/xml/ismrmrd_xml.h
+++ b/xml/ismrmrd_xml.h
@@ -1,7 +1,7 @@
#ifndef ISMRMRDXML_H
#define ISMRMRDXML_H
-#include "ismrmrd_xml_export.h"
+#include "ismrmrd_export.h"
#include <cstddef>
@@ -286,8 +286,8 @@ namespace ISMRMRD
- EXPORTISMRMRDXML void deserialize(const char* xml, IsmrmrdHeader& h);
- EXPORTISMRMRDXML void serialize(const IsmrmrdHeader& h, std::ostream& o);
+ EXPORTISMRMRD void deserialize(const char* xml, IsmrmrdHeader& h);
+ EXPORTISMRMRD void serialize(const IsmrmrdHeader& h, std::ostream& o);
}
#endif //ISMRMRDXML_H
diff --git a/xml/ismrmrd_xml_export.h b/xml/ismrmrd_xml_export.h
deleted file mode 100644
index 2ee3e08..0000000
--- a/xml/ismrmrd_xml_export.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef ISMRMRD_XML_EXPORT_H_
-#define ISMRMRD_XML_EXPORT_H_
-
-#if defined (WIN32)
-#if defined (ismrmrd_xml_EXPORTS)
-#define EXPORTISMRMRDXML __declspec(dllexport)
-#else
-#define EXPORTISMRMRDXML __declspec(dllimport)
-#endif
-#else
-#define EXPORTISMRMRDXML
-#endif
-
-#endif /* ISMRMRD_XML_EXPORT_H_ */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/ismrmrd.git
More information about the debian-science-commits
mailing list