2 # ProjectionDirectionMapCreate : $Revision$
5 # Usage : ProjectionDirectionMapCreate
15 #define GLOBAL_DECLARATION
16 #include "../inc/config.h"
25 typedef struct lProjectionDirectionMapCreateInfo {
28 char** RotationalMode;
40 } lProjectionDirectionMapCreateInfo;
43 typedef enum lProjectionDirectionMapCreateMode {
46 } lProjectionDirectionMapCreateMode;
50 __InputDataFileListRead(lProjectionDirectionMapCreateInfo* linfo, FILE* fpt, int mode);
53 __RotationalModeChange(lProjectionDirectionMapCreateInfo* linfo, int mode);
56 lProjectionDirectionMapCreate(lProjectionDirectionMapCreateInfo* linfo, int mode);
59 __OutputFileWrite(lProjectionDirectionMapCreateInfo* linf, FILE* fpt, int mode);
62 main(int argc, char* argv[])
64 ProjectionDirectionMapCreateInfo info;
65 lProjectionDirectionMapCreateInfo linfo;
69 argCheck(&info, argc, argv);
72 DEBUGPRINT("Program Start\n");
73 if(info.flagOut == 1) linfo.OutputMode = 0;
74 if(info.flagPs == 1) linfo.OutputMode = 1;
75 linfo.mode = info.mode;
77 fprintf(stderr, "%d\n",linfo.mode);
79 __InputDataFileListRead(&linfo, info.fptIn, 0);
84 __RotationalModeChange(&linfo, 0);
87 lProjectionDirectionMapCreate(&linfo, 0);
88 switch(linfo.OutputMode){
90 __OutputFileWrite(&linfo, info.fptOut, 0);
93 fprintf(stderr, "Not supported this mode");
98 DEBUGPRINT("Program End\n");
105 fprintf(stderr, "----- Rotational Mode -----\n");
106 fprintf(stderr, "Final rotation of projection is only Z .\n");
107 fprintf(stderr, "\n");
108 fprintf(stderr, "----- input file format -----\n");
109 fprintf(stderr, "filename rotationalmode angle angle angle\n");
110 fprintf(stderr, " . . . . . \n");
111 fprintf(stderr, " . . . . . \n");
112 fprintf(stderr, " . . . . . \n");
113 fprintf(stderr, " . . . . . \n");
114 fprintf(stderr, "\n");
115 fprintf(stderr, "----- mode -----\n");
116 fprintf(stderr, "-m : 0 : Not separate plus and minus of theta. Create one line data\n");
117 fprintf(stderr, " 1 : separate plus and minus of theta. Create one line data\n");
118 fprintf(stderr, " 2 : separate plus and minus of theta. Create two line data\n");
119 fprintf(stderr, " 3 : Mollweide expressionn");
120 fprintf(stderr, "\n");
121 fprintf(stderr, "----- mode -----\n");
122 fprintf(stderr, "-Rm : 0 : Not change rotational mode\n");
123 fprintf(stderr, " 1 : Change rotational mode to ZONS\n");
124 fprintf(stderr, "\n");
128 __InputDataFileListRead(lProjectionDirectionMapCreateInfo* linfo, FILE* fpt, int mode)
133 fseek(fpt, 0L, SEEK_SET);
134 s = MemoryAllocate(char, WORDLEN, "in __InputDataFileListRead");
136 while(fgets(s, WORDLEN-1, fpt) != NULL){
139 fseek(fpt, 0L, SEEK_SET);
141 linfo->FileName = MemoryAllocate(char*, linfo->LineNum, "in __InputDataFileListRead");
142 linfo->RotationalMode = MemoryAllocate(char*, linfo->LineNum, "in __InputDataFileListRead");
143 for(i=0; i<linfo->LineNum; i++){
144 linfo->FileName[i] = MemoryAllocate(char, 256, "in __InputDataFileListRead");
145 linfo->RotationalMode[i] = MemoryAllocate(char, 5, "in __InputDataFileListRead");
147 linfo->Phi = MemoryAllocate(float, linfo->LineNum, "in __InputDataFileListRead");
148 linfo->Theta = MemoryAllocate(float, linfo->LineNum, "in __InputDataFileListRead");
149 linfo->Psi = MemoryAllocate(float, linfo->LineNum, "in __InputDataFileListRead");
151 for(i=0; i<linfo->LineNum; i++){
152 stringGetFromFile(s, "", fpt, stdout, 3);
153 stringCopy(linfo->FileName[i], stringGetNthWord(s, 1, " ,\t"), 255);
154 stringCopy(linfo->RotationalMode[i], stringGetNthWord(s, 2, " ,\t"), 5);
155 linfo->Phi[i] = (float)stringGetNthRealData(s, 3, " ,\t")*RADIAN;
156 linfo->Theta[i] = (float)stringGetNthRealData(s, 4, " ,\t")*RADIAN;
157 linfo->Psi[i] = (float)stringGetNthRealData(s, 5, " ,\t")*RADIAN;
163 __RotationalModeChange(lProjectionDirectionMapCreateInfo* linfo, int mode)
167 matrix3DParaTypeReal x, y, z;
169 for(i=0; i<linfo->LineNum; i++){
170 matrix3DRotationSetFollowingEulerAngle(Matrix,
171 linfo->RotationalMode[i],
175 MATRIX_3D_MODE_INITIALIZE);
176 matrix3DEulerAngleGetFromMatrix3D(Matrix, "ZONS", &x, &y, &z, 0);
180 fprintf(stderr, "%f %f %f\n",linfo->Phi[i]*DEGREE, linfo->Theta[i]*DEGREE, linfo->Psi[i]*DEGREE);
185 lProjectionDirectionMapCreate(lProjectionDirectionMapCreateInfo* linfo, int mode)
191 linfo->x = MemoryAllocate(double, linfo->LineNum, "in lProjectionDirectionMapCreate");
192 linfo->y = MemoryAllocate(double, linfo->LineNum, "in lProjectionDirectionMapCreate");
195 for(i=0; i<linfo->LineNum; i++){
199 radius = linfo->Theta[i]*DEGREE;
200 if(radius < 0) radius += 360;
201 if(radius > 180) radius -= 180;
202 if(radius > 90) radius = 180 - radius;
204 radius = 90 - radius;
206 linfo->x[i] = radius*cos((double)linfo->Phi[i]);
207 linfo->y[i] = radius*sin((double)linfo->Phi[i]);
210 if(linfo->Theta[i]*DEGREE < 0) radius = linfo->Theta[i]*DEGREE + 360;
211 else radius = linfo->Theta[i]*DEGREE;
213 if(radius > 180) radius -= 180;
215 radius = 180 - radius;
219 radius = 90 - radius;
222 linfo->x[i] = radius*cos((double)(linfo->Phi[i]/2));
223 linfo->y[i] = radius*sin((double)(linfo->Phi[i]/2));
226 linfo->x[i] = radius*cos((double)(linfo->Phi[i]/2+M_PI));
227 linfo->y[i] = radius*sin((double)(linfo->Phi[i]/2+M_PI));
231 linfo->x2 = MemoryAllocate(double, linfo->LineNum, "in lProjectionDirectionMapCreate");
232 linfo->y2 = MemoryAllocate(double, linfo->LineNum, "in lProjectionDirectionMapCreate");
233 if(linfo->Theta[i]*DEGREE < 0) radius = linfo->Theta[i]*DEGREE + 360;
234 else radius = linfo->Theta[i]*DEGREE;
236 if(radius > 180) radius -= 180;
238 radius = 180 - radius;
242 radius = 90 - radius;
245 linfo->x[j] = radius*cos((double)(linfo->Phi[i]));
246 linfo->y[j] = radius*sin((double)(linfo->Phi[i]));
250 linfo->x2[k] = radius*cos((double)(linfo->Phi[i]));
251 linfo->y2[k] = radius*sin((double)(linfo->Phi[i]));
268 __OutputFileWrite(lProjectionDirectionMapCreateInfo* linfo, FILE* fpt, int mode)
276 for(i=0; i<linfo->LineNum; i++){
277 fprintf(fpt, "%6.2f,%6.2f\n", linfo->x[i], linfo->y[i]);
281 if(linfo->numP > linfo->numM){
283 for(i=0; i<max; i++){
285 fprintf(fpt, "%6.2f,%6.2f\n",linfo->x[i], linfo->y[i]);
288 fprintf(fpt, "%6.2f,%6.2f \t %6.2f,%6.2f\n",linfo->x[i], linfo->y[i], linfo->x2[i], linfo->y2[i]);
294 for(i=0; i<max; i++){
296 fprintf(fpt, " \t %6.2f,%6.2f\n",linfo->x2[i], linfo->y2[i]);
299 fprintf(fpt, "%6.2f,%6.2f \t %6.2f,%6.2f\n",linfo->x[i], linfo->y[i], linfo->x2[i], linfo->y2[i]);
305 for(i=0; i<linfo->LineNum; i++){
306 fprintf(fpt, "%7.2f,%7.2f\n", linfo->x[i], linfo->y[i]);