Changeset 16107 for trunk/Ohana/src/opihi/cmd.data
- Timestamp:
- Jan 17, 2008, 8:41:08 AM (19 years ago)
- Location:
- trunk/Ohana/src/opihi/cmd.data
- Files:
-
- 2 added
- 4 edited
-
Makefile (modified) (1 diff)
-
fft1d.c (modified) (3 diffs)
-
fft2d.c (modified) (3 diffs)
-
fft2d.old.c (added)
-
init.c (modified) (2 diffs)
-
test/fft2d.sh (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/Makefile
r16099 r16107 44 44 $(SRC)/fft1d.old.$(ARCH).o \ 45 45 $(SRC)/fft1d.$(ARCH).o \ 46 $(SRC)/fft2d.old.$(ARCH).o \ 46 47 $(SRC)/fft2d.$(ARCH).o \ 47 48 $(SRC)/fit2d.$(ARCH).o \ -
trunk/Ohana/src/opihi/cmd.data/fft1d.c
r16099 r16107 3 3 int fft1d (int argc, char **argv) { 4 4 5 int N pix, Nbit, ZeroImaginary;5 int N, Npix, Nbit, ZeroImaginary, forward; 6 6 Vector *Ire, *Iim, *Ore, *Oim; 7 8 forward = TRUE; 9 if ((N = get_argument (argc, argv, "-inverse"))) { 10 remove_argument (N, &argc, argv); 11 forward = FALSE; 12 } 7 13 8 14 if ((argc != 6) || (strcmp (argv[3], "to"))) { … … 22 28 Npix = Ire[0].Nelements; 23 29 if (!ZeroImaginary && (Npix != Iim[0].Nelements)) { 24 gprint (GP_ERR, "vector mismatch in size\n");30 gprint (GP_ERR, "vector size mismatch\n"); 25 31 return (FALSE); 26 32 } … … 50 56 } 51 57 52 fft (Ore[0].elements, Oim[0].elements, Npix, Nbit, TRUE);58 fft1D (Ore[0].elements, Oim[0].elements, Npix, Nbit, forward); 53 59 54 60 return (TRUE); -
trunk/Ohana/src/opihi/cmd.data/fft2d.c
r16099 r16107 3 3 int fft2d (int argc, char **argv) { 4 4 5 int i, N, Nx, Ny, Naxis[2]; 6 int Npix, ZeroImaginary, isign; 7 float *t1, *t2, *out, *temp; 5 int ZeroImaginary, forward; 6 int N, Nx, Ny; 8 7 Buffer *Ire, *Iim, *Ore, *Oim;; 9 8 10 isign = 1;9 forward = TRUE; 11 10 if ((N = get_argument (argc, argv, "-inverse"))) { 12 11 remove_argument (N, &argc, argv); 13 isign = -1;12 forward = FALSE; 14 13 } 15 14 … … 28 27 } 29 28 if ((Ire = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) return (FALSE); 29 30 Nx = Ire[0].header.Naxis[0]; 31 Ny = Ire[0].header.Naxis[1]; 32 33 // check input image dimensions (match lengths? binary lengths?) 34 if (!ZeroImaginary) { 35 if ((Nx != Iim[0].header.Naxis[0]) || 36 (Ny != Iim[0].header.Naxis[1])) { 37 gprint (GP_ERR, "image size mismatch\n"); 38 return (FALSE); 39 } 40 } 41 if (!IsBinary (Nx, NULL)) { 42 gprint (GP_ERR, "Nx is not a binary number!\n"); 43 return (FALSE); 44 } 45 if (!IsBinary (Ny, NULL)) { 46 gprint (GP_ERR, "Ny is not a binary number!\n"); 47 return (FALSE); 48 } 49 30 50 if ((Ore = SelectBuffer (argv[4], ANYBUFFER, TRUE)) == NULL) return (FALSE); 31 51 if ((Oim = SelectBuffer (argv[5], ANYBUFFER, TRUE)) == NULL) return (FALSE); … … 36 56 gfits_free_matrix (&Oim[0].matrix); 37 57 gfits_free_header (&Oim[0].header); 58 59 /* fix up output headers (real) & allocate data buffer */ 60 CreateBuffer (Ore, Nx, Ny, -32, 0.0, 1.0); 61 CreateBuffer (Oim, Nx, Ny, -32, 0.0, 1.0); 38 62 39 /* get image dimensions, check value */ 40 Npix = Ire[0].header.Naxis[0]*Ire[0].header.Naxis[1]; 41 Nx = Ire[0].header.Naxis[0]; 42 Ny = Ire[0].header.Naxis[1]; 43 Naxis[0] = Ny; Naxis[1] = Nx; 44 if (!IsBinaryOld (Npix)) { 45 gprint (GP_ERR, "dimensions are not binary!\n"); 46 return (FALSE); 63 gfits_copy_header (&Ire[0].header, &Ore[0].header); 64 gfits_copy_header (&Ire[0].header, &Oim[0].header); 65 66 // copy data to output buffers (fft is done in place) 67 memcpy (Ore[0].matrix.buffer, Ire[0].matrix.buffer, Nx*Ny*sizeof(float)); 68 69 if (ZeroImaginary) { 70 memset (Oim[0].matrix.buffer, 0, Nx*Ny*sizeof(float)); 71 } else { 72 memcpy (Oim[0].matrix.buffer, Iim[0].matrix.buffer, Nx*Ny*sizeof(float)); 47 73 } 48 49 /* create working space */50 t1 = (float *) Ire[0].matrix.buffer;51 ALLOCATE (temp, float, 2*Npix);52 out = temp;53 74 54 /* copy input to working space */55 if (ZeroImaginary) {56 for (i = 0; i < Npix; i++, t1++) {57 *out = *t1;58 out++;59 *out = 0;60 out++;61 }62 } else {63 t2 = (float *) Iim[0].matrix.buffer;64 for (i = 0; i < Npix; i++, t1++, t2++) {65 *out = *t1;66 out++;67 *out = *t2;68 out++;69 }70 }71 72 75 /* run the fft */ 73 fftN (temp, Naxis, 2, isign); 74 75 /* fix up output headers (real) */ 76 gfits_copy_header (&Ire[0].header, &Ore[0].header); 77 gfits_modify (&Ore[0].header, "NAXIS1", "%d", 1, Nx); 78 gfits_modify (&Ore[0].header, "NAXIS2", "%d", 1, Ny); 79 Ore[0].header.Naxis[0] = Nx; 80 Ore[0].header.Naxis[1] = Ny; 81 Ore[0].bitpix = Ire[0].bitpix; 82 Ore[0].unsign = Ire[0].unsign; 83 Ore[0].bscale = Ire[0].bscale; 84 Ore[0].bzero = Ire[0].bzero; 85 gfits_create_matrix (&Ore[0].header, &Ore[0].matrix); 86 87 /* fix up output headers (imaginary) */ 88 gfits_copy_header (&Ire[0].header, &Oim[0].header); 89 gfits_modify (&Oim[0].header, "NAXIS1", "%d", 1, Nx); 90 gfits_modify (&Oim[0].header, "NAXIS2", "%d", 1, Ny); 91 Oim[0].header.Naxis[0] = Nx; 92 Oim[0].header.Naxis[1] = Ny; 93 Oim[0].bitpix = Ire[0].bitpix; 94 Oim[0].unsign = Ire[0].unsign; 95 Oim[0].bscale = Ire[0].bscale; 96 Oim[0].bzero = Ire[0].bzero; 97 gfits_create_matrix (&Oim[0].header, &Oim[0].matrix); 98 99 /* move data from working space to output buffers */ 100 out = temp; 101 t1 = (float *) Ore[0].matrix.buffer; 102 t2 = (float *) Oim[0].matrix.buffer; 103 for (i = 0; i < Npix; i++, t1++, t2++) { 104 *t1 = *out / Npix; 105 out ++; 106 *t2 = *out / Npix; 107 out ++; 108 } 109 110 free (temp); 76 fftND ((float *)Ore[0].matrix.buffer, (float *)Oim[0].matrix.buffer, 2, Ire[0].header.Naxis, forward); 111 77 112 78 return (TRUE); -
trunk/Ohana/src/opihi/cmd.data/init.c
r16099 r16107 29 29 int fft1d PROTO((int, char **)); 30 30 int fft2d PROTO((int, char **)); 31 int fft2dold PROTO((int, char **)); 31 32 int fit2d PROTO((int, char **)); 32 33 int fit PROTO((int, char **)); … … 149 150 {"fft1d", fft1d, "fft on the pixel-stream in an image"}, 150 151 {"fft2d", fft2d, "fft on an image"}, 152 {"fft2dold", fft2dold, "fft on an image"}, 151 153 {"fit", fit, "fit polynomial to vector pair"}, 152 154 {"fit2d", fit2d, "fit 2-d polynomial to vector triplet"},
Note:
See TracChangeset
for help on using the changeset viewer.
