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/fit.c

    r16059 r20936  
    88  int N, Weight, Quiet, ClipNiter;
    99  Vector *xvec, *yvec, *dyvec;
    10   float *x, *y, *dy, *yf, *yfit;
     10  opihi_flt *x, *y, *dy, *yf, *yfit;
    1111  char name[64], *mask;
    1212
     
    5353    return (FALSE);
    5454  }
    55   if (Weight && xvec[0].Nelements != dyvec[0].Nelements) {
    56     gprint (GP_ERR, "vectors must have same length\n");
    57     return (FALSE);
    58   }
    59  
     55  REQUIRE_VECTOR_FLT (xvec, FALSE);
     56  REQUIRE_VECTOR_FLT (yvec, FALSE);
     57
     58  if (Weight) {
     59    REQUIRE_VECTOR_FLT (dyvec, FALSE);
     60    if (xvec[0].Nelements != dyvec[0].Nelements) {
     61      gprint (GP_ERR, "vectors must have same length\n");
     62      return (FALSE);
     63    }
     64  }
     65 
     66
    6067  /* nterm is number of polynomial terms, starting at x^0 */
    6168  order = atof (argv[3]);
     
    6370  mterm = 2*nterm;
    6471
    65   ALLOCATE (yfit, float, xvec[0].Nelements);
     72  ALLOCATE (yfit, opihi_flt, xvec[0].Nelements);
    6673  ALLOCATE (mask, char, xvec[0].Nelements);
    6774  memset (mask, 0, xvec[0].Nelements);
     
    8895
    8996    /* perform linear fit */
    90     x = xvec[0].elements;
    91     y = yvec[0].elements;
    92     if (Weight) dy = dyvec[0].elements;
     97    x = xvec[0].elements.Flt;
     98    y = yvec[0].elements.Flt;
     99    if (Weight) dy = dyvec[0].elements.Flt;
    93100
    94101    for (i = 0; i < xvec[0].Nelements; i++, x++, y++) {
     
    121128
    122129    /* generate fitted values */
    123     x = xvec[0].elements;
     130    x = xvec[0].elements.Flt;
    124131    yf = yfit;
    125132    for (i = 0; i < xvec[0].Nelements; i++, x++, yf++) {
     
    134141
    135142    /* measure fit residual scatter */
    136     x  = xvec[0].elements;
    137     y  = yvec[0].elements;
     143    x  = xvec[0].elements.Flt;
     144    y  = yvec[0].elements.Flt;
    138145    yf = yfit;
    139146    dY = dY2 = 0;
     
    150157
    151158    /* mask outlier points */
    152     x  = xvec[0].elements;
    153     y  = yvec[0].elements;
     159    x  = xvec[0].elements.Flt;
     160    y  = yvec[0].elements.Flt;
    154161    yf = yfit;
    155162    Nmask = 0;
     
    193200    if ((fvec = SelectVector ("yfit", ANYVECTOR, TRUE)) == NULL) return (FALSE);   
    194201    if ((mvec = SelectVector ("mask", ANYVECTOR, TRUE)) == NULL) return (FALSE);   
    195     free (fvec[0].elements);
    196     fvec[0].elements = yfit;
     202    free (fvec[0].elements.Flt);
     203    fvec[0].elements.Flt = yfit;
    197204    fvec[0].Nelements = xvec[0].Nelements;
    198205    mvec[0].Nelements = xvec[0].Nelements;
    199206
    200     REALLOCATE (mvec[0].elements, float, xvec[0].Nelements);
     207    REALLOCATE (mvec[0].elements.Flt, opihi_flt, xvec[0].Nelements);
    201208    for (i = 0; i < xvec[0].Nelements; i++) {
    202       mvec[0].elements[i] = mask[i];
     209      mvec[0].elements.Flt[i] = mask[i];
    203210    }
    204211  } else {
Note: See TracChangeset for help on using the changeset viewer.