OSDN Git Service

58207db5a813ec069103ce481715a25be4686172
[eos/hostdependX86LINUX64.git] / src / Tools / mrcImage / mrcImageSiemensStar / src / mrcImageSiemensStar.c
1 /*
2 # mrcImageSiemensStar : $Revision$  
3 # $Date$ 
4 # Created by $Author$
5 # Usage : mrcImageSiemensStar
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 typedef struct lmrcImageSiemensStarInfo {
23         int    Nx;
24         int    Ny;
25         double R; // [pixel]
26         int    nOfRadial; 
27         float  delta;
28 } lmrcImageSiemensStarInfo;
29 /*
30 typedef enum lmrcImageSiemensStarMode {
31         a=0,
32         b=1
33 } lmrcImageSiemensStarMode;
34 */
35
36 int 
37 lmrcImageSiemensStarCreate(mrcImage* out, lmrcImageSiemensStarInfo linfo, int mode);
38
39 int
40 main(int argc, char* argv[]) 
41 {
42         mrcImageSiemensStarInfo info;
43         lmrcImageSiemensStarInfo linfo;
44         mrcImage out; 
45         init0(&info);
46     argCheck(&info, argc, argv);
47     init1(&info);
48
49         DEBUGPRINT("Program Start\n");
50         linfo.Nx = info.Nx;
51         linfo.Ny = info.Ny;
52         linfo.R  = info.R;
53         linfo.nOfRadial = info.nRadial;
54         linfo.delta =  info.Delta;
55
56         lmrcImageSiemensStarCreate(&out, linfo, info.mode);
57
58         mrcFileWrite(&out, info.Out, "in main", 0);
59         exit(EXIT_SUCCESS);
60 }
61
62 void
63 additionalUsage()
64 {
65         fprintf(stderr, "----- Additional Usage -----\n");
66         fprintf(stderr, "-mode : mrcImageHeaderMode: 2 float");
67 }
68
69
70 int 
71 lmrcImageSiemensStarCreate(mrcImage* out, lmrcImageSiemensStarInfo linfo, int mode)
72 {
73         mrcImageParaTypeReal x, y;
74         mrcImageParaTypeReal gx, gy;
75         double data;
76         double r, theta;
77         int flagTheta;
78         double dTheta;
79
80         mrcDefaultHeaderValueSet(out);
81         out->HeaderN.x = linfo.Nx;      
82         out->HeaderN.y = linfo.Ny;      
83         out->HeaderN.z = 1;
84         out->HeaderMode = mode;
85         out->HeaderLength.x = out->HeaderLength.y = out->HeaderLength.z = linfo.delta;
86         mrcInit(out, NULL);     
87
88
89         dTheta = 2*M_PI/linfo.nOfRadial;
90         gx = (linfo.Nx-1)/2.0;
91         gy = (linfo.Ny-1)/2.0;
92         for(x=0; x<out->HeaderN.x; x++) {
93         for(y=0; y<out->HeaderN.y; y++) {
94                 r = sqrt(SQR(x-gx)+SQR(y-gy));                  
95                 theta = atan2(y-gy, x-gx);
96                 if(0<=theta) {
97                         flagTheta = (int)(( theta - ((int)(theta/dTheta))*dTheta)/(dTheta/2.0)); 
98                 } else {
99                         flagTheta = 1 - (int)((-theta + ((int)(theta/dTheta))*dTheta)/(dTheta/2.0)); 
100                 }
101                 if(flagTheta==1 && r<=linfo.R) {
102                         data = 1;
103                 } else {
104                         data = 0;
105                 }
106                 mrcPixelDataSet(out, x, y, 0, data, mrcPixelRePart);
107         }
108         }
109         return 0;
110 }