-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfftzoom.c
128 lines (95 loc) · 3.93 KB
/
fftzoom.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/** @file fftzoom.c
*/
#include "CommandLineInterface/CLIcore.h"
#include "COREMOD_memory/COREMOD_memory.h"
#include "dofft.h"
#include "permut.h"
int fftczoom(const char *ID_name, const char *IDout_name, long factor)
{
imageID ID;
imageID ID1;
uint32_t naxes[2];
double coeff;
char tmpzname[STRINGMAXLEN_IMGNAME];
char tmpz1name[STRINGMAXLEN_IMGNAME];
ID = image_ID(ID_name);
naxes[0] = data.image[ID].md[0].size[0];
naxes[1] = data.image[ID].md[0].size[1];
coeff = 1.0 / (factor * factor * naxes[0] * naxes[1]);
permut(ID_name);
WRITE_IMAGENAME(tmpzname, "_tmpz_%d", (int) getpid());
do2dfft(ID_name, tmpzname);
permut(ID_name);
permut(tmpzname);
ID = image_ID(tmpzname);
WRITE_IMAGENAME(tmpz1name, "_tmpz1_%d", (int) getpid());
create_2DCimage_ID(tmpz1name, factor * naxes[0], factor * naxes[1], &ID1);
for(uint32_t ii = 0; ii < naxes[0]; ii++)
for(uint32_t jj = 0; jj < naxes[1]; jj++)
{
data.image[ID1]
.array
.CF[(jj + factor * naxes[1] / 2 - naxes[1] / 2) * naxes[0] *
factor +
(ii + factor * naxes[0] / 2 - naxes[0] / 2)]
.re = data.image[ID].array.CF[jj * naxes[0] + ii].re * coeff;
data.image[ID1]
.array
.CF[(jj + factor * naxes[1] / 2 - naxes[1] / 2) * naxes[0] *
factor +
(ii + factor * naxes[0] / 2 - naxes[0] / 2)]
.im = data.image[ID].array.CF[jj * naxes[0] + ii].im * coeff;
}
delete_image_ID(tmpzname, DELETE_IMAGE_ERRMODE_WARNING);
permut(tmpz1name);
do2dffti(tmpz1name, IDout_name);
permut(IDout_name);
delete_image_ID(tmpz1name, DELETE_IMAGE_ERRMODE_WARNING);
return (0);
}
int fftzoom(const char *ID_name, const char *IDout_name, long factor)
{
imageID ID;
imageID ID1;
uint32_t naxes[2];
double coeff;
ID = image_ID(ID_name);
naxes[0] = data.image[ID].md[0].size[0];
naxes[1] = data.image[ID].md[0].size[1];
coeff = 1.0 / (factor * factor * naxes[0] * naxes[1]);
permut(ID_name);
CREATE_IMAGENAME(tmpzname, "_tmpz_%d", (int) getpid());
do2drfft(ID_name, tmpzname);
permut(ID_name);
permut(tmpzname);
ID = image_ID(tmpzname);
CREATE_IMAGENAME(tmpz1name, "_tmpz1_%d", (int) getpid());
create_2DCimage_ID(tmpz1name, factor * naxes[0], factor * naxes[1], &ID1);
for(uint32_t ii = 0; ii < naxes[0]; ii++)
for(uint32_t jj = 0; jj < naxes[1]; jj++)
{
data.image[ID1]
.array
.CF[(jj + factor * naxes[1] / 2 - naxes[1] / 2) * naxes[0] *
factor +
(ii + factor * naxes[0] / 2 - naxes[0] / 2)]
.re = data.image[ID].array.CF[jj * naxes[0] + ii].re * coeff;
data.image[ID1]
.array
.CF[(jj + factor * naxes[1] / 2 - naxes[1] / 2) * naxes[0] *
factor +
(ii + factor * naxes[0] / 2 - naxes[0] / 2)]
.im = data.image[ID].array.CF[jj * naxes[0] + ii].im * coeff;
}
delete_image_ID(tmpzname, DELETE_IMAGE_ERRMODE_WARNING);
permut(tmpz1name);
CREATE_IMAGENAME(tmpz2name, "_tmpz2_%d", (int) getpid());
do2dffti(tmpz1name, tmpz2name);
permut(tmpz2name);
delete_image_ID(tmpz1name, DELETE_IMAGE_ERRMODE_WARNING);
CREATE_IMAGENAME(tbename, "_tbe_%d", (int) getpid());
mk_reim_from_complex(tmpz2name, IDout_name, tbename, 0);
delete_image_ID(tbename, DELETE_IMAGE_ERRMODE_WARNING);
delete_image_ID(tmpz2name, DELETE_IMAGE_ERRMODE_WARNING);
return (0);
}