Changeset 40334
- Timestamp:
- Jan 31, 2018, 9:52:31 AM (8 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/mslice.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/mslice.c
r39233 r40334 3 3 int mslice (int argc, char **argv) { 4 4 5 int i;5 int N; 6 6 Buffer *in, *out; 7 7 8 int Dir = 0; 9 if ((N = get_argument (argc, argv, "-x"))) { 10 remove_argument (N, &argc, argv); 11 Dir = 1; 12 } 13 if ((N = get_argument (argc, argv, "-y"))) { 14 remove_argument (N, &argc, argv); 15 if (Dir) { 16 gprint (GP_ERR, "ERROR: multiple -x,-y,-z options are not allowed\n"); 17 return FALSE; 18 } 19 Dir = 2; 20 } 21 if ((N = get_argument (argc, argv, "-z"))) { 22 remove_argument (N, &argc, argv); 23 if (Dir) { 24 gprint (GP_ERR, "ERROR: multiple -x,-y,-z options are not allowed\n"); 25 return FALSE; 26 } 27 Dir = 3; 28 } 29 if (!Dir) Dir = 3; 30 8 31 if (argc != 4) { 9 gprint (GP_ERR, "USAGE: mget <input> <output> plane\n"); 32 gprint (GP_ERR, "USAGE: mslice <input> <output> plane [-x,-y,-z]\n"); 33 gprint (GP_ERR, " -z is default\n"); 10 34 return (FALSE); 11 35 } … … 24 48 int Nz = in[0].matrix.Naxis[2]; 25 49 50 int NplaneMax = 0; 51 int Nout1 = 0; 52 int Nout2 = 0; 53 switch (Dir) { 54 case 1: NplaneMax = Nx; Nout1 = Ny; Nout2 = Nz; break; 55 case 2: NplaneMax = Ny; Nout1 = Nx; Nout2 = Nz; break; 56 case 3: NplaneMax = Nz; Nout1 = Nx; Nout2 = Ny; break; 57 default: myAbort ("impossible"); 58 } 59 26 60 int invalid = FALSE; 27 61 invalid = invalid || (plane < 0); 28 invalid = invalid || (plane >= N z);62 invalid = invalid || (plane >= NplaneMax); 29 63 if (invalid) { 30 gprint (GP_ERR, "plane %d out of range \n", plane);64 gprint (GP_ERR, "plane %d out of range (max = %d)\n", plane, NplaneMax); 31 65 return (FALSE); 32 66 } 33 67 34 68 /* I should encapsulate this in a create_default_buffer */ 69 35 70 gfits_free_matrix (&out[0].matrix); 36 71 gfits_free_header (&out[0].header); 37 if (!CreateBuffer (out, N x, Ny, -32, 1.0, 0.0)) return FALSE;72 if (!CreateBuffer (out, Nout1, Nout2, -32, 1.0, 0.0)) return FALSE; 38 73 39 float *inF = (float *) in[0].matrix.buffer + plane*Nx*Ny; 40 float *outF = (float *) out[0].matrix.buffer; 74 // pixel (ix, iy, iz) : in[0].matrix.buffer + ix + iy*Nx + iz*Nx*Ny 41 75 42 for (i = 0; i < Nx*Ny; i++, inF ++, outF++) { 43 *outF = *inF; 76 switch (Dir) { 77 case 1: { 78 float *outF = (float *) out[0].matrix.buffer; 79 80 // pixel (ix, iy, iz) : in[0].matrix.buffer + ix + iy*Nx + iz*Nx*Ny 81 82 for (int iz = 0; iz < Nz; iz++) { 83 float *inF = (float *) in[0].matrix.buffer + plane + iz*Nx*Ny; 84 for (int iy = 0; iy < Ny; iy++, inF += Nx, outF++) { 85 *outF = *inF; 86 } 87 } 88 break; 89 } 90 case 2: { 91 92 float *outF = (float *) out[0].matrix.buffer; 93 94 for (int iz = 0; iz < Nz; iz++) { 95 float *inF = (float *) in[0].matrix.buffer + plane*Nx + iz*Nx*Ny; 96 for (int ix = 0; ix < Nx; ix++, inF++, outF++) { 97 *outF = *inF; 98 } 99 } 100 break; 101 } 102 case 3: { 103 float *inF = (float *) in[0].matrix.buffer + plane*Nx*Ny; 104 float *outF = (float *) out[0].matrix.buffer; 105 106 for (int i = 0; i < Nx*Ny; i++, inF ++, outF++) { 107 *outF = *inF; 108 } 109 break; 110 } 111 default: myAbort ("impossible"); 44 112 } 45 113 return (TRUE);
Note:
See TracChangeset
for help on using the changeset viewer.
