Commit 945ee13c87d2f84bc8e48abb12dce75629e46c3a

Authored by Laila Saadatifard
1 parent 91d8912e

the get_list function by using the windows.h, these changes are in the image_stack.h and filename.h

stim/cuda/arraymath/array_cart2polar.cuh
@@ -33,7 +33,6 @@ namespace stim{ @@ -33,7 +33,6 @@ namespace stim{
33 dim3 threads(max_threads, 1); 33 dim3 threads(max_threads, 1);
34 dim3 blocks(x/threads.x + (x %threads.x == 0 ? 0:1) , y); 34 dim3 blocks(x/threads.x + (x %threads.x == 0 ? 0:1) , y);
35 35
36 -  
37 //call the kernel to do the multiplication 36 //call the kernel to do the multiplication
38 cuda_cart2polar <<< blocks, threads >>>(gpuGrad, x, y); 37 cuda_cart2polar <<< blocks, threads >>>(gpuGrad, x, y);
39 38
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 #include <string> 5 #include <string>
6 #include <sstream> 6 #include <sstream>
7 #include <fstream> 7 #include <fstream>
8 -#include <cstdarg> 8 +#include <cstdarg>
9 9
10 #include <stim/math/vector.h> 10 #include <stim/math/vector.h>
11 11
@@ -51,7 +51,9 @@ protected: @@ -51,7 +51,9 @@ protected:
51 public: 51 public:
52 52
53 ///Default constructor doesn't do anything 53 ///Default constructor doesn't do anything
54 - grid(){} 54 + grid(){
  55 + ptr = NULL; //set the pointer to NULL so that we know nothing is allocated
  56 + }
55 57
56 ///Constructor used to specify the grid size as a vector 58 ///Constructor used to specify the grid size as a vector
57 59
@@ -110,6 +112,9 @@ public: @@ -110,6 +112,9 @@ public:
110 112
111 R = S; //set the sample resolution 113 R = S; //set the sample resolution
112 114
  115 + //allocate space for the data
  116 + init();
  117 +
113 std::fstream file; 118 std::fstream file;
114 119
115 //open the file as binary for writing 120 //open the file as binary for writing
@@ -118,6 +123,7 @@ public: @@ -118,6 +123,7 @@ public:
118 //seek past the header 123 //seek past the header
119 file.seekg(header, std::ios::beg); 124 file.seekg(header, std::ios::beg);
120 125
  126 +
121 //read the data 127 //read the data
122 file.read((char *)ptr, samples() * sizeof(T)); 128 file.read((char *)ptr, samples() * sizeof(T));
123 } 129 }
@@ -173,7 +179,9 @@ public: @@ -173,7 +179,9 @@ public:
173 for(unsigned int d = 0; d<D; d++){ 179 for(unsigned int d = 0; d<D; d++){
174 if(d!=0) result<<", "; 180 if(d!=0) result<<", ";
175 result<<R[d]; 181 result<<R[d];
  182 +
176 } 183 }
  184 +
177 result<<"]"<<std::endl; 185 result<<"]"<<std::endl;
178 186
179 //calculate the number of values to output 187 //calculate the number of values to output
stim/grids/image_stack.h
@@ -21,6 +21,7 @@ protected: @@ -21,6 +21,7 @@ protected:
21 using stim::grid<T, 4>::R; 21 using stim::grid<T, 4>::R;
22 using stim::grid<T, 4>::ptr; 22 using stim::grid<T, 4>::ptr;
23 using stim::grid<T, 4>::samples; 23 using stim::grid<T, 4>::samples;
  24 + using stim::grid<T, 4>::read;
24 25
25 public: 26 public:
26 27
@@ -62,11 +63,13 @@ public: @@ -62,11 +63,13 @@ public:
62 //load and copy each image into the grid 63 //load and copy each image into the grid
63 for(unsigned int i = 0; i<R[3]; i++){ 64 for(unsigned int i = 0; i<R[3]; i++){
64 65
  66 + std::cout<<"File to Load: "<<file_list[i].str()<<std::endl;
65 //load the image 67 //load the image
66 stim::image<T> I(file_list[i].str()); 68 stim::image<T> I(file_list[i].str());
67 69
68 //retrieve the interlaced data from the image - store it in the grid 70 //retrieve the interlaced data from the image - store it in the grid
69 I.data_interleaved(&ptr[ i * R[0] * R[1] * R[2] ]); 71 I.data_interleaved(&ptr[ i * R[0] * R[1] * R[2] ]);
  72 +
70 } 73 }
71 } 74 }
72 75
@@ -117,6 +120,19 @@ public: @@ -117,6 +120,19 @@ public:
117 save_image(file_list[i], i); 120 save_image(file_list[i], i);
118 } 121 }
119 122
  123 + /// Returns the pixel at the specified point
  124 + T get(unsigned int x, unsigned int y, unsigned int z, unsigned int c = 0){
  125 + return ptr[z * R[0] * R[1] * R[2] + y * R[0] * R[1] + x * R[0] + c];
  126 + }
  127 +
  128 + void read(std::string file, unsigned int X, unsigned int Y, unsigned int Z, unsigned int C = 1, unsigned int header = 0){
  129 + read(file, stim::vec<unsigned long>(C, X, Y, Z), header);
  130 + }
  131 +
  132 + T* data(){
  133 + return ptr;
  134 + }
  135 +
120 }; 136 };
121 137
122 138
stim/image/image.h
@@ -135,6 +135,7 @@ public: @@ -135,6 +135,7 @@ public:
135 } 135 }
136 136
137 T* data(){ 137 T* data(){
  138 +
138 return img.data(); 139 return img.data();
139 } 140 }
140 141
@@ -260,6 +261,22 @@ public: @@ -260,6 +261,22 @@ public:
260 261
261 return result; 262 return result;
262 } 263 }
  264 +
  265 + // leila's code for non_interleaving data in 3D
  266 + //create an data set from an interleaved buffer
  267 + void set_interleaved3(T* buffer, unsigned int width, unsigned int height, unsigned int depth, unsigned int channels = 3){
  268 +
  269 + T* non_interleaved3 = (T*)malloc(width * height * depth * 3 * sizeof(T));
  270 + unsigned int p = width * height * depth;
  271 +
  272 + for(unsigned int i = 0; i < p; i++){
  273 + for(unsigned int c = 0; c < channels; c++){
  274 + non_interleaved3[i + c * p] = buffer[i * channels + c];
  275 + }
  276 + }
  277 +
  278 + img = cimg_library::CImg<T>(non_interleaved3, width, height, depth, channels);
  279 + }
263 280
264 }; 281 };
265 282
stim/parser/filename.h
@@ -19,10 +19,6 @@ @@ -19,10 +19,6 @@
19 #include <algorithm> 19 #include <algorithm>
20 20
21 #include "../parser/parser.h" 21 #include "../parser/parser.h"
22 -#ifdef BOOST_PRECOMPILED  
23 -#include <boost/filesystem.hpp>  
24 -#endif  
25 -  
26 namespace stim{ 22 namespace stim{
27 23
28 //filename class designed to work with both Windows and Unix 24 //filename class designed to work with both Windows and Unix
@@ -155,47 +151,93 @@ public: @@ -155,47 +151,93 @@ public:
155 151
156 return ss.str(); 152 return ss.str();
157 } 153 }
158 -#ifdef BOOST_PRECOMPILED  
159 154
160 - //get a list of files matching the current template  
161 - std::vector<stim::filename> get_list(){ 155 + //*****************************************************************************************************************
  156 + // output is the directory and the prefix and the extension of the files, which are looking for in that directory.
  157 + std::string dir_fname(){
  158 + std::stringstream ss;
162 159
163 - boost::filesystem::path p(dir()); //create a path from the current filename 160 + //if the path is absolute
  161 + if(absolute){
  162 + //output the drive letter if in Windows
  163 + #ifdef _WIN32
  164 + ss<<drive<<":";
  165 + #endif
  166 + ss<<STIM_FILENAME_DIV;
  167 + }
164 168
165 - std::vector<stim::filename> file_list; 169 +
  170 + for(unsigned int d = 0; d < path.size(); d++)
  171 + ss<<path[d]<<STIM_FILENAME_DIV;
  172 + ss<<get_name();
166 173
167 - if(boost::filesystem::exists(p)){  
168 - if(boost::filesystem::is_directory(p)){ 174 + return ss.str();
169 175
170 - typedef std::vector<boost::filesystem::path> vec; // store paths,  
171 - vec v; // so we can sort them later 176 + }
  177 +
  178 + // output is the directory and the name of the file which are found in that given directory
  179 + std::string f_name(std::string file_name){
  180 + std::stringstream ss;
172 181
173 - std::copy(boost::filesystem::directory_iterator(p), boost::filesystem::directory_iterator(), back_inserter(v)); 182 + //if the path is absolute
  183 + if(absolute){
  184 + //output the drive letter if in Windows
  185 + #ifdef _WIN32
  186 + ss<<drive<<":";
  187 + #endif
  188 + ss<<STIM_FILENAME_DIV;
  189 + }
174 190
175 - std::sort(v.begin(), v.end()); // sort, since directory iteration  
176 - // is not ordered on some file systems 191 + //output the directory
  192 + for(unsigned int d = 0; d < path.size(); d++)
  193 + ss<<path[d]<<STIM_FILENAME_DIV;
177 194
178 - //compare file names to the current template (look for wild cards)  
179 - for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)  
180 - { 195 + stim::filename fn = file_name;
  196 + std::string fn_prefix = fn.prefix;
  197 + std::string fn_ext = fn.ext;
  198 + ss<<fn_prefix + '.' + fn_ext;
181 199
182 - //if the filename is a wild card *or* it matches the read file name  
183 - if( prefix == "*" || prefix == (*it).filename().stem().string()){ 200 + return ss.str();
184 201
185 - //if the extension is a wild card *or* it matches the read file extension  
186 - if( ext == "*" || "." + ext == (*it).filename().extension().string()){ 202 + }
187 203
188 - file_list.push_back((*it).string()); //include it in the final list  
189 - }  
190 - } 204 +
  205 +#ifdef _WIN32
  206 +#include <windows.h>
  207 + //get a list of files matching the current template
  208 + std::vector<stim::filename> get_list(){
191 209
192 - } 210 + //stim::filename file_path;
  211 + stim::filename filepath(dir_fname());
  212 + HANDLE hFind = INVALID_HANDLE_VALUE;
  213 + WIN32_FIND_DATAA FindFileData;
  214 + std::vector<stim::filename> file_list;
  215 +
  216 + hFind = FindFirstFileA((filepath.str().c_str()), &FindFileData);
  217 +
  218 + if (hFind == INVALID_HANDLE_VALUE) {
  219 + printf ("Invalid file handle. Error is %u.\n", GetLastError());
  220 + }
  221 + else {
  222 + std::string file_name = FindFileData.cFileName;
  223 + stim::filename current_file(f_name(file_name));
  224 + file_list.push_back(current_file);
  225 +
  226 + // List all the other files in the directory.
  227 + while (FindNextFileA(hFind, &FindFileData) != 0){
  228 + file_name = FindFileData.cFileName;
  229 + current_file = (f_name(file_name));
  230 + file_list.push_back(current_file);
193 } 231 }
194 - }  
195 - 232 + FindClose(hFind);
  233 +
196 return file_list; 234 return file_list;
197 } 235 }
  236 +
  237 + }
198 #endif 238 #endif
  239 + //**************************************************************************************************
  240 +
199 //gets the current working directory 241 //gets the current working directory
200 static stim::filename cwd(){ 242 static stim::filename cwd(){
201 243