Changeset 41516 for trunk/Ohana/src/opihi/cmd.data/densify.c
- Timestamp:
- Apr 2, 2021, 1:50:33 PM (5 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/densify.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/densify.c
r39233 r41516 13 13 opihi_flt *x, *y; 14 14 15 //int Normalize = TRUE;16 //if ((N = get_argument (argc, argv, "-raw"))) {17 //remove_argument (N, &argc, argv);18 //Normalize = FALSE;19 //}15 int Normalize = TRUE; 16 if ((N = get_argument (argc, argv, "-raw"))) { 17 remove_argument (N, &argc, argv); 18 Normalize = FALSE; 19 } 20 20 21 21 UseGraph = FALSE; … … 25 25 } 26 26 27 Vector *vv = NULL; 28 if ((N = get_argument (argc, argv, "-value"))) { 29 remove_argument (N, &argc, argv); 30 if ((vv = SelectVector (argv[N], ANYVECTOR, TRUE)) == NULL) return (FALSE); 31 remove_argument (N, &argc, argv); 32 } 33 27 34 float scale = 0.0; 28 35 if ((N = get_argument (argc, argv, "-scale"))) { 29 36 remove_argument (N, &argc, argv); 30 37 scale = atof(argv[N]); 38 remove_argument (N, &argc, argv); 39 } 40 41 int binning = 1; 42 if ((N = get_argument (argc, argv, "-binning"))) { 43 if (!UseGraph) { 44 gprint (GP_ERR, "-binning only valid for -graph option\n"); 45 return FALSE; 46 } 47 remove_argument (N, &argc, argv); 48 binning = atoi(argv[N]); 31 49 remove_argument (N, &argc, argv); 32 50 } … … 47 65 gprint (GP_ERR, " OR: densify buffer x y -graph\n"); 48 66 gprint (GP_ERR, " option: -psf [dot] (circle) (square) (gauss)\n"); 67 gprint (GP_ERR, " other options:\n"); 68 gprint (GP_ERR, " -raw : do not renormalize PSF\n"); 69 gprint (GP_ERR, " -scale : spatial scale factor for PSF (radius, half-width, or sigma)\n"); 70 gprint (GP_ERR, " -value (vector) : multiply sum by the given vector\n"); 49 71 return (FALSE); 50 72 } … … 55 77 56 78 if (vx[0].Nelements != vy[0].Nelements) return (FALSE); 79 80 if (vv) { 81 if (vv[0].Nelements != vx[0].Nelements) { 82 gprint (GP_ERR, "mis-match in vector lengths\n"); 83 return FALSE; 84 } 85 } 57 86 58 87 REQUIRE_VECTOR_FLT (vx, FALSE); … … 68 97 Ymax = graphmode.ymax; 69 98 Ymin = graphmode.ymin; 70 dX = (Xmax - Xmin) / (Xpix - 1);71 dY = (Ymax - Ymin) / (Ypix - 1);99 dX = binning * (Xmax - Xmin) / (Xpix - 1); 100 dY = binning * (Ymax - Ymin) / (Ypix - 1); 72 101 } else { 73 102 Xmin = atof (argv[4]); … … 91 120 float scaleY = (scale > 0.0) ? scale / dY : 3.0; 92 121 93 Nx = (Xmax - Xmin) / dX+ 1;94 Ny = (Ymax - Ymin) / dY+ 1;122 Nx = abs((Xmax - Xmin) / dX) + 1; 123 Ny = abs((Ymax - Ymin) / dY) + 1; 95 124 96 125 gfits_free_matrix (&bf[0].matrix); … … 107 136 x = vx[0].elements.Flt; 108 137 y = vy[0].elements.Flt; 138 139 opihi_flt *Fs = vv ? vv[0].elements.Flt : NULL; 140 opihi_int *Is = vv ? vv[0].elements.Int : NULL; 141 int isFloatScale = (vv && vv[0].type == OPIHI_FLT); 142 109 143 val = (float *)bf[0].matrix.buffer; 110 144 for (i = 0; i < vx[0].Nelements; i++, x++, y++) { 111 145 Xb = (*x - Xmin) / dX; 112 146 Yb = (*y - Ymin) / dY; 147 148 float F = 1.0; 149 if (vv) { F = isFloatScale ? Fs[i] : Is[i]; } 150 113 151 switch (PSFTYPE) { 114 152 case IS_DOT: … … 117 155 if (Xb < 0) continue; 118 156 if (Yb < 0) continue; 119 val[Xb + Yb*Nx] ++; 157 if (vv) { 158 val[Xb + Yb*Nx] += F; 159 } else { 160 val[Xb + Yb*Nx] ++; 161 } 120 162 break; 121 163 case IS_SQUARE: … … 126 168 if (ix < 0) continue; 127 169 if (iy < 0) continue; 128 val[ix + iy*Nx] += fSquare; 170 if (vv) { 171 val[ix + iy*Nx] += Normalize ? fSquare*F : F; 172 } else { 173 val[ix + iy*Nx] += Normalize ? fSquare : 1.0; 174 } 129 175 } 130 176 } … … 141 187 if (ix < 0) continue; 142 188 if (iy < 0) continue; 143 val[ix + iy*Nx] += fCircle; 189 if (vv) { 190 val[Xb + Yb*Nx] += Normalize ? fCircle*F : F; 191 } else { 192 val[Xb + Yb*Nx] += Normalize ? fCircle : 1.0; 193 } 144 194 } 145 195 } … … 155 205 if (ix < 0) continue; 156 206 if (iy < 0) continue; 157 val[ix + iy*Nx] += fGauss*exp(-fSigma*r2); 207 if (vv) { 208 val[Xb + Yb*Nx] += F*fGauss*exp(-fSigma*r2); 209 } else { 210 val[Xb + Yb*Nx] += fGauss*exp(-fSigma*r2); 211 } 158 212 } 159 213 }
Note:
See TracChangeset
for help on using the changeset viewer.
