IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Dec 7, 2008, 3:31:01 PM (18 years ago)
Author:
eugene
Message:

big update from eam_branch_20081124 with updates to Opihi math

File:
1 edited

Legend:

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

    r7917 r20936  
    33int vclip (int argc, char **argv) {
    44
    5   int i, Npix, DO_NAN, DO_INF, N;
     5  int i, Npix, DO_NAN, DO_INF, DO_CLIP, N;
    66  double min, Vmin, max, Vmax, nan_val, inf_val;
    7   float *in;
    87  Vector *vec;
    98
     
    3332  if ((vec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
    3433
     34  DO_CLIP = FALSE;
    3535  if (argc == 6) {
    3636    min = atof (argv[2]);
     
    3838    max = atof (argv[4]);
    3939    Vmax = atof (argv[5]);
     40    DO_CLIP = TRUE;
    4041  }
    4142
     43  if (DO_NAN && vec[0].type == OPIHI_INT) {
     44    gprint (GP_ERR, "  warning : clipping on NAN is invalid for INT vectors\n");
     45    return (FALSE);
     46  }
     47   
     48  if (DO_INF && vec[0].type == OPIHI_INT) {
     49    gprint (GP_ERR, "  warning : clipping on INF is invalid for INT vectors\n");
     50    return (FALSE);
     51  }
     52   
    4253  Npix = vec[0].Nelements;
    43   in =   vec[0].elements;
    4454
    45   if (argc == 6) {
     55  if (vec[0].type == OPIHI_FLT) {
     56    opihi_flt *in =  vec[0].elements.Flt;
    4657    for (i = 0; i < Npix; i++, in++) {
    47       if (*in < min)
     58      if (DO_CLIP && (*in < min)) {
    4859        *in = Vmin;
    49       if (*in > max)
     60      }
     61      if (DO_CLIP && (*in > max)) {
    5062        *in = Vmax;
    51     }
    52   }
    53   in = vec[0].elements;
    54   if (DO_NAN) {
    55     for (i = 0; i < Npix; i++, in++) {
    56       if (isnan (*in)) {
     63      }
     64      if (!finite (*in) && DO_INF) {
     65        *in = inf_val;
     66      }
     67      if (isnan (*in) && DO_NAN) {
    5768        *in = nan_val;
    5869      }
    5970    }
    60   }
    61   in = vec[0].elements;
    62   if (DO_INF) {
     71  } else {
     72    opihi_int *in =  vec[0].elements.Int;
    6373    for (i = 0; i < Npix; i++, in++) {
    64       if (!finite (*in)) {
    65         *in = inf_val;
     74      if (DO_CLIP && (*in < min)) {
     75        *in = Vmin;
     76      }
     77      if (DO_CLIP && (*in > max)) {
     78        *in = Vmax;
    6679      }
    6780    }
    6881  }
    6982  return (TRUE);
    70 
    7183}
    72 
    73 
Note: See TracChangeset for help on using the changeset viewer.