IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 2, 2021, 1:50:33 PM (5 years ago)
Author:
eugene
Message:

add -raw, -value, -binning options to densify (as in cdensify) and fix usage message; init Rmin for match1d; init chisq for vgauss

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.data/densify.c

    r39233 r41516  
    1313  opihi_flt *x, *y;
    1414
    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  }
    2020
    2121  UseGraph = FALSE;
     
    2525  }
    2626
     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
    2734  float scale = 0.0;
    2835  if ((N = get_argument (argc, argv, "-scale"))) {
    2936    remove_argument (N, &argc, argv);
    3037    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]);
    3149    remove_argument (N, &argc, argv);
    3250  }
     
    4765    gprint (GP_ERR, "   OR: densify buffer x y -graph\n");
    4866    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");
    4971    return (FALSE);
    5072  }
     
    5577
    5678  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  }
    5786
    5887  REQUIRE_VECTOR_FLT (vx, FALSE);
     
    6897    Ymax = graphmode.ymax;
    6998    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);
    72101  } else {
    73102    Xmin = atof (argv[4]);
     
    91120  float scaleY = (scale > 0.0) ? scale / dY : 3.0;
    92121
    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;
    95124 
    96125  gfits_free_matrix (&bf[0].matrix);
     
    107136  x = vx[0].elements.Flt;
    108137  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
    109143  val = (float *)bf[0].matrix.buffer;
    110144  for (i = 0; i < vx[0].Nelements; i++, x++, y++) {
    111145    Xb = (*x - Xmin) / dX;
    112146    Yb = (*y - Ymin) / dY;
     147
     148    float F = 1.0;
     149    if (vv) { F = isFloatScale ? Fs[i] : Is[i]; }
     150
    113151    switch (PSFTYPE) {
    114152      case IS_DOT:
     
    117155        if (Xb < 0) continue;
    118156        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        }
    120162        break;
    121163      case IS_SQUARE:
     
    126168            if (ix < 0) continue;
    127169            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            }
    129175          }
    130176        }
     
    141187            if (ix < 0) continue;
    142188            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            }
    144194          }
    145195        }
     
    155205            if (ix < 0) continue;
    156206            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            }
    158212          }
    159213        }
Note: See TracChangeset for help on using the changeset viewer.