Changeset 42942 for trunk/Ohana/src/opihi/cmd.data/tdhistogram.c
- Timestamp:
- Nov 12, 2025, 5:00:47 PM (8 months ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/tdhistogram.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/tdhistogram.c
r41891 r42942 5 5 int tdhistogram (int argc, char **argv) { 6 6 7 int i, N x, Ny, Nz, N;7 int i, N; 8 8 float *val; 9 9 Buffer *bf; 10 10 Vector *vx, *vy, *vz, *range; 11 11 opihi_flt *x, *y, *z; 12 int kapa; 13 Graphdata graphmode; 14 15 int useGraph = FALSE; 16 if ((N = get_argument (argc, argv, "-graph"))) { 17 remove_argument (N, &argc, argv); 18 useGraph = TRUE; 19 if (!style_args (&graphmode, &argc, argv, &kapa)) return FALSE; 20 } 12 21 13 22 int reuse = FALSE; 14 23 if ((N = get_argument (argc, argv, "-reuse"))) { 24 if (useGraph) { gprint (GP_ERR, "-reuse and -graph are incompatible\n"); return FALSE; } 15 25 remove_argument (N, &argc, argv); 16 26 reuse = TRUE; 27 } 28 29 int Nx = 100; 30 double dx = NAN; 31 if ((N = get_argument (argc, argv, "-dx"))) { 32 if (useGraph) { gprint (GP_ERR, "-dx and -graph are incompatible\n"); return FALSE; } 33 remove_argument (N, &argc, argv); 34 dx = atof(argv[N]); 35 remove_argument (N, &argc, argv); 36 } 37 if ((N = get_argument (argc, argv, "-Nx"))) { 38 if (useGraph) { gprint (GP_ERR, "-Nx and -graph are incompatible\n"); return FALSE; } 39 if (isfinite(dx)) { gprint (GP_ERR, "-Nx and -dx are incompatible\n"); return FALSE; } 40 remove_argument (N, &argc, argv); 41 Nx = atoi(argv[N]); 42 remove_argument (N, &argc, argv); 43 } 44 45 int Ny = 100; 46 double dy = NAN; 47 if ((N = get_argument (argc, argv, "-dy"))) { 48 if (useGraph) { gprint (GP_ERR, "-dx and -graph are incompatible\n"); return FALSE; } 49 remove_argument (N, &argc, argv); 50 dy = atof(argv[N]); 51 remove_argument (N, &argc, argv); 52 } 53 if ((N = get_argument (argc, argv, "-Ny"))) { 54 if (useGraph) { gprint (GP_ERR, "-Ny and -graph are incompatible\n"); return FALSE; } 55 if (isfinite(dy)) { gprint (GP_ERR, "-Ny and -dy are incompatible\n"); return FALSE; } 56 remove_argument (N, &argc, argv); 57 Ny = atoi(argv[N]); 58 remove_argument (N, &argc, argv); 59 } 60 61 int Nz = 100; 62 double dz = NAN; 63 if ((N = get_argument (argc, argv, "-dz"))) { 64 remove_argument (N, &argc, argv); 65 dz = atof(argv[N]); 66 remove_argument (N, &argc, argv); 67 } 68 if ((N = get_argument (argc, argv, "-Nz"))) { 69 if (useGraph) { gprint (GP_ERR, "-Nz and -graph are incompatible\n"); return FALSE; } 70 if (isfinite(dz)) { gprint (GP_ERR, "-Nz and -dz are incompatible\n"); return FALSE; } 71 remove_argument (N, &argc, argv); 72 Nz = atoi(argv[N]); 73 remove_argument (N, &argc, argv); 74 } 75 76 int binning = 1; 77 if ((N = get_argument (argc, argv, "-binning"))) { 78 if (!useGraph) { gprint (GP_ERR, "-binning requires -graph\n"); return FALSE; } 79 remove_argument (N, &argc, argv); 80 binning = atoi(argv[N]); 81 remove_argument (N, &argc, argv); 17 82 } 18 83 … … 24 89 } 25 90 26 double dx = NAN; 27 if ((N = get_argument (argc, argv, "-dx"))) { 28 remove_argument (N, &argc, argv); 29 dx = atof(argv[N]); 30 remove_argument (N, &argc, argv); 31 } 32 double dy = NAN; 33 if ((N = get_argument (argc, argv, "-dy"))) { 34 remove_argument (N, &argc, argv); 35 dy = atof(argv[N]); 36 remove_argument (N, &argc, argv); 37 } 38 double dz = NAN; 39 if ((N = get_argument (argc, argv, "-dz"))) { 40 remove_argument (N, &argc, argv); 41 dz = atof(argv[N]); 42 remove_argument (N, &argc, argv); 43 } 44 45 int valid = (!reuse && (argc == 11)) || (reuse && (argc == 5)); 91 int valid = (reuse && (argc == 5)) || (useGraph && (argc == 7)) || (argc == 11); 46 92 if (!valid) { 47 93 gprint (GP_ERR, "USAGE: tdhistogram buffer x y z (Xmin) (Xmax) (Ymin) (Ymax) (Zmin) (Zmax) [-dx dx] [-dy dy] [-dz dz] [-range range]\n"); 94 gprint (GP_ERR, "USAGE: tdhistogram buffer x y z (Zmin) (Zmax) -graph [-binning N] [-dz dz] [-range range]\n"); 48 95 gprint (GP_ERR, " OR: tdhistogram buffer x y z -reuse\n"); 49 96 gprint (GP_ERR, " -dx, -dy, -dy specify the bin size in these directions\n"); 50 97 gprint (GP_ERR, " -range : generate an output vector corresponding to the elements in the z-direction\n"); 98 gprint (GP_ERR, " -graph : use X,Y range from active graph\n"); 99 gprint (GP_ERR, " -binning N : use binning to define bin sizes relative to graph\n"); 51 100 gprint (GP_ERR, " output buffer is 3D\n"); 52 101 return (FALSE); … … 63 112 double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax; 64 113 65 if (!reuse) { 66 Xmin = atof(argv[5]); 67 Xmax = atof(argv[6]); 68 if (!isfinite(dx)) { 69 Nx = 100; 70 dx = (Xmax - Xmin) / (Nx - 1); 71 } else { 72 Nx = (Xmax - Xmin) / dx + 1; 73 } 74 if (dx < 0) { 75 gprint (GP_ERR, "invalid value for delta: %f\n", dx); 76 return (FALSE); 77 } 78 Ymin = atof(argv[7]); 79 Ymax = atof(argv[8]); 80 if (!isfinite(dy)) { 81 Ny = 100; 82 dy = (Ymax - Ymin) / (Ny - 1); 83 } else { 84 Ny = (Ymax - Ymin) / dy + 1; 85 } 86 if (dy < 0) { 87 gprint (GP_ERR, "invalid value for delta: %f\n", dy); 88 return (FALSE); 89 } 90 Zmin = atof(argv[9]); 91 Zmax = atof(argv[10]); 92 if (!isfinite(dz)) { 93 Nz = 100; 94 dz = (Zmax - Zmin) / (Nz - 1); 95 } else { 96 Nz = (Zmax - Zmin) / dz + 1; 97 } 98 if (dz < 0) { 99 gprint (GP_ERR, "invalid value for delta: %f\n", dz); 100 return (FALSE); 101 } 102 103 if (Nz > 1000) { 104 gprint (GP_ERR, "warning: delta of %f will result in %d histogram bins\n", dz, Nz); 105 return (FALSE); 106 } 107 } else { 114 if (reuse) { 108 115 gfits_scan (&bf[0].header, "XMIN", "%lf", 1, &Xmin); 109 116 gfits_scan (&bf[0].header, "XMAX", "%lf", 1, &Xmax); … … 118 125 Ny = bf[0].header.Naxis[1]; 119 126 Nz = bf[0].header.Naxis[2]; 120 } 121 127 goto got_range; 128 } 129 130 if (useGraph) { 131 int Xpix, Ypix; 132 KapaGetImageRange (kapa, &Xmin, &Xmax, &Ymax, &Ymin, &Xpix, &Ypix); 133 Xmax = graphmode.xmax; 134 Xmin = graphmode.xmin; 135 Ymax = graphmode.ymax; 136 Ymin = graphmode.ymin; 137 138 // (dX, dY) are the pixel scale of the output image (output pixels / input pixels) 139 140 dx = binning * (Xmax - Xmin) / (Xpix - 1); 141 dy = binning * (Ymax - Ymin) / (Ypix - 1); 142 143 Nx = abs((Xmax - Xmin) / dx) + 1; 144 Ny = abs((Ymax - Ymin) / dy) + 1; 145 146 // XXX : note that Zmin and Zmax have a different argv location in useGraph 147 Zmin = atof(argv[5]); 148 Zmax = atof(argv[6]); 149 150 goto set_Zvalues; 151 } 152 153 // This section is only used if !reuse and !useGraph 154 Xmin = atof(argv[5]); 155 Xmax = atof(argv[6]); 156 if (!isfinite(dx)) { 157 dx = (Xmax - Xmin) / (Nx - 1); 158 } else { 159 Nx = (Xmax - Xmin) / dx + 1; 160 } 161 if (dx < 0) { 162 gprint (GP_ERR, "invalid value for delta: %f\n", dx); 163 return (FALSE); 164 } 165 Ymin = atof(argv[7]); 166 Ymax = atof(argv[8]); 167 if (!isfinite(dy)) { 168 dy = (Ymax - Ymin) / (Ny - 1); 169 } else { 170 Ny = (Ymax - Ymin) / dy + 1; 171 } 172 if (dy < 0) { 173 gprint (GP_ERR, "invalid value for delta: %f\n", dy); 174 return (FALSE); 175 } 176 // XXX : note that Zmin and Zmax have a different argv location in useGraph 177 Zmin = atof(argv[9]); 178 Zmax = atof(argv[10]); 179 180 set_Zvalues: 181 if (!isfinite(dz)) { 182 dz = (Zmax - Zmin) / (Nz - 1); 183 } else { 184 Nz = (Zmax - Zmin) / dz + 1; 185 } 186 if (dz < 0) { 187 gprint (GP_ERR, "invalid value for delta: %f\n", dz); 188 return (FALSE); 189 } 190 if (Nz > 1000) { 191 gprint (GP_ERR, "warning: delta of %f will result in %d histogram bins\n", dz, Nz); 192 return (FALSE); 193 } 194 195 got_range: 122 196 REQUIRE_VECTOR_FLT (vx, FALSE); 123 197 REQUIRE_VECTOR_FLT (vy, FALSE);
Note:
See TracChangeset
for help on using the changeset viewer.
