Commit 91589064aa61ecd4eed1267301f12347716b9c27

Authored by David Mayerich
1 parent 7d01bb90

added a global matlab mat4 function

Showing 1 changed file with 43 additions and 7 deletions   Show diff stats
stim/math/matrix.h
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 //#include "rts/vector.h" 4 //#include "rts/vector.h"
5 #include <string.h> 5 #include <string.h>
6 #include <iostream> 6 #include <iostream>
  7 +#include <fstream>
7 #include <stim/math/vector.h> 8 #include <stim/math/vector.h>
8 #include <stim/math/vec3.h> 9 #include <stim/math/vec3.h>
9 //#include <stim/cuda/cudatools/callable.h> 10 //#include <stim/cuda/cudatools/callable.h>
@@ -31,6 +32,36 @@ namespace stim{ @@ -31,6 +32,36 @@ namespace stim{
31 default: return 0; 32 default: return 0;
32 } 33 }
33 } 34 }
  35 +
  36 + void save_mat4(char* data, std::string filename, std::string varname, size_t sx, size_t sy, mat4Format format){
  37 + //save the matrix file here (use the mat4 function above)
  38 + //data format: https://maxwell.ict.griffith.edu.au/spl/matlab-page/matfile_format.pdf (page 32)
  39 +
  40 + int MOPT = 0; //initialize the MOPT type value to zero
  41 + int m = 0; //little endian
  42 + int o = 0; //reserved, always 0
  43 + int p = format;
  44 + int t = 0;
  45 + MOPT = m * 1000 + o * 100 + p * 10 + t; //calculate the type value
  46 + int mrows = sx;
  47 + int ncols = sy;
  48 + int imagf = 0; //assume real (for now)
  49 + varname.push_back('\0'); //add a null to the string
  50 + int namlen = varname.size(); //calculate the name size
  51 +
  52 + size_t bytes = sx * sy * mat4Format_size(format);
  53 + std::ofstream outfile(filename, std::ios::binary);
  54 + outfile.write((char*)&MOPT, 4);
  55 + outfile.write((char*)&mrows, 4);
  56 + outfile.write((char*)&ncols, 4);
  57 + outfile.write((char*)&imagf, 4);
  58 + outfile.write((char*)&namlen, 4);
  59 + outfile.write((char*)&varname[0], namlen);
  60 + outfile.write((char*)data, bytes); //write the matrix data
  61 + outfile.close();
  62 +
  63 + }
  64 +
34 template <class T> 65 template <class T>
35 class matrix { 66 class matrix {
36 //the matrix will be stored in column-major order (compatible with OpenGL) 67 //the matrix will be stored in column-major order (compatible with OpenGL)
@@ -380,8 +411,17 @@ public: @@ -380,8 +411,17 @@ public:
380 } 411 }
381 412
382 // saves the matrix as a Level-4 MATLAB file 413 // saves the matrix as a Level-4 MATLAB file
383 - void mat4(std::string filename, std::string name = std::string("unknown"), mat4Format = mat4_float) {  
384 - int MOPT = 0; //initialize the MOPT type value to zero 414 + void mat4(std::string filename, std::string name = std::string("unknown"), mat4Format format = mat4_float) {
  415 + if (format == mat4_float) {
  416 + if (sizeof(T) == 4) format = mat4_float32;
  417 + else if (sizeof(T) == 8) format = mat4_float64;
  418 + else {
  419 + std::cout << "stim::matrix ERROR - incorrect format specified" << std::endl;
  420 + exit(1);
  421 + }
  422 + }
  423 + stim::save_mat4((char*)M, filename, name, rows(), cols(), format);
  424 + /*int MOPT = 0; //initialize the MOPT type value to zero
385 int m = 0; //little endian 425 int m = 0; //little endian
386 int o = 0; //reserved, always 0 426 int o = 0; //reserved, always 0
387 int p = mat4_float; 427 int p = mat4_float;
@@ -409,14 +449,10 @@ public: @@ -409,14 +449,10 @@ public:
409 outfile.write((char*)&namlen, 4); 449 outfile.write((char*)&namlen, 4);
410 outfile.write((char*)&name[0], namlen); 450 outfile.write((char*)&name[0], namlen);
411 outfile.write((char*)M, bytes()); //write the matrix data 451 outfile.write((char*)M, bytes()); //write the matrix data
412 - outfile.close(); 452 + outfile.close();*/
413 } 453 }
414 }; 454 };
415 455
416 -void save_mat4(char* data, std::string filename, std::string varname, size_t sx, size_t sy, mat4Format format){  
417 - //save the matrix file here (use the mat4 function above)  
418 - //data format: https://maxwell.ict.griffith.edu.au/spl/matlab-page/matfile_format.pdf (page 32)  
419 -}  
420 } //end namespace rts 456 } //end namespace rts
421 457
422 458