Commit 2558ee864cdfc8006acd39b94eb2ee76a221b9a8
1 parent
ae4cb7e9
updating ivote3 to get input parameters in the arguments
Showing
2 changed files
with
82 additions
and
204 deletions
Show diff stats
cpp/cudafunc.cu
1 | -/*#include "circle_check.cuh" | ||
2 | - | ||
3 | -void test_3(float* gpu_out, float* gpu_grad, float rmax, float phi, int n, int x, int y, int z){ | ||
4 | -gpu_test3(gpu_out, gpu_grad, rmax, phi, n, x, y, z); | ||
5 | -} | ||
6 | -*/ | ||
7 | - | ||
8 | 1 | ||
9 | #include "gaussian_blur3.cuh" | 2 | #include "gaussian_blur3.cuh" |
10 | #include "gradient3.cuh" | 3 | #include "gradient3.cuh" |
@@ -14,7 +7,7 @@ gpu_test3(gpu_out, gpu_grad, rmax, phi, n, x, y, z); | @@ -14,7 +7,7 @@ gpu_test3(gpu_out, gpu_grad, rmax, phi, n, x, y, z); | ||
14 | #include "local_max3.cuh" | 7 | #include "local_max3.cuh" |
15 | 8 | ||
16 | 9 | ||
17 | -void ivote3(float* img, float sigma[], float anisotropy, float phi, float d_phi, unsigned int r[], | 10 | +void ivote3(float* img, float sigma[], float phi, float d_phi, unsigned int r[], |
18 | int iter, float t, unsigned int conn[], unsigned int x, unsigned int y, unsigned int z){ | 11 | int iter, float t, unsigned int conn[], unsigned int x, unsigned int y, unsigned int z){ |
19 | 12 | ||
20 | 13 | ||
@@ -33,7 +26,7 @@ void ivote3(float* img, float sigma[], float anisotropy, float phi, float d_phi, | @@ -33,7 +26,7 @@ void ivote3(float* img, float sigma[], float anisotropy, float phi, float d_phi, | ||
33 | float* gpu_grad; //assign memory on the gpu for the gradient along the X, y, z. | 26 | float* gpu_grad; //assign memory on the gpu for the gradient along the X, y, z. |
34 | cudaMalloc(&gpu_grad, bytes*3); | 27 | cudaMalloc(&gpu_grad, bytes*3); |
35 | 28 | ||
36 | - gpu_gradient3<float>(gpu_grad, gpuI0, anisotropy, x, y, z); //call the gradient function from the gpu. | 29 | + gpu_gradient3<float>(gpu_grad, gpuI0, 1, x, y, z); //call the gradient function from the gpu. |
37 | cudaFree(gpuI0); | 30 | cudaFree(gpuI0); |
38 | 31 | ||
39 | float* gpu_vote; | 32 | float* gpu_vote; |
@@ -57,9 +50,9 @@ void ivote3(float* img, float sigma[], float anisotropy, float phi, float d_phi, | @@ -57,9 +50,9 @@ void ivote3(float* img, float sigma[], float anisotropy, float phi, float d_phi, | ||
57 | 50 | ||
58 | } | 51 | } |
59 | 52 | ||
60 | - cudaFree(gpu_grad); | 53 | + cudaFree(gpu_grad); |
61 | cudaMemcpy(img, gpu_vote, bytes, cudaMemcpyDeviceToHost); | 54 | cudaMemcpy(img, gpu_vote, bytes, cudaMemcpyDeviceToHost); |
62 | - | 55 | + |
63 | //allocate space on the gpu for the final detected cells. | 56 | //allocate space on the gpu for the final detected cells. |
64 | //float* gpu_output; | 57 | //float* gpu_output; |
65 | //cudaMalloc(&gpu_output, bytes); | 58 | //cudaMalloc(&gpu_output, bytes); |
cpp/main.cpp
@@ -7,123 +7,19 @@ | @@ -7,123 +7,19 @@ | ||
7 | #include <stim/parser/filename.h> | 7 | #include <stim/parser/filename.h> |
8 | #include <stim/visualization/colormap.h> | 8 | #include <stim/visualization/colormap.h> |
9 | #include <stim/image/image.h> | 9 | #include <stim/image/image.h> |
10 | -#define pi 3.14159 | 10 | +#include <stim/math/constants.h> |
11 | 11 | ||
12 | -//#define M_PI 3.14159 | ||
13 | -//#include <stim/math/circle.h> | ||
14 | -//#include <stim/math/vec3.h> | ||
15 | -//#include <stim/math/plane.h> | ||
16 | -//#include <stim/math/vector.h> | ||
17 | -//#include <stim/visualization/aabb3.h> | 12 | +stim::arglist args; |
13 | +int iter; | ||
14 | +unsigned int rmax; | ||
15 | +unsigned int nlmax; | ||
16 | +float t; | ||
17 | +float sigma; | ||
18 | +float phi; | ||
19 | +size_t x, y, z; | ||
18 | 20 | ||
19 | 21 | ||
20 | - | ||
21 | -/*void test_3(float* gpu_out, float* gpu_grad, float rmax, float phi, int n, int x, int y, int z); | ||
22 | - | ||
23 | -int main(){ | ||
24 | - | ||
25 | - int n=20; | ||
26 | - float rmax; | ||
27 | - float phi_deg; | ||
28 | - float phi; | ||
29 | - rmax=4; | ||
30 | - phi_deg = 15; | ||
31 | - phi = phi_deg * pi/180; | ||
32 | - int x,y,z; | ||
33 | - x=y=z=1; | ||
34 | - unsigned int size = x*y*z*sizeof (float); | ||
35 | - float* cpu_grad = (float*) malloc(3*size); | ||
36 | - float* gpu_grad; | ||
37 | - cudaMalloc(&gpu_grad, 3*size); | ||
38 | - cpu_grad[0]=1; | ||
39 | - cpu_grad[1]=0; | ||
40 | - cpu_grad[2]=-0.5; | ||
41 | - cudaMemcpy(gpu_grad, cpu_grad, 3*size, cudaMemcpyHostToDevice); | ||
42 | - float* cpu_out = (float*) malloc(3*size*(n+1)); | ||
43 | - float* gpu_out; | ||
44 | - cudaMalloc(&gpu_out, 3*size*(n+1)); | ||
45 | - test_3(gpu_out, gpu_grad, rmax, phi, n, x, y, z); | ||
46 | - cudaMemcpy(cpu_out, gpu_out, 3*size*(n+1), cudaMemcpyDeviceToHost); | ||
47 | - std::ofstream list("circle_check_cuda1.txt"); | ||
48 | - if (list.is_open()){ | ||
49 | - for (int j=0; j<=n; ++j) | ||
50 | - list << cpu_out[3*j] << '\t' << cpu_out[3*j +1] << '\t' << cpu_out[3*j + 2] << '\n'; | ||
51 | - } | ||
52 | - list.close(); | ||
53 | - */ | ||
54 | -/* | ||
55 | - int main(){ | ||
56 | - | ||
57 | - | ||
58 | - stim::vec3<float> g(-44,-3.4,-0.005); // form a vec3 variable for the gradient vector | ||
59 | - stim::vec3<float> g_sph = g.cart2sph(); //convert cartesian coordinate to spherical for the gradient vector | ||
60 | - int n =36; //set the number of points to find the boundaries of the conical voting area | ||
61 | - int xi = 105; | ||
62 | - int yi = 17; | ||
63 | - int zi = 23; | ||
64 | - float xc = 12 * cos(g_sph[1]) * sin(g_sph[2]); //calculate the center point of the surface of the voting area for the voter | ||
65 | - float yc = 10 * sin(g_sph[1]) * sin(g_sph[2]) ; | ||
66 | - float zc = 10 * cos(g_sph[2]) ; | ||
67 | - float r = sqrt(xc*xc + yc*yc + zc*zc); | ||
68 | - xc+=xi; | ||
69 | - yc+=yi; | ||
70 | - zc+=zi; | ||
71 | - stim::vec3<float> center(xc,yc,zc); | ||
72 | - | ||
73 | - float d = 2 * r * tan(25*pi/180 ); //find the diameter of the conical voting area | ||
74 | - stim::vec3<float> norm = g.norm(); //compute the normalize gradient vector | ||
75 | - float step = 360.0/(float) n; | ||
76 | - stim::circle<float> cir(center, d, norm); | ||
77 | - stim::aabb3<int> bb(xi,yi,zi); | ||
78 | - bb.insert(xc,yc,zc); | ||
79 | - for(float j = 0; j <360.0; j += step){ | ||
80 | - stim::vec3<float> out = cir.p(j); | ||
81 | - bb.insert(out[0], out[1], out[2]); | ||
82 | - } | ||
83 | - | ||
84 | - bb.trim_low(0,0,0); | ||
85 | - bb.trim_high(128-1, 128-1, 128-1); | ||
86 | - | ||
87 | - std::cout<< bb.low[0] << '\t' << bb.low[1] << '\t' << bb.low[2] << '\n'; | ||
88 | - std::cout<< bb.high[0] << '\t' << bb.high[1] << '\t' << bb.high[2] << '\n'; | ||
89 | - std::cin >> n; | ||
90 | -*/ | ||
91 | - /*int n=10; | ||
92 | - stim::circle<float> cir; | ||
93 | - float* c0= (float*) malloc(3*sizeof(float)); | ||
94 | - c0[0] =-4; | ||
95 | - c0[1]=0; | ||
96 | - c0[2] = 3; | ||
97 | - stim::vec3<float> c(c0[0],c0[1],c0[2]); | ||
98 | - float len = c.len(); | ||
99 | - stim::vec3<float> norm(c0[0]/len,c0[1]/len,c0[2]/len); | ||
100 | - std::cout<< len << '\n'; | ||
101 | - std::cout<< norm << '\n'; | ||
102 | - cir.center(c); | ||
103 | - cir.normal(norm); | ||
104 | - cir.scale(2); | ||
105 | - stim::vec3<float> out = cir.p(45); | ||
106 | - std::vector<stim::vec3<float>> out2 = cir.getPoints(n); | ||
107 | - | ||
108 | - std::cout<< out << '\n'; | ||
109 | - std::cout <<out[0] << '\t' << out[1] << '\t' << out[2] <<'\n'; | ||
110 | - std::cout<< c << '\n'; | ||
111 | - | ||
112 | - for (std::vector<stim::vec3<float>>::const_iterator i = out2.begin(); i != out2.end(); ++i) | ||
113 | - std::cout << *i << '\n'; | ||
114 | - std::ofstream list("circle_check.txt"); | ||
115 | - if (list.is_open()){ | ||
116 | - for (std::vector<stim::vec3<float>>::const_iterator j = out2.begin(); j != out2.end(); ++j) | ||
117 | - list << *j << '\n'; | ||
118 | - } | ||
119 | - list.close(); | ||
120 | - std::cin >> n; | ||
121 | - | ||
122 | -} | ||
123 | -*/ | ||
124 | - | ||
125 | - | ||
126 | -void ivote3(float* img, float std[], float anisotropy, float phi, float d_phi, unsigned int r[], int iter, float t, unsigned int conn[], | 22 | +void ivote3(float* img, float std[], float phi, float d_phi, unsigned int r[], int iter, float t, unsigned int conn[], |
127 | unsigned int x, unsigned int y, unsigned int z); | 23 | unsigned int x, unsigned int y, unsigned int z); |
128 | void lmax(float* center, float* vote, float t1, unsigned int conn[], unsigned int x, unsigned int y, unsigned int z); | 24 | void lmax(float* center, float* vote, float t1, unsigned int conn[], unsigned int x, unsigned int y, unsigned int z); |
129 | 25 | ||
@@ -138,32 +34,20 @@ void invert_data(float* cpuI, unsigned int x, unsigned int y, unsigned int z){ | @@ -138,32 +34,20 @@ void invert_data(float* cpuI, unsigned int x, unsigned int y, unsigned int z){ | ||
138 | } | 34 | } |
139 | } | 35 | } |
140 | 36 | ||
141 | -int main(int argc, char** argv){ | ||
142 | 37 | ||
143 | 38 | ||
144 | - cudaDeviceProp prop; | ||
145 | - int count; | ||
146 | - cudaGetDeviceCount(&count); | ||
147 | - //printf("cudadevicecount: %i\n", count); | ||
148 | - for (int i=0; i<count; i++){ | ||
149 | - cudaGetDeviceProperties(&prop, i); | ||
150 | - printf("current device ID: %d\n", i); | ||
151 | - printf("device name: %s\n", prop.name); | ||
152 | - printf("total global mem: %lu\n", prop.totalGlobalMem); | ||
153 | - printf("shared memory per block: %lu\n", prop.sharedMemPerBlock); | ||
154 | - } | ||
155 | - | ||
156 | - //output advertisement | ||
157 | - std::cout<<std::endl<<std::endl; | ||
158 | - std::cout<<"========================================================================="<<std::endl; | ||
159 | - std::cout<<"Thank you for using the ivote3 segmentation tool!"<<std::endl; | ||
160 | - std::cout<<"Scalable Tissue Imaging and Modeling (STIM) Lab, University of Houston"<<std::endl; | ||
161 | - std::cout<<"Developers: Laila Saadatifard and David Mayerich"<<std::endl; | ||
162 | - std::cout<<"Source: https://git.stim.ee.uh.edu/segmentation/ivote3"<<std::endl; | ||
163 | - std::cout<<"========================================================================="<<std::endl<<std::endl; | 39 | +void advertise() { |
40 | + std::cout << std::endl << std::endl; | ||
41 | + std::cout << "=========================================================================" << std::endl; | ||
42 | + std::cout << "Thank you for using the ivote3 segmentation tool!" << std::endl; | ||
43 | + std::cout << "Scalable Tissue Imaging and Modeling (STIM) Lab, University of Houston" << std::endl; | ||
44 | + std::cout << "Developers: Laila Saadatifard and David Mayerich" << std::endl; | ||
45 | + std::cout << "Source: https://git.stim.ee.uh.edu/segmentation/ivote3" << std::endl; | ||
46 | + std::cout << "=========================================================================" << std::endl << std::endl; | ||
164 | 47 | ||
165 | - stim::arglist args; | 48 | +} |
166 | 49 | ||
50 | +void init_args(int argc, char* argv[]) { | ||
167 | #ifdef _WIN32 | 51 | #ifdef _WIN32 |
168 | args.set_ansi(false); | 52 | args.set_ansi(false); |
169 | #endif | 53 | #endif |
@@ -175,101 +59,106 @@ int main(int argc, char** argv){ | @@ -175,101 +59,106 @@ int main(int argc, char** argv){ | ||
175 | args.add("z", "size of the dataset along Z axis", "positive value"); | 59 | args.add("z", "size of the dataset along Z axis", "positive value"); |
176 | args.add("t", "threshold value for the final result", "positive valu"); | 60 | args.add("t", "threshold value for the final result", "positive valu"); |
177 | args.add("invert", "to invert the input data set", "string"); | 61 | args.add("invert", "to invert the input data set", "string"); |
178 | - args.add("anisotropy", "anisotropy value of the imaging", "1"); | 62 | + args.add("rmax", "maximum possible radius of the cells in the input image", "10", "[positive value]"); |
63 | + args.add("phi", "starting angle for the vote region (in degrees)", "25.0", "0 <= phi < 180"); | ||
64 | + args.add("iter", "number of iterations for voting", "8", "i > 0"); | ||
65 | + args.add("sigma", "the gaussian blur standard deviation", "5", "s >=0 (s = 0, no blurring)"); | ||
66 | + args.add("conn", "the number of connected neighbors for calculating the local maxima", "5", "[positive value]"); | ||
179 | //parse the command line arguments. | 67 | //parse the command line arguments. |
180 | args.parse(argc, argv); | 68 | args.parse(argc, argv); |
181 | 69 | ||
182 | //display the help text if requested | 70 | //display the help text if requested |
183 | - if(args["help"].is_set()){ | ||
184 | - std::cout<<std::endl<<"usage: ivote input_image output_list --option [A B C ...]"<<std::endl; | ||
185 | - std::cout<<std::endl<<std::endl | ||
186 | - << "examples: ivote blue.bmp list.txt "<<std::endl; | ||
187 | - | ||
188 | - std::cout<<std::endl<<std::endl; | ||
189 | - std::cout<<args.str()<<std::endl; | 71 | + if (args["help"].is_set()) { |
72 | + advertise(); | ||
73 | + std::cout << std::endl << "usage: ivote input_image output_list --option [A B C ...]" << std::endl; | ||
74 | + std::cout << std::endl << std::endl | ||
75 | + << "examples: ivote blue.bmp list.txt " << std::endl; | ||
76 | + | ||
77 | + std::cout << std::endl << std::endl; | ||
78 | + std::cout << args.str() << std::endl; | ||
190 | exit(1); | 79 | exit(1); |
191 | } | 80 | } |
192 | 81 | ||
193 | //if the input and output files aren't specified, throw an error and exit | 82 | //if the input and output files aren't specified, throw an error and exit |
194 | - if(args.nargs() < 2){ | ||
195 | - std::cout<<"ERROR: two files must be specified for segmentation, enter ivote --help for options."<<std::endl<<std::endl; | 83 | + if (args.nargs() < 3) { |
84 | + std::cout << "ERROR: three files must be specified for segmentation, enter ivote --help for options." << std::endl << std::endl; | ||
196 | exit(1); | 85 | exit(1); |
197 | } | 86 | } |
198 | 87 | ||
199 | - //get the input image file | ||
200 | - stim::filename Ifilename(args.arg(0)); | 88 | + //set the x, y, z. |
89 | + x = (size_t)args["x"].as_int(); | ||
90 | + y = (size_t)args["y"].as_int(); | ||
91 | + z = (size_t)args["z"].as_int(); | ||
92 | + iter = args["iter"].as_int(); | ||
93 | + rmax = (unsigned int)args["rmax"].as_int(); | ||
94 | + nlmax = (unsigned int)args["conn"].as_int(); | ||
95 | + t = args["t"].as_float(); | ||
96 | + sigma = args["sigma"].as_float(); | ||
97 | + phi = (float)args["phi"].as_float() * (float)stim::PI / 180; | ||
98 | + | ||
99 | +} | ||
100 | +int main(int argc, char** argv){ | ||
201 | 101 | ||
202 | - //get the output file name | ||
203 | - stim::filename OutName(args.arg(1)); | ||
204 | 102 | ||
205 | - //set the x, y, z. | ||
206 | - int x = args["x"].as_int(); | ||
207 | - int y = args["y"].as_int(); | ||
208 | - int z = args["z"].as_int(); | 103 | + cudaDeviceProp prop; |
104 | + int count; | ||
105 | + cudaGetDeviceCount(&count); | ||
106 | + for (int i=0; i<count; i++){ | ||
107 | + cudaGetDeviceProperties(&prop, i); | ||
108 | + printf("current device ID: %d\n", i); | ||
109 | + printf("device name: %s\n", prop.name); | ||
110 | + printf("total global mem: %lu\n", prop.totalGlobalMem); | ||
111 | + printf("shared memory per block: %lu\n", prop.sharedMemPerBlock); | ||
112 | + } | ||
113 | + | ||
114 | + init_args(argc, argv); | ||
209 | 115 | ||
210 | - //set the threshold. | ||
211 | - float t = args["t"].as_float(); | ||
212 | - //set the anisotropy | ||
213 | - float anisotropy = args["anisotropy"].as_float(); | ||
214 | - unsigned int rmax = 10; | ||
215 | - unsigned int r[3] = { 12, rmax, rmax}; | ||
216 | - float std = 5; | ||
217 | - float sigma[3] = { std, std, std}; | ||
218 | - unsigned int nlmax = 5; | 116 | + unsigned int r[3] = { rmax , rmax, rmax}; |
117 | + | ||
118 | + float sigma3[3] = { sigma, sigma, sigma}; | ||
219 | unsigned int conn[3] = { nlmax, nlmax, nlmax}; | 119 | unsigned int conn[3] = { nlmax, nlmax, nlmax}; |
220 | - float phi_deg = 25.0; | ||
221 | - float phi = phi_deg * pi /180; | ||
222 | - int iter = 8; | ||
223 | float d_phi = phi/(iter+2); | 120 | float d_phi = phi/(iter+2); |
224 | 121 | ||
225 | - std::string filename = Ifilename.str(); | ||
226 | - unsigned int bytes = x*y*z*sizeof(float); | 122 | + size_t bytes = x*y*z*sizeof(float); |
227 | 123 | ||
228 | //allocate space on the cpu for the input data | 124 | //allocate space on the cpu for the input data |
229 | float* cpuI = (float*) malloc(bytes); | 125 | float* cpuI = (float*) malloc(bytes); |
230 | 126 | ||
231 | //load the input file into the cpuI | 127 | //load the input file into the cpuI |
232 | - std::ifstream nissl(filename, std::ios::in | std::ios::binary); | 128 | + std::ifstream nissl(args.arg(0), std::ios::in | std::ios::binary); |
233 | nissl.read((char*)cpuI, bytes); | 129 | nissl.read((char*)cpuI, bytes); |
234 | nissl.close(); | 130 | nissl.close(); |
235 | if(args["invert"].is_set()) | 131 | if(args["invert"].is_set()) |
236 | invert_data(cpuI, x, y, z); | 132 | invert_data(cpuI, x, y, z); |
237 | 133 | ||
238 | //write a new file from the cpuI. | 134 | //write a new file from the cpuI. |
239 | - std::ofstream original("shared2D-v1/inv-128.vol", std::ofstream::out | std::ofstream::binary); | 135 | + std::ofstream original("0-inv-128.vol", std::ofstream::out | std::ofstream::binary); |
240 | original.write((char*)cpuI, bytes); | 136 | original.write((char*)cpuI, bytes); |
241 | original.close(); | 137 | original.close(); |
242 | 138 | ||
243 | - //allocate space on the cpu for the output result | ||
244 | - float* cpu_out = (float*) malloc(bytes); | ||
245 | - | ||
246 | - // call the ivote function | ||
247 | - //ivote3(cpu_out, cpuI, sigma, anisotropy, phi, d_phi, r, iter, t, conn, x, y, z); | ||
248 | - ivote3(cpuI, sigma, anisotropy, phi, d_phi, r, iter, t, conn, x, y, z); | ||
249 | - //write the blurred file from the cpuI. | ||
250 | - std::ofstream fblur("shared2D-v8/vote8.vol", std::ofstream::out | std::ofstream::binary); | ||
251 | - fblur.write((char*)cpuI, bytes); | ||
252 | - fblur.close(); | ||
253 | 139 | ||
254 | - //stim::image<float>imgrad3; | ||
255 | - //imgrad3.set_interleaved3(cpu_out, 128,128,128,3); | ||
256 | - //std::ofstream fgx("syn/gx-128.vol", std::ofstream::out | std::ofstream::binary); | ||
257 | - //fgx.write((char*)imgrad3.channel(0).data(), bytes); | ||
258 | - //fgx.close(); | 140 | + ivote3(cpuI, sigma3, phi, d_phi, r, iter, t, conn, x, y, z); // call the ivote function |
141 | + | ||
142 | + std::ofstream fvote("0-vote8.vol", std::ofstream::out | std::ofstream::binary); | ||
143 | + fvote.write((char*)cpuI, bytes); | ||
144 | + fvote.close(); | ||
259 | 145 | ||
146 | + //allocate space on the cpu for the output result | ||
147 | + float* cpu_out = (float*)malloc(bytes * 3); | ||
148 | + | ||
260 | //write the output file. | 149 | //write the output file. |
261 | //for (int t0=0; t0<=5000; t0+=100){ | 150 | //for (int t0=0; t0<=5000; t0+=100){ |
262 | // float t1 = t0; | 151 | // float t1 = t0; |
263 | int t0 = t; | 152 | int t0 = t; |
264 | lmax(cpu_out, cpuI, t, conn, x, y, z); | 153 | lmax(cpu_out, cpuI, t, conn, x, y, z); |
265 | //std::ofstream fo("shared2D-v8/" + OutName.str(), std::ofstream::out | std::ofstream::binary); | 154 | //std::ofstream fo("shared2D-v8/" + OutName.str(), std::ofstream::out | std::ofstream::binary); |
266 | - std::ofstream fo( OutName.str()+std::to_string(t0)+".vol", std::ofstream::out | std::ofstream::binary); | 155 | + std::ofstream fo( args.arg(1), std::ofstream::out | std::ofstream::binary); |
267 | fo.write((char*)cpu_out, bytes); | 156 | fo.write((char*)cpu_out, bytes); |
268 | fo.close(); | 157 | fo.close(); |
269 | 158 | ||
270 | // creat a file for saving the list centers | 159 | // creat a file for saving the list centers |
271 | 160 | ||
272 | - std::ofstream list(OutName.str()+std::to_string(t0)+".obj"); | 161 | + std::ofstream list(args.arg(2)); |
273 | // set the number of detected cells to zero. | 162 | // set the number of detected cells to zero. |
274 | int nod = 0; | 163 | int nod = 0; |
275 | if (list.is_open()){ | 164 | if (list.is_open()){ |
@@ -281,17 +170,13 @@ int main(int argc, char** argv){ | @@ -281,17 +170,13 @@ int main(int argc, char** argv){ | ||
281 | int idx = iz * x * y + iy * x + ix; | 170 | int idx = iz * x * y + iy * x + ix; |
282 | if (cpu_out[idx]>0){ | 171 | if (cpu_out[idx]>0){ |
283 | nod++; | 172 | nod++; |
284 | - list << "v" << "\t" << ix << "\t" << iy << "\t"<< iz << "\t" << cpu_out[idx] << '\n' ; | 173 | + list << ix << " " << iy << " "<< iz << " " << cpu_out[idx] << '\n' ; |
285 | 174 | ||
286 | } | 175 | } |
287 | } | 176 | } |
288 | } | 177 | } |
289 | } | 178 | } |
290 | - list << "p" << "\t"; | ||
291 | - for (unsigned int i_nod =1 ; i_nod <=nod; i_nod++){ | ||
292 | - list << i_nod << "\t"; | ||
293 | - } | ||
294 | - | 179 | + |
295 | list.close(); | 180 | list.close(); |
296 | } | 181 | } |
297 | 182 |