OSDN Git Service

Modified: lmrcImageTranspose
[eos/base.git] / src / Objects / DataManip / mrcImage / src / lmrcImageTranspose.c
1 /*
2 # %M% %Y% %I%
3 # The latest update : %G% at %U%
4 #
5 #%Z% lmrcImageTranspose ver %I%
6 #%Z% Created by 
7 #%Z%
8 #%Z% Usage : lmrcImageTranspose 
9 #%Z% Attention
10 #%Z%
11 */
12 static char __sccs_id[] = "%Z%lmrcImageTranspose ver%I%; Date:%D% %Z%";
13
14
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18 #include <math.h>                  
19
20 #define DEBUG
21 #include "genUtil.h"
22 #include "mrcImage.h"
23 #include "mrcRefUtil.h"
24 #include "./lmrcImageTranspose.h"
25
26
27 void
28 lmrcImageTransposeUsage(FILE* fpt)
29 {
30 fprintf(stdout ,"----- mode1 -----\n");
31 fprintf(stdout ,"0:+90degree in xy plane around z-axis: x->+y\n");
32 fprintf(stdout ,"1:-90degree in xy plane around z-axis: x->-y\n");
33 fprintf(stdout ,"2:+90degree in yz plane around x-axis: y->+z\n");
34 fprintf(stdout ,"3:-90degree in yz plane around x-axis: y->-z\n");
35 fprintf(stdout ,"4:+90degree in zx plane around y-axis: z->+x\n");
36 fprintf(stdout ,"5:-90degree in zx plane around y-axis: z->-x\n");
37 fprintf(stdout ,"----- mode2 -----\n");
38 fprintf(stdout ,"0: Image\n");
39 fprintf(stdout ,"1: Ref Image(mode1 =0 or 1)\n");
40 }
41
42 void lmrcImageTranspose(mrcImage* out , mrcImage* in ,int mode ,int mode2)
43 {
44   
45 /* variables */
46   int x,y,ox,oy,oz,flag,z;
47   double data;
48   mrcRefHeader header;
49
50 /* Initialization */
51   out->Header = in->Header;
52   switch (mode){
53   case 0:
54   case 1: {
55     out->HeaderN.x = in->HeaderN.y;
56     out->HeaderN.y = in->HeaderN.x;
57     break;
58   }
59   case 2:
60   case 3: {
61     out->HeaderN.y = in->HeaderN.z;
62     out->HeaderN.z = in->HeaderN.y;
63   }
64   case 4:
65   case 5: {
66     out->HeaderN.z = in->HeaderN.x;
67     out->HeaderN.x = in->HeaderN.z;
68   }
69   }
70   mrcInit(out,NULL);
71
72 /* begin */
73   flag = 0;
74   if (mode2){
75     flag = 1;
76     lmrcRefHeaderGet(&header ,in);
77     lmrcRefHeaderSet(out ,&header);
78   }
79   for (z=flag; z < in->HeaderN.z ;z++){
80   for (y=0;    y < in->HeaderN.y ;y++){
81   for (x=0;    x < in->HeaderN.x ;x++){
82         mrcPixelDataGet(in ,x ,y ,z ,&data ,mrcPixelRePart ,mrcPixelHowNearest);
83         switch (mode){
84         case 0:
85           ox = in->HeaderN.y - 1 - y;
86           oy = x;
87           oz = z;
88           break;
89         case 1:
90           ox = y;
91           oy = in->HeaderN.x - 1 - x;
92           oz = z;
93           break;
94         case 2:
95           ox = x;
96           oy = in->HeaderN.z - 1 - z;
97           oz = y;
98           break;
99         case 3:
100           ox = x;
101           oy = z;
102           oz = in->HeaderN.y - -1 - y;
103           break;
104         case 4:
105           ox = z;
106           oy = y;
107           oz = in->HeaderN.x - 1 - x;
108           break;
109         case 5:
110           ox = in->HeaderN.z - 1 - z;
111           oy = y;
112           oz = x;
113           break;
114         
115         }
116         mrcPixelDataSet(out, ox, oy, oz, data, mrcPixelRePart);
117   }
118   }
119   }
120   mrcStatDataSet(out,0);
121 }
122       
123         
124
125
126
127