CiftiLib
A C++ library for CIFTI-2 and CIFTI-1 files
|
1 #ifndef __CIFTI_FILE_H__
2 #define __CIFTI_FILE_H__
31 #include "Common/AString.h"
32 #include "Common/CiftiException.h"
33 #include "Common/MultiDimIterator.h"
34 #include "Cifti/CiftiXML.h"
35 #include "Nifti/nifti1.h"
37 #include "boost/shared_ptr.hpp"
60 explicit CiftiFile(
const AString &fileName);
63 void openFile(
const AString& fileName);
77 const CiftiXML& getCiftiXML()
const {
return m_xml; }
78 bool isInMemory()
const;
81 void getRow(
float* dataOut,
const std::vector<int64_t>& indexSelect,
const bool& tolerateShortRead =
false)
const;
82 const std::vector<int64_t>& getDimensions()
const {
return m_dims; }
91 void getColumn(
float* dataOut,
const int64_t& index)
const;
93 void setCiftiXML(
const CiftiXML& xml,
const bool useOldMetadata =
true);
94 void setRow(
const float* dataIn,
const std::vector<int64_t>& indexSelect);
97 void setColumn(
const float* dataIn,
const int64_t& index);
100 void getRow(
float* dataOut,
const int64_t& index,
const bool& tolerateShortRead =
false)
const;
103 void setRow(
const float* dataIn,
const int64_t& index);
107 void setWritingDataTypeAndScaling(
const int16_t& type,
const double& minval,
const double& maxval);
113 virtual void getRow(
float* dataOut,
const std::vector<int64_t>& indexSelect,
const bool& tolerateShortRead)
const = 0;
114 virtual void getColumn(
float* dataOut,
const int64_t& index)
const = 0;
115 virtual bool isInMemory()
const {
return false; }
122 virtual void setRow(
const float* dataIn,
const std::vector<int64_t>& indexSelect) = 0;
123 virtual void setColumn(
const float* dataIn,
const int64_t& index) = 0;
124 virtual void close() {}
128 std::vector<int64_t> m_dims;
129 boost::shared_ptr<WriteImplInterface> m_writingImpl;
130 boost::shared_ptr<ReadImplInterface> m_readingImpl;
131 AString m_writingFile;
135 bool m_doWriteScaling;
136 int16_t m_writingDataType;
137 double m_minScalingVal, m_maxScalingVal;
139 void verifyWriteImpl();
145 #endif //__CIFTI_FILE_H__
void writeFile(const AString &fileName, const CiftiVersion &writingVersion=CiftiVersion(), const ENDIAN &endian=ANY)
does nothing if filename, version, and effective endianness match file currently open,...
Definition: CiftiFile.cxx:189
Definition: CiftiFile.h:110
void convertToInMemory()
reads file into memory, closes file
Definition: CiftiFile.cxx:235
void setColumn(const float *dataIn, const int64_t &index)
for 2D only, will be slow if on disk!
Definition: CiftiFile.cxx:301
const int32_t NIFTI_TYPE_FLOAT32
Definition: nifti1.h:551
class for retrieving and setting mapping information of cifti files
Definition: CiftiXML.h:48
void getColumn(float *dataOut, const int64_t &index) const
for 2D only, will be slow if on disk!
Definition: CiftiFile.cxx:266
void getRow(float *dataOut, const std::vector< int64_t > &indexSelect, const bool &tolerateShortRead=false) const
the tolerateShortRead parameter is useful for on-disk writing when it is easiest to do RMW multiple t...
Definition: CiftiFile.cxx:259
void setWritingFile(const AString &fileName, const CiftiVersion &writingVersion=CiftiVersion(), const ENDIAN &endian=NATIVE)
starts on-disk writing
Definition: CiftiFile.cxx:163
Definition: CiftiFile.h:119
void openFile(const AString &fileName)
starts on-disk reading
Definition: CiftiFile.cxx:153
Definition: MultiDimIterator.h:38
MultiDimIterator< int64_t > getIteratorOverRows() const
convenience function for iterating over arbitrary numbers of dimensions
Definition: CiftiFile.h:85
void close()
closes the underlying file to flush it, so that exceptions can be thrown
Definition: CiftiFile.cxx:219
class for reading and writing cifti files
Definition: CiftiFile.h:45
Definition: CiftiVersion.h:37
namespace for all CiftiLib functionality
Definition: CiftiBrainModelsMap.h:41
void setWritingDataTypeNoScaling(const int16_t &type=NIFTI_TYPE_FLOAT32)
data type and scaling options - should be set before setRow, etc, to avoid rewriting of file
Definition: CiftiFile.cxx:171