diff --git a/fslcpgeom.cc b/fslcpgeom.cc index 41595b03b4dfd2ffd3375322cf59e73c7836049d..3779c7437649608b577ebe7886d5887648362e43 100755 --- a/fslcpgeom.cc +++ b/fslcpgeom.cc @@ -17,12 +17,11 @@ void print_usage(const string& progname) int avwcpgeom_main(int argc, char *argv[]) { - NiftiIO reader; NiftiHeader headerSrc,headerDest; string fullDestinationName(return_validimagefilename(string(argv[2]))); try { - headerSrc=reader.loadHeader(return_validimagefilename(string(argv[1]))); - headerDest=reader.loadHeader(fullDestinationName); + headerSrc=loadHeader(return_validimagefilename(string(argv[1]))); + headerDest=loadHeader(fullDestinationName); } catch (...) { perror("Error opening files"); return EXIT_FAILURE; @@ -38,7 +37,7 @@ int avwcpgeom_main(int argc, char *argv[]) } vector<NiftiExtension> extensions; - reader.loadImage(fullDestinationName,buffer,extensions,false); + loadImage(fullDestinationName,buffer,extensions,false); headerDest.sformCode = headerSrc.sformCode; headerDest.setSForm(headerSrc.getSForm()); @@ -49,7 +48,7 @@ int avwcpgeom_main(int argc, char *argv[]) if (copydim) headerDest.dim=headerSrc.dim; - reader.saveImage(fullDestinationName,buffer,extensions,headerDest,FslIsCompressedFileType(fslFileType(fullDestinationName))); + saveImage(fullDestinationName,buffer,extensions,headerDest,FslIsCompressedFileType(fslFileType(fullDestinationName))); return 0; } diff --git a/fslcreatehd.cc b/fslcreatehd.cc index ce97d36dd85c7279829b67e1e47152b2988dcf9a..c102f89847f11ec6152e56ac88ea784a68d9d459 100755 --- a/fslcreatehd.cc +++ b/fslcreatehd.cc @@ -23,10 +23,136 @@ void print_usage(const string& progname) } +NiftiHeader headerFromXML(vector<string> XMLreport) + { + NiftiHeader header; + int xyzUnits(0); + int tUnits(0); + int freqDim(0); + int phaseDim(0); + int sliceDim(0); + for(unsigned int setting=1;setting<XMLreport.size()-1;setting++) { + //Tokenise + size_t pos1=XMLreport[setting].find_first_of(" ")+2; + size_t pos2=XMLreport[setting].find_first_of(" ",pos1); + size_t pos3=XMLreport[setting].find_first_of('\'')+1; + size_t pos4=XMLreport[setting].find_last_of('\''); + string field(XMLreport[setting].substr(pos1,pos2-pos1)); + string value(XMLreport[setting].substr(pos3,pos4-pos3)); + istringstream values(value); + if ( field == "datatype" ) { + values >> header.datatype; + } else if ( field == "image_offset" ) { + values >> header.vox_offset; + } else if ( field == "sto_xyz_matrix" ) { + mat44 sForm; + for ( int i=0;i<4;i++ ) + for ( int j=0;j<4;j++ ) + values >> sForm.m[i][j]; + header.setSForm(sForm); + } else if ( field == "ndim" ) { + values >> header.dim[0]; + } else if ( field == "nx" ) { + values >> header.dim[1]; + } else if ( field == "ny" ) { + values >> header.dim[2]; + } else if ( field == "nz" ) { + values >> header.dim[3]; + } else if ( field == "nt" ) { + values >> header.dim[4]; + } else if ( field == "nu" ) { + values >> header.dim[5]; + } else if ( field == "nv" ) { + values >> header.dim[6]; + } else if ( field == "nw" ) { + values >> header.dim[7]; + }else if ( field == "qfac" ) { + values >> header.pixdim[0]; + } else if ( field == "dx" ) { + values >> header.pixdim[1]; + } else if ( field == "dy" ) { + values >> header.pixdim[2]; + } else if ( field == "dz" ) { + values >> header.pixdim[3]; + } else if ( field == "dt" ) { + values >> header.pixdim[4]; + } else if ( field == "du" ) { + values >> header.pixdim[5]; + } else if ( field == "dv" ) { + values >> header.pixdim[6]; + } else if ( field == "dw" ) { + values >> header.pixdim[7]; + } else if ( field == "cal_min" ) { + values >> header.cal_min; + } else if ( field == "cal_max" ) { + values >> header.cal_max; + } else if ( field == "scl_slope" ) { + values >> header.sclSlope; + } else if ( field == "scl_inter" ) { + values >> header.sclInter; + } else if ( field == "intentCode" ) { + values >> header.sclSlope; + } else if ( field == "intent_p1" ) { + values >> header.sclInter; + } else if ( field == "intent_p2" ) { + values >> header.cal_min; + } else if ( field == "intent_p3" ) { + values >> header.cal_max; + } else if ( field == "intent_name" ) { + values >> header.intentName; + } else if ( field == "toffset" ) { + values >> header.toffset; + } else if ( field == "xyz_units" ) { + values >> xyzUnits; + } else if ( field == "time_units" ) { + values >> tUnits; + } else if ( field == "descrip" ) { + values >> header.description; + } else if ( field == "aux_file" ) { + values >> header.auxillaryFile; + } else if ( field == "qform_code" ) { + values >> header.qformCode; + } else if ( field == "sform_code" ) { + values >> header.sformCode; + } else if ( field == "quatern_b" ) { + values >> header.qB; + } else if ( field == "quatern_c" ) { + values >> header.qC; + } else if ( field == "quatern_d" ) { + values >> header.qD; + } else if ( field == "qoffset_x" ) { + values >> header.qX; + } else if ( field == "qoffset_y" ) { + values >> header.qY; + } else if ( field == "qoffset_z" ) { + values >> header.qZ; + } else if ( field == "freq_dim" ) { + values >> freqDim; + } else if ( field == "phase_dim" ) { + values >> phaseDim; + } else if ( field == "slice_dim" ) { + values >> sliceDim; + } else if ( field == "slice_code" ) { + values >> header.sliceCode; + } else if ( field == "slice_start" ) { + values >> header.sliceStart; + } else if ( field == "slice_end" ) { + values >> header.sliceEnd; + } else if ( field == "slice_duration" ) { + values >> header.sliceDuration; + } else { + //cerr << XMLreport[setting] << endl; + //cerr << "Unknown" << endl; + } + } + header.units=xyzUnits+tUnits; + header.sliceOrdering=freqDim | ( phaseDim << 2 ) | ( sliceDim << 4 ); + header.bitsPerVoxel=header.bpvOfDatatype(); + return header; + } int fslcreatehd_main(int argc, char *argv[]) { - NiftiIO reader; vector <NiftiExtension> extensions; NiftiHeader header,originalHeader; char *buffer(NULL); @@ -43,7 +169,7 @@ int fslcreatehd_main(int argc, char *argv[]) if (FslFileExists(filename)) { existingImage = true; filename=return_validimagefilename(filename); - header=reader.loadImage(filename,buffer,extensions); + header=loadImage(filename,buffer,extensions); originalHeader=header; } @@ -75,33 +201,27 @@ int fslcreatehd_main(int argc, char *argv[]) if (strcmp(argv[1],"-")==0) {fileread=0;} newstr = (char *)calloc(10000,1); - if (fileread) - { + if (fileread) { inputfile.open (argv[1], ifstream::in | ifstream::binary); - if (!inputfile.is_open()) - { - cerr << "Cannot open file " << argv[1] << endl; - return EXIT_FAILURE; - } + if (!inputfile.is_open()) { + cerr << "Cannot open file " << argv[1] << endl; + return EXIT_FAILURE; + } } - do - { - if (fileread) - { - inputfile.getline(newstr,9999); // maybe use > for delimiting character remove while increase size - } - else - { - if (fgets(newstr,9999,stdin)==NULL) break; - } - settings.push_back(string(newstr)); + do { + if (fileread) { + inputfile.getline(newstr,9999); // maybe use > for delimiting character remove while increase size + } else { + if (fgets(newstr,9999,stdin)==NULL) break; + } + settings.push_back(string(newstr)); } while (settings[settings.size()-1]!="/>"); - header=NiftiHeader(settings); + header=headerFromXML(settings); if (fileread) - inputfile.close(); + inputfile.close(); } /* reset datatype in case it has been overwritten */ @@ -125,7 +245,7 @@ int fslcreatehd_main(int argc, char *argv[]) header.bitsPerVoxel=header.bpvOfDatatype(); header.setNiftiVersion(FslNiftiVersionFileType(filetype),FslIsSingleFileType(filetype)); - reader.saveImage(filename,buffer,extensions,header, FslIsCompressedFileType(filetype)); + saveImage(filename,buffer,extensions,header, FslIsCompressedFileType(filetype)); return 0; } diff --git a/fslhd.cc b/fslhd.cc index 773bac17bcf9e288f87b1aa24bee0c8058c83765..9d2171224a9bb18b2eb3d308b3ee6edbe531996c 100755 --- a/fslhd.cc +++ b/fslhd.cc @@ -1,6 +1,6 @@ // fslhd.cc - show image header // Steve Smith, Mark Jenkinson and Matthew Webster, FMRIB Image Analysis Group -// Copyright (C) 2000-2012 University of Oxford +// Copyright (C) 2000-2019 University of Oxford // CCOPYRIGHT #include "newimage/newimageall.h" @@ -90,10 +90,9 @@ int main(int argc,char *argv[]) if (argc < 2) return print_usage(string(argv[0])); bool reportXML(argc==3 && strcmp(argv[1],"-x")==0 ); - NiftiIO reader; try { string filename(return_validimagefilename(argv[argc-1])); - NiftiHeader header(reader.loadHeader(filename)); + NiftiHeader header(loadHeader(filename)); if (reportXML) reportXMLHeader(header); else { diff --git a/fslmerge.cc b/fslmerge.cc index 01e8ea117e958e20ea33024aef4f69f14dc04f8a..4ebf90f76368087bac1fde3ed2be5d8aa920a808 100755 --- a/fslmerge.cc +++ b/fslmerge.cc @@ -1,6 +1,6 @@ // fslmerge.cc concatenate AVW files into a single output // Steve Smith, David Flitney, Stuart Clare and Matthew Webster, FMRIB Image Analysis Group -// Copyright (C) 2000-2010 University of Oxford +// Copyright (C) 2000-2019 University of Oxford // CCOPYRIGHT #define EXPOSE_TREACHEROUS #include "newimage/newimageall.h" @@ -25,8 +25,7 @@ int fmrib_main(int argc, char *argv[]) volume4D<T> input_volume; int direction,dimerror=0,xoffset=0,yoffset=0,zoffset=0,toffset=0; - NiftiIO reader; - NiftiHeader header(reader.loadHeader(return_validimagefilename(string(argv[3])))); + NiftiHeader header(loadHeader(return_validimagefilename(string(argv[3])))); float newTR(header.pixdim[4]); if (!strcmp(argv[1], "-t")) direction=0; @@ -54,7 +53,7 @@ int fmrib_main(int argc, char *argv[]) for(int vol = 4; vol < argc; vol++) { - header=reader.loadHeader(return_validimagefilename(string(argv[vol]))); + header=loadHeader(return_validimagefilename(string(argv[vol]))); if (direction==0) tdimtot+=std::max(header.dim[4],(int64_t)1); if (direction==1) xdimtot+=std::max(header.dim[1],(int64_t)1); if (direction==2) ydimtot+=std::max(header.dim[2],(int64_t)1); diff --git a/fslnvols.cc b/fslnvols.cc index 2557dcba18e94bdd1fe11315769e29fe94def26e..47fb2e8962af765d98773c8e701a9cc844d44ebe 100755 --- a/fslnvols.cc +++ b/fslnvols.cc @@ -1,13 +1,13 @@ // fslnvols.cc REALLY advanced program for counting the volumes in a 4D file // Stephen Smith and Matthew Webster, FMRIB Image Analysis Group -// Copyright (C) 1999-2005 University of Oxford -// CCOPYRIGHT +// Copyright (C) 1999-2019 University of Oxford +// CCOPYRIGHT #include "newimage/newimageall.h" using namespace NEWIMAGE; -void print_usage(const string& progname) +void print_usage(const string& progname) { cout << endl; cout << "Usage: fslnvols <input>" << endl; @@ -21,14 +21,12 @@ int main(int argc,char *argv[]) print_usage(progname); return 1; } - if (!FslFileExists(string(argv[1]))) - { + if (!FslFileExists(string(argv[1]))) + { cout << "0" << endl; return 0; // the intended usage is to return "0" and not show an error } - NiftiIO reader; - NiftiHeader header(reader.loadHeader(return_validimagefilename(string(argv[1])))); + NiftiHeader header(loadHeader(return_validimagefilename(string(argv[1])))); cout << header.dim[4] << endl; return 0; } -