This program reads a Cifti file from argv[1], and writes it out to argv[2] with a second CiftiFile object. It uses on-disk reading and writing, so DO NOT have both filenames point to the same file, CiftiFile truncates without any warning when told to write to an existing file.
#include "CiftiFile.h"
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
if (argc < 3)
{
cout << "usage: " << argv[0] << " <input cifti> <output cifti> [<endian>]" << endl;
cout << " rewrite the input cifti file to the output filename." << endl;
cout << " endian can be 'LITTLE' or 'BIG', and uses native endianness if not specified" << endl;
return 1;
}
CiftiFile::ENDIAN myEndian = CiftiFile::NATIVE;
if (argc > 3)
{
if (AString(argv[3]) == "LITTLE")
{
myEndian = CiftiFile::LITTLE;
} else if (AString(argv[3]) == "BIG") {
myEndian = CiftiFile::BIG;
} else {
cerr << "unrecognized endianness string: " << argv[3] << endl;
return 1;
}
}
try
{
CiftiFile inputFile(argv[1]);
CiftiFile outputFile;
outputFile.setWritingFile(argv[2], CiftiVersion(), myEndian);
outputFile.setCiftiXML(inputFile.getCiftiXML());
const vector<int64_t>& dims = inputFile.getDimensions();
vector<float> scratchRow(dims[0]);
for (MultiDimIterator<int64_t> iter = inputFile.getIteratorOverRows(); !iter.atEnd(); ++iter)
{
inputFile.getRow(scratchRow.data(), *iter);
outputFile.setRow(scratchRow.data(), *iter);
}
outputFile.writeFile(argv[2]);
} catch (CiftiException& e) {
cerr << "Caught CiftiException: " + AString_to_std_string(e.whatString()) << endl;
return 1;
}
return 0;
}
namespace for all CiftiLib functionality
Definition: CiftiBrainModelsMap.h:42