OSDN Git Service

New command: mrc2ascii
[eos/base.git] / src / Tools / filter / mrc2ascii / src / mrc2ascii.c
1 /*
2 # mrc2ascii : $Revision$  
3 # $Date$ 
4 # Created by $Author$
5 # Usage : mrc2ascii
6 # Attention
7 #   $Loccker$
8 #       $State$ 
9 #
10 */
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14 #include <math.h>                  
15 #define GLOBAL_DECLARATION
16 #include "../inc/config.h"
17
18 #define DEBUG
19 #include "genUtil.h"
20 #include "mrcImage.h"
21
22 /*
23 Example:
24 typedef struct lmrc2asciiInfo {
25         float a;
26         int   b;
27 } lmrc2asciiInfo;
28
29 typedef enum lmrc2asciiMode {
30         a=0,
31         b=1
32 } lmrc2asciiMode;
33 */
34
35 extern void lmrc2ascii(FILE* fpt, mrcImage* in, int mode);
36 int
37 main(int argc, char* argv[]) 
38 {
39     mrcImage in;
40         mrc2asciiInfo info;
41
42         init0(&info);
43     argCheck(&info, argc, argv);
44     init1(&info);
45
46         DEBUGPRINT("Program Start\n");
47     mrcFileRead(&in, info.In, "in main", 0);
48
49     lmrc2ascii(info.fptOut, &in, info.mode);
50
51         exit(EXIT_SUCCESS);
52 }
53
54 void
55 additionalUsage()
56 {
57         fprintf(stderr, "----- Additional Usage -----\n");
58         fprintf(stderr, "-m \n");
59         fprintf(stderr, " 0: A\n");
60         fprintf(stderr, " 1: nm\n");
61         fprintf(stderr, " +16: Length is Sampling x N\n");
62         fprintf(stderr, " +32: Use start\n");
63         fprintf(stderr, " +64: Integer\n");
64 }
65
66
67 void 
68 lmrc2ascii(FILE* fpt, mrcImage* in, int mode)
69 {
70     float x, y, z;
71     int ix, iy, iz;
72     float offsetx, offsety, offsetz;
73     float lx, ly, lz;
74     double data;
75
76     if(mode&0x10) {
77         lx = in->HeaderLength.x/in->HeaderN.x;
78         ly = in->HeaderLength.y/in->HeaderN.y;
79         lz = in->HeaderLength.z/in->HeaderN.z;
80     } else {
81         lx = in->HeaderLength.x;
82         ly = in->HeaderLength.y;
83         lz = in->HeaderLength.z;
84     }
85     if(mode&0x1) {
86         lx /=10;
87         ly /=10;
88         lz /=10;
89     }
90     if(mode&0x20) {
91         offsetx = in->HeaderStartN.x*lx;
92         offsety = in->HeaderStartN.y*ly;
93         offsetz = in->HeaderStartN.z*lz;
94     } else {
95         offsetx = 0;
96         offsety = 0;
97         offsetz = 0;
98     }
99
100     for(iz=0; iz<in->HeaderN.z; iz++) {
101         z = iz*lz + offsetz;
102     for(iy=0; iy<in->HeaderN.y; iy++) {
103         y = iy*ly + offsety;
104     for(ix=0; ix<in->HeaderN.x; ix++) {
105         x = ix*lx + offsetx;
106         mrcPixelDataGet(in, ix, iy, iz, &data, mrcPixelRePart, mrcPixelHowNearest);
107         if(0x40&mode) {
108             fprintf(fpt, "%10d %10d %10d %10d\n", (int)x, (int)y, (int)z, (int)data);
109         } else {
110             fprintf(fpt, "%15.6f %15.6f %15.6f %15.6f\n", x, y, z, data);
111         }
112     }
113     }
114     }
115
116 }