IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 34584


Ignore:
Timestamp:
Oct 25, 2012, 10:26:16 AM (14 years ago)
Author:
eugene
Message:

dvo/opihi updates from gene (add 1D splines, where conditions on plots)

Location:
trunk/Ohana/src/opihi
Files:
2 deleted
28 edited
6 copied

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.astro

  • trunk/Ohana/src/opihi/cmd.astro/cgrid.c

    r30611 r34584  
    279279  graphmode.ptype = 100; /* connect a pair */
    280280  graphmode.etype = 0;
    281   PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     281  PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    282282
    283283  free (Xvec.elements.Ptr);
  • trunk/Ohana/src/opihi/cmd.astro/cplot.c

    r21153 r34584  
    33int cplot (int argc, char **argv) {
    44 
     5  double ra_prev;
    56  int i, kapa, Npts, status, leftside;
    67  opihi_flt *x, *y, *r, *d, Rmin, Rmax, Rmid;
     
    4142  Npts = 0;
    4243  for (i = 0; i < Xvec.Nelements; i++, r++, d++) {
    43     *r = ohana_normalize_angle (*r);
    44     while (*r < Rmin) *r += 360.0;
    45     while (*r > Rmax) *r -= 360.0;
     44    double ra = ohana_normalize_angle (*r);
     45    while (ra < Rmin) ra += 360.0;
     46    while (ra > Rmax) ra -= 360.0;
    4647
    4748    // for pair-by-pair connections, check on second point if we straddle the back midline
    48     if ((graphmode.ptype == 100) && (i % 2)) {
    49       leftside = (r[-1] < Rmid); // if first of the pair is left, second must be as well
    50       if ( leftside && (r[0] > Rmid + 90)) { r[0] -= 360.0; }
    51       if (!leftside && (r[0] < Rmid - 90)) { r[0] += 360.0; }
     49    if (graphmode.ptype == 100) {
     50      if (i % 2) {
     51        leftside = (ra_prev < Rmid); // if first of the pair is left, second must be as well
     52        if ( leftside && (ra > Rmid + 90)) { ra -= 360.0; }
     53        if (!leftside && (ra < Rmid - 90)) { ra += 360.0; }
     54      } else {
     55        ra_prev = ra;
     56      }
    5257    }
    53     status = RD_to_XY (x, y, *r, *d, &graphmode.coords);
     58    status = RD_to_XY (x, y, ra, *d, &graphmode.coords);
    5459
    5560    // if we fail on one of the points, drop the corresponding pair
     
    7883
    7984  graphmode.etype = 0;
    80   PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     85  PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    8186 
    8287  free (Xvec.elements.Ptr);
  • trunk/Ohana/src/opihi/cmd.astro/czplot.c

    r31667 r34584  
    7676  graphmode.size = -1; /* point size determined by Zvec */
    7777  graphmode.etype = 0;
    78   PlotVectorTriplet (kapa, &Xvec, &Yvec, &Zvec, &graphmode);
     78  PlotVectorTriplet (kapa, &Xvec, &Yvec, &Zvec, NULL, &graphmode);
    7979
    8080  free (Xvec.elements.Flt);
  • trunk/Ohana/src/opihi/cmd.data/Makefile

    r33662 r34584  
    114114$(SRC)/shift.$(ARCH).o          \
    115115$(SRC)/sort.$(ARCH).o           \
    116 $(SRC)/spline_apply.$(ARCH).o   \
    117 $(SRC)/spline_construct.$(ARCH).o \
     116$(SRC)/spline.$(ARCH).o         \
     117$(SRC)/spline_commands.$(ARCH).o \
     118$(SRC)/imspline_apply.$(ARCH).o \
     119$(SRC)/imspline_construct.$(ARCH).o \
    118120$(SRC)/imstats.$(ARCH).o           \
    119121$(SRC)/style.$(ARCH).o             \
  • trunk/Ohana/src/opihi/cmd.data/dbconnect.c

    r27435 r34584  
    3333  password[i] = 0;
    3434# endif
     35
     36  // XXX do I need to call mysql_library_init()?
    3537
    3638  mysql_init (&mysql);
  • trunk/Ohana/src/opihi/cmd.data/dbselect.c

    r20936 r34584  
    6161  ALLOCATE (vec, Vector *, Ncols);
    6262  for (i = 0; i < Ncols; i++) {
     63    char *name = fields[i].name ? fields[i].name : fields[i].org_name;
    6364    if ((vec[i] = SelectVector (fields[i].name, ANYVECTOR, TRUE)) == NULL) {
    6465      gprint (GP_ERR, "trouble creating vector named %s\n", fields[i].name);
  • trunk/Ohana/src/opihi/cmd.data/grid.c

    r26258 r34584  
    178178  graphmode.ptype = 100; /* connect a pair */
    179179  graphmode.etype = 0;
    180   PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     180  PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    181181
    182182  free (Xvec.elements.Flt);
  • trunk/Ohana/src/opihi/cmd.data/init.c

    r33662 r34584  
    102102int shift            PROTO((int, char **));
    103103int sort_vectors     PROTO((int, char **));
    104 int spline_apply_cmd PROTO((int, char **));
    105 int spline_construct_cmd PROTO((int, char **));
     104int spline_command   PROTO((int, char **));
     105int imspline_apply   PROTO((int, char **));
     106int imspline_construct PROTO((int, char **));
    106107int stats            PROTO((int, char **));
    107108int imstats          PROTO((int, char **));
     
    254255  {1, "shift",        shift,            "shift data in an image"},
    255256  {1, "sort",         sort_vectors,     "sort list of vectors"},
    256   {1, "spline.apply", spline_apply_cmd, "apply spline fit to generate an image"},
    257   {1, "spline.const", spline_construct_cmd, "create spline 2nd deriv. terms"},
     257  {1, "spline",       spline_command,   "shift data in an image"},
     258  {1, "imspline.apply", imspline_apply, "apply spline fit to generate an image"},
     259  {1, "imspline.const", imspline_construct, "create spline 2nd deriv. terms"},
    258260  {1, "stats",        imstats,          "statistics on a portion of an image"},
    259261  {1, "style",        style,            "set the style for graph plots"},
  • trunk/Ohana/src/opihi/cmd.data/plot.c

    r32346 r34584  
    33int plot (int argc, char **argv) {
    44 
    5   int kapa, N, Npts;
     5  char *out;
     6  int kapa, N, Npts, valid, size, i;
    67  Graphdata graphmode;
    78  Vector *xvec, *yvec, *dxmvec, *dxpvec, *dymvec, *dypvec;
     
    3233  }
    3334
    34   if (argc != 3) {
     35  valid  = (argc == 3);
     36  valid |= (argc > 4) && !strcmp (argv[3], "where");
     37  if (!valid) {
    3538    gprint (GP_ERR, "USAGE: plot <x> <y> [style]\n");
     39    gprint (GP_ERR, "   OR: plot <x> <y> [style] where (condition)\n");
    3640    return (FALSE);
     41  }
     42
     43  // tvec is used for logical test (truth vector)
     44  Vector *tvec = NULL;
     45  char *mask = NULL;
     46  if (argc > 4) {
     47    out = dvomath (argc - 4, &argv[4], &size, 1);
     48    if (out == NULL) {
     49      print_error ();
     50      return FALSE;
     51    }
     52    if ((tvec = SelectVector (out, OLDVECTOR, TRUE)) == NULL) {
     53      gprint (GP_ERR, " invalid logic result\n");
     54      DeleteNamedVector (out);
     55      free (out);
     56      return (FALSE);
     57    }
    3758  }
    3859
     
    5374    return (FALSE);
    5475  }
     76  if (tvec && tvec[0].Nelements != yvec[0].Nelements) {
     77    gprint (GP_ERR, "logic test vector not the same length as data vectors\n");
     78    return (FALSE);
     79  }
    5580  if (dypvec && (dypvec->Nelements != xvec->Nelements)) goto mismatch;
    5681  if (dymvec && (dymvec->Nelements != xvec->Nelements)) goto mismatch;
     
    5984
    6085  Npts = xvec[0].Nelements;
    61   if (Npts == 0) return (TRUE);
     86  if (Npts == 0) {
     87    if (tvec) DeleteVector (tvec);
     88    return (TRUE);
     89  }
     90
     91  if (tvec) {
     92    Npts = 0;
     93    ALLOCATE (mask, char, tvec->Nelements);
     94    for (i = 0; i < tvec->Nelements; i++) {
     95      mask[i] = (tvec->type == OPIHI_FLT) ? (tvec->elements.Flt[i] == 0.0) : (tvec->elements.Int[i] == 0.0);
     96      if (!mask[i]) Npts ++;
     97    }
     98    if (Npts == 0) {
     99      DeleteVector (tvec);
     100      free (mask);
     101      return TRUE;
     102    }
     103  }
    62104
    63105  if (!KapaPrepPlot (kapa, Npts, &graphmode)) return (FALSE);
    64106 
    65   PlotVectorSingle (kapa, xvec, "x");
    66   PlotVectorSingle (kapa, yvec, "y");
     107  PlotVectorSingle (kapa, xvec, mask, "x");
     108  PlotVectorSingle (kapa, yvec, mask, "y");
    67109  if (graphmode.etype & 0x01) {
    68     PlotVectorSingle (kapa, dymvec, "dym");
    69     PlotVectorSingle (kapa, dypvec, "dyp");
     110    PlotVectorSingle (kapa, dymvec, mask, "dym");
     111    PlotVectorSingle (kapa, dypvec, mask, "dyp");
    70112  }
    71113  if (graphmode.etype & 0x02) {
    72     PlotVectorSingle (kapa, dxmvec, "dxm");
    73     PlotVectorSingle (kapa, dxpvec, "dxp");
     114    PlotVectorSingle (kapa, dxmvec, mask, "dxm");
     115    PlotVectorSingle (kapa, dxpvec, mask, "dxp");
     116  }
     117
     118  if (tvec) {
     119    free (mask);
     120    DeleteVector (tvec);
    74121  }
    75122  return (TRUE);
  • trunk/Ohana/src/opihi/cmd.data/write_vectors.c

    r33963 r34584  
    9999  }
    100100
    101   /* open file for outuput */
     101  /* open file for output */
    102102  if (append) {
    103103    f = fopen (argv[1], "a");
  • trunk/Ohana/src/opihi/cmd.data/zplot.c

    r31667 r34584  
    33int zplot (int argc, char **argv) {
    44 
    5   int i, kapa;
     5  char *outname;
     6  int i, kapa, valid, size;
    67  opihi_flt *out;
    78  double min, range;
     
    1112  if (!style_args (&graphmode, &argc, argv, &kapa)) return (FALSE);
    1213
    13   if (argc != 6) {
     14  valid  = (argc == 6);
     15  valid |= (argc > 7) && !strcmp (argv[6], "where");
     16  if (!valid) {
    1417    gprint (GP_ERR, "USAGE: zplot <x> <y> <z> min max\n");
     18    gprint (GP_ERR, "   OR: zplot <x> <y> <z> min max where (condition)\n");
    1519    return (FALSE);
    1620  }
     
    1822  min = atof(argv[4]);
    1923  range = atof(argv[5]) - min;
     24
     25  // tvec is used for logical test (truth vector)
     26  Vector *tvec = NULL;
     27  char *mask = NULL;
     28  if (argc > 7) {
     29    outname = dvomath (argc - 7, &argv[7], &size, 1);
     30    if (outname == NULL) {
     31      print_error ();
     32      return FALSE;
     33    }
     34    if ((tvec = SelectVector (outname, OLDVECTOR, TRUE)) == NULL) {
     35      gprint (GP_ERR, " invalid logic result\n");
     36      DeleteNamedVector (outname);
     37      free (outname);
     38      return (FALSE);
     39    }
     40  }
    2041
    2142  /* find vectors */
     
    2950  if (xvec[0].Nelements != zvec[0].Nelements) {
    3051    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[3]);
     52    return (FALSE);
     53  }
     54  if (tvec && tvec[0].Nelements != yvec[0].Nelements) {
     55    gprint (GP_ERR, "logic test vector not the same length as data vectors\n");
    3156    return (FALSE);
    3257  }
     
    4671  }
    4772
     73  if (tvec) {
     74    ALLOCATE (mask, char, tvec->Nelements);
     75    for (i = 0; i < tvec->Nelements; i++) {
     76      mask[i] = (tvec->type == OPIHI_FLT) ? (tvec->elements.Flt[i] == 0.0) : (tvec->elements.Int[i] == 0.0);
     77    }
     78  }
     79
    4880  /* point size determined by Zvec */
    4981  graphmode.style = 2; /* plot points */
    5082  graphmode.size = -1; /* point size determined by Zvec */
    5183  graphmode.etype = 0; /* no errorbars */
    52   PlotVectorTriplet (kapa, xvec, yvec, &Zvec, &graphmode);
     84  PlotVectorTriplet (kapa, xvec, yvec, &Zvec, mask, &graphmode);
    5385
    5486  free (Zvec.elements.Ptr);
     87  if (mask) free (mask);
     88  DeleteNamedVector (outname);
    5589
    5690  return (TRUE);
     
    6094int zcplot (int argc, char **argv) {
    6195 
    62   int i, kapa;
     96  char *outname;
     97  int i, kapa, valid, size;
    6398  opihi_flt *out;
    6499  double min, range;
     
    68103  if (!style_args (&graphmode, &argc, argv, &kapa)) return (FALSE);
    69104
    70   if (argc != 6) {
    71     gprint (GP_ERR, "USAGE: zplot <x> <y> <z> min max\n");
     105  valid  = (argc == 6);
     106  valid |= (argc > 7) && !strcmp (argv[6], "where");
     107  if (!valid) {
     108    gprint (GP_ERR, "USAGE: zcplot <x> <y> <z> min max\n");
     109    gprint (GP_ERR, "   OR: zcplot <x> <y> <z> min max where (condition)\n");
    72110    return (FALSE);
    73111  }
     
    75113  min = atof(argv[4]);
    76114  range = atof(argv[5]) - min;
     115
     116  // tvec is used for logical test (truth vector)
     117  Vector *tvec = NULL;
     118  char *mask = NULL;
     119  if (argc > 7) {
     120    outname = dvomath (argc - 7, &argv[7], &size, 1);
     121    if (outname == NULL) {
     122      print_error ();
     123      return FALSE;
     124    }
     125    if ((tvec = SelectVector (outname, OLDVECTOR, TRUE)) == NULL) {
     126      gprint (GP_ERR, " invalid logic result\n");
     127      DeleteNamedVector (outname);
     128      free (outname);
     129      return (FALSE);
     130    }
     131  }
    77132
    78133  /* find vectors */
     
    86141  if (xvec[0].Nelements != zvec[0].Nelements) {
    87142    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[3]);
     143    return (FALSE);
     144  }
     145  if (tvec && tvec[0].Nelements != yvec[0].Nelements) {
     146    gprint (GP_ERR, "logic test vector not the same length as data vectors\n");
    88147    return (FALSE);
    89148  }
     
    103162  }
    104163
     164  if (tvec) {
     165    ALLOCATE (mask, char, tvec->Nelements);
     166    for (i = 0; i < tvec->Nelements; i++) {
     167      mask[i] = (tvec->type == OPIHI_FLT) ? (tvec->elements.Flt[i] == 0.0) : (tvec->elements.Int[i] == 0.0);
     168    }
     169  }
     170
    105171  /* point size determined by Zvec */
    106172  graphmode.style = 2; /* plot points */
    107173  graphmode.color = -1; /* point color determined by Zvec */
    108174  graphmode.etype = 0; /* no errorbars */
    109   PlotVectorTriplet (kapa, xvec, yvec, &Zvec, &graphmode);
     175  PlotVectorTriplet (kapa, xvec, yvec, &Zvec, mask, &graphmode);
    110176
    111177  free (Zvec.elements.Ptr);
     178  if (mask) free (mask);
     179  DeleteNamedVector (outname);
    112180
    113181  return (TRUE);
  • trunk/Ohana/src/opihi/dvo/fitcolors.c

    r28241 r34584  
    311311        KapaBox (kapa, &graphdata);
    312312
    313         PlotVectorPair (kapa, xvec, yvec, &graphdata);
     313        PlotVectorPair (kapa, xvec, yvec, NULL, &graphdata);
    314314
    315315        for (i = 0; i < 11; i++) {
  • trunk/Ohana/src/opihi/dvo/images.c

    r34088 r34584  
    350350    graphmode.ptype = 100; /* connect pairs of points */
    351351    graphmode.etype = 0;
    352     PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     352    PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    353353  }
    354354
  • trunk/Ohana/src/opihi/dvo/imbox.c

    r27435 r34584  
    123123    graphmode.ptype = 100; /* connect pairs of points */
    124124    graphmode.etype = 0;
    125     PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     125    PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    126126  }
    127127
  • trunk/Ohana/src/opihi/dvo/imdense.c

    r31635 r34584  
    6565    graphmode.style = 2; /* points */
    6666    graphmode.etype = 0;
    67     PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     67    PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    6868  }
    6969
  • trunk/Ohana/src/opihi/dvo/imstats.c

    r31635 r34584  
    5454  graphmode.style = 2;
    5555  graphmode.etype = 0;
    56   PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     56  PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    5757 
    5858  free (Xvec.elements.Flt);
  • trunk/Ohana/src/opihi/dvo/lcurve.c

    r34088 r34584  
    160160    PlotVectorPairErrors (kapa, &Xvec, &Yvec, &dYvec, &graphmode);
    161161  } else {
    162     PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     162    PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    163163  }
    164164
  • trunk/Ohana/src/opihi/dvo/procks.c

    r20936 r34584  
    113113  graphmode.style = 2; /* set style to points */
    114114  graphmode.etype = 0; /* no errorbars */
    115   PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     115  PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    116116
    117117  /* now plot vectors between two extrema */
     
    146146  graphmode.etype = 0; /* no errorbars */
    147147
    148   PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     148  PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    149149
    150150  free (Xvec.elements.Flt);
  • trunk/Ohana/src/opihi/dvo/showtile.c

    r20936 r34584  
    8686    graphmode.ptype = 100; /* connect pairs of points */
    8787    graphmode.etype = 0;
    88     PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     88    PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    8989  }
    9090
  • trunk/Ohana/src/opihi/dvo/simage.c

    r34088 r34584  
    151151  graphmode.etype = 0;
    152152
    153   PlotVectorTriplet (kapa, &Xvec, &Yvec, &Zvec, &graphmode);
     153  PlotVectorTriplet (kapa, &Xvec, &Yvec, &Zvec, NULL, &graphmode);
    154154
    155155  free (Xvec.elements.Flt);
  • trunk/Ohana/src/opihi/dvo/skycat.c

    r34088 r34584  
    100100    graphmode.ptype = 100; /* connect pairs of points */
    101101    graphmode.etype = 0;
    102     PlotVectorPair (kapa, &Xvec, &Yvec, &graphmode);
     102    PlotVectorPair (kapa, &Xvec, &Yvec, NULL, &graphmode);
    103103  }
    104104
  • trunk/Ohana/src/opihi/include/data.h

    r31636 r34584  
    8484
    8585/* in spline.c */
    86 void spline_construct (float *x, float *y, int N, float *y2);
    87 float spline_apply (float *x, float *y, float *y2, int N, float X);
     86void spline_construct_flt (float *x, float *y, int N, float *y2);
     87float spline_apply_flt (float *x, float *y, float *y2, int N, float X);
     88void spline_construct_dbl (opihi_flt *x, opihi_flt *y, int N, opihi_flt *y2);
     89opihi_flt spline_apply_dbl (opihi_flt *x, opihi_flt *y, opihi_flt *y2, int N, opihi_flt X);
    8890
    8991/* in svdcmp.c */
     
    168170void FreeQueues (void);
    169171void FreeBooks (void);
     172
     173// the interpolating spline has valu
     174typedef struct {
     175  int Nknots;
     176  opihi_flt *xk;
     177  opihi_flt *yk;
     178  opihi_flt *y2;
     179  char *name;
     180} Spline;
     181
     182/* in SplineOps.c */
     183void InitSplines ();
     184void FreeSplines ();
     185void InitSpline (Spline *spline, char *name, int Nknots);
     186void FreeSpline (Spline *spline);
     187Spline *GetSpline (int where);
     188Spline *FindSpline (char *name);
     189Spline *CreateSpline (char *name, int Nknots);
     190int DeleteSpline (Spline *spline);
     191void ListSplines ();
     192int SaveSpline (char *filename, char *name, int append);
     193int LoadSpline (char *filename, char *name);
    170194
    171195/* hermitian functions */
  • trunk/Ohana/src/opihi/include/display.h

    r31636 r34584  
    77
    88/*** kapa graph functions ***/
    9 int           PlotVectorSingle      PROTO((int kapa, Vector *vec, char *mode));
    10 int           PlotVectorPair        PROTO((int kapa, Vector *xVec, Vector *yVec, Graphdata *graphmode));
     9int           PlotVectorSingle      PROTO((int kapa, Vector *vec, char *mask, char *mode));
     10int           PlotVectorPair        PROTO((int kapa, Vector *xVec, Vector *yVec, char *mask, Graphdata *graphmode));
    1111int           PlotVectorPairErrors  PROTO((int kapa, Vector *xVec, Vector *yVec, Vector *dyValues, Graphdata *graphmode));
    12 int           PlotVectorTriplet     PROTO((int kapa, Vector *xVec, Vector *yVec, Vector *zValues, Graphdata *graphmode));
     12
     13int           PlotVectorTriplet     PROTO((int kapa, Vector *xVec, Vector *yVec, Vector *zValues, char *mask, Graphdata *graphmode));
    1314// int           GetGraphData          PROTO((Graphdata *data, int *kapa, char *name));
    1415int           GetGraph              PROTO((Graphdata *data, int *kapa, char *name));
  • trunk/Ohana/src/opihi/lib.data/Makefile

    r31635 r34584  
    2323$(SDIR)/bracket.$(ARCH).o               \
    2424$(SDIR)/spline.$(ARCH).o                \
     25$(SDIR)/SplineOps.$(ARCH).o             \
    2526$(SDIR)/mrqmin.$(ARCH).o                \
    2627$(SDIR)/mrq2dmin.$(ARCH).o              \
  • trunk/Ohana/src/opihi/lib.data/PlotVectors.c

    r20936 r34584  
    11# include "display.h"
    22
    3 int PlotVectorSingle (int kapa, Vector *vec, char *mode) {
    4 
    5   int i, Npts;
     3int PlotVectorSingle (int kapa, Vector *vec, char *mask, char *mode) {
     4
     5  int i, Npts, Nout;
    66  float *temp;
    77
     
    99  ALLOCATE (temp, float, Npts);
    1010
     11  Nout = 0;
    1112  if (vec->type == OPIHI_FLT) {
    1213    opihi_flt *value = vec->elements.Flt;
    1314    for (i = 0; i < Npts; i++) {
    14       temp[i] = value[i];
     15      if (mask && mask[i]) continue;
     16      temp[Nout] = value[i];
     17      Nout ++;
    1518    }
    1619  } else {
    1720    opihi_int *value = vec->elements.Int;
    1821    for (i = 0; i < Npts; i++) {
    19       temp[i] = value[i];
    20     }
    21   }
    22   KapaPlotVector (kapa, Npts, temp, mode);
    23 
    24   free (temp);
    25 
    26   return (TRUE);
    27 }
    28 
    29 int PlotVectorPair (int kapa, Vector *xVec, Vector *yVec, Graphdata *graphmode) {
    30 
    31   int i, Npts;
     22      if (mask && mask[i]) continue;
     23      temp[Nout] = value[i];
     24      Nout ++;
     25    }
     26  }
     27  KapaPlotVector (kapa, Nout, temp, mode);
     28
     29  free (temp);
     30
     31  return (TRUE);
     32}
     33
     34int PlotVectorPair (int kapa, Vector *xVec, Vector *yVec, char *mask, Graphdata *graphmode) {
     35
     36  int i, Npts, Nout;
    3237  float *temp;
    3338
     
    3742  ALLOCATE (temp, float, Npts);
    3843
    39   KapaPrepPlot (kapa, Npts, graphmode);
    40 
     44  Nout = 0;
    4145  if (xVec->type == OPIHI_FLT) {
    4246    opihi_flt *value = xVec->elements.Flt;
    4347    for (i = 0; i < Npts; i++) {
    44       temp[i] = value[i];
     48      if (mask && mask[i]) continue;
     49      temp[Nout] = value[i];
     50      Nout ++;
    4551    }
    4652  } else {
    4753    opihi_int *value = xVec->elements.Int;
    4854    for (i = 0; i < Npts; i++) {
    49       temp[i] = value[i];
    50     }
    51   }
    52   KapaPlotVector (kapa, Npts, temp, "x");
    53 
     55      if (mask && mask[i]) continue;
     56      temp[Nout] = value[i];
     57      Nout ++;
     58    }
     59  }
     60  KapaPrepPlot (kapa, Nout, graphmode);
     61  KapaPlotVector (kapa, Nout, temp, "x");
     62
     63  Nout = 0;
    5464  if (yVec->type == OPIHI_FLT) {
    5565    opihi_flt *value = yVec->elements.Flt;
    5666    for (i = 0; i < Npts; i++) {
    57       temp[i] = value[i];
     67      if (mask && mask[i]) continue;
     68      temp[Nout] = value[i];
     69      Nout ++;
    5870    }
    5971  } else {
    6072    opihi_int *value = yVec->elements.Int;
    6173    for (i = 0; i < Npts; i++) {
    62       temp[i] = value[i];
    63     }
    64   }
    65   KapaPlotVector (kapa, Npts, temp, "y");
    66 
    67   free (temp);
    68 
    69   return (TRUE);
    70 }
    71 
    72 int PlotVectorTriplet (int kapa, Vector *xVec, Vector *yVec, Vector *zVec, Graphdata *graphmode) {
    73 
    74   int i, Npts;
     74      if (mask && mask[i]) continue;
     75      temp[Nout] = value[i];
     76      Nout ++;
     77    }
     78  }
     79  KapaPlotVector (kapa, Nout, temp, "y");
     80
     81  free (temp);
     82
     83  return (TRUE);
     84}
     85
     86int PlotVectorTriplet (int kapa, Vector *xVec, Vector *yVec, Vector *zVec, char *mask, Graphdata *graphmode) {
     87
     88  int i, Npts, Nout;
    7589  float *temp;
    7690
     
    8195  ALLOCATE (temp, float, Npts);
    8296
    83   KapaPrepPlot (kapa, Npts, graphmode);
    84 
     97  Nout = 0;
    8598  if (xVec->type == OPIHI_FLT) {
    8699    opihi_flt *value = xVec->elements.Flt;
    87100    for (i = 0; i < Npts; i++) {
    88       temp[i] = value[i];
     101      if (mask && mask[i]) continue;
     102      temp[Nout] = value[i];
     103      Nout ++;
    89104    }
    90105  } else {
    91106    opihi_int *value = xVec->elements.Int;
    92107    for (i = 0; i < Npts; i++) {
    93       temp[i] = value[i];
    94     }
    95   }
    96   KapaPlotVector (kapa, Npts, temp, "x");
    97 
     108      if (mask && mask[i]) continue;
     109      temp[Nout] = value[i];
     110      Nout ++;
     111    }
     112  }
     113  KapaPrepPlot (kapa, Nout, graphmode);
     114  KapaPlotVector (kapa, Nout, temp, "x");
     115
     116  Nout = 0;
    98117  if (yVec->type == OPIHI_FLT) {
    99118    opihi_flt *value = yVec->elements.Flt;
    100119    for (i = 0; i < Npts; i++) {
    101       temp[i] = value[i];
     120      if (mask && mask[i]) continue;
     121      temp[Nout] = value[i];
     122      Nout ++;
    102123    }
    103124  } else {
    104125    opihi_int *value = yVec->elements.Int;
    105126    for (i = 0; i < Npts; i++) {
    106       temp[i] = value[i];
    107     }
    108   }
    109   KapaPlotVector (kapa, Npts, temp, "y");
    110 
     127      if (mask && mask[i]) continue;
     128      temp[Nout] = value[i];
     129      Nout ++;
     130    }
     131  }
     132  KapaPlotVector (kapa, Nout, temp, "y");
     133
     134  Nout = 0;
    111135  if (zVec->type == OPIHI_FLT) {
    112136    opihi_flt *value = zVec->elements.Flt;
    113137    for (i = 0; i < Npts; i++) {
    114       temp[i] = value[i];
     138      if (mask && mask[i]) continue;
     139      temp[Nout] = value[i];
     140      Nout ++;
    115141    }
    116142  } else {
    117143    opihi_int *value = zVec->elements.Int;
    118144    for (i = 0; i < Npts; i++) {
    119       temp[i] = value[i];
    120     }
    121   }
    122   KapaPlotVector (kapa, Npts, temp, "z");
     145      if (mask && mask[i]) continue;
     146      temp[Nout] = value[i];
     147      Nout ++;
     148    }
     149  }
     150  KapaPlotVector (kapa, Nout, temp, "z");
    123151
    124152  free (temp);
  • trunk/Ohana/src/opihi/lib.data/spline.c

    r16119 r34584  
    22
    33/* construct the natural spline for x, y in y2 */
    4 void spline_construct (float *x, float *y, int N, float *y2) {
     4void spline_construct_flt (float *x, float *y, int N, float *y2) {
    55
    66  int i;
     
    2727
    2828/* evaluate spline for x, y, y2 at X */
    29 float spline_apply (float *x, float *y, float *y2, int N, float X) {
     29float spline_apply_flt (float *x, float *y, float *y2, int N, float X) {
    3030
    3131  int i, lo, hi;
     
    5858
    5959}
     60
     61/* construct the natural spline for x, y in y2 */
     62void spline_construct_dbl (opihi_flt *x, opihi_flt *y, int N, opihi_flt *y2) {
     63
     64  int i;
     65  opihi_flt dy, dx, *tmp;
     66 
     67  ALLOCATE (tmp, opihi_flt, N);
     68
     69  y2[0] = tmp[0] = 0.0;
     70 
     71  for (i = 1; i < N-1; i++) {
     72    dx = (x[i+0] - x[i-1]) / (x[i+1] - x[i-1]);
     73    dy = dx * y2[i-1] + 2.0;
     74    y2[i] = (dx - 1.0) / dy;
     75    tmp[i] = (y[i+1] - y[i+0]) / (x[i+1] - x[i+0]) - (y[i+0] - y[i-1]) / (x[i+0] - x[i-1]);
     76    tmp[i] = (6.0 * tmp[i] / (x[i+1] - x[i-1]) - dx*tmp[i-1]) / dy;
     77  }
     78 
     79  y2[N-1] = 0;
     80  for (i = N-2; i >= 1; i--)
     81    y2[i] = y2[i]*y2[i+1] + tmp[i];
     82
     83  free (tmp);
     84}
     85
     86/* evaluate spline for x, y, y2 at X */
     87opihi_flt spline_apply_dbl (opihi_flt *x, opihi_flt *y, opihi_flt *y2, int N, opihi_flt X) {
     88
     89  int i, lo, hi;
     90  opihi_flt dx, a, b, value;
     91 
     92  /* find correct element in array (x must be sorted) */
     93  lo = 0;
     94  hi = N-1;
     95  while (hi - lo > 1) {
     96    i = 0.5*(hi+lo);
     97    if (x[i] > X) {
     98      hi = i;
     99    } else {
     100      lo = i;
     101    }
     102  }
     103
     104  /* error condition: duplicate abssisca */
     105  dx = x[hi] - x[lo];
     106  if (dx == 0.0) {
     107    return (HUGE_VAL);
     108  }
     109
     110  /* evaluate spline */
     111  a = (x[hi] - X) / dx;
     112  b = (X - x[lo]) / dx;
     113
     114  value = a*y[lo] + b*y[hi] + ((a*a*a - a)*y2[lo] + (b*b*b - b)*y2[hi])*(dx*dx) / 6.0;
     115  return (value);
     116
     117}
  • trunk/Ohana/src/opihi/lib.shell/VectorIO.c

    r33963 r34584  
    22 
    33// write a set of vectors to a FITS file (vectors names become fits column names)
    4 int WriteVectorTableFITS (char *filename, char *extname, Vector **vec, int Nvec, int append, char *format) {
    5  
     4int WriteVectorTable (Header *theader, FTable *ftable, char *extname, Vector **vec, int Nvec, char *format) {
     5 
     6  int j;
     7
    68  char *tformat = NULL;
    7   Header header;
    8   Matrix matrix;
    9   Header theader;
    10   FTable ftable;
    11 
    12   int j;
    13   FILE *f = NULL;
    14 
    15   /* open file for outuput */
    16   if (append) {
    17     f = fopen (filename, "a");
    18   } else {
    19     f = fopen (filename, "w");
    20   }
    21   if (f == (FILE *) NULL) {
    22     gprint (GP_ERR, "can't open file for write : %s\n", filename);
    23     return (FALSE);
    24   }
    25 
    26   if (!append) {
    27     gfits_init_header (&header);
    28     header.extend = TRUE;
    29     gfits_create_header (&header);
    30     gfits_create_matrix (&header, &matrix);
    31   }
    32 
    33   gfits_create_table_header (&theader, "BINTABLE", extname);
     9
     10  gfits_create_table_header (theader, "BINTABLE", extname);
    3411
    3512  ALLOCATE (tformat, char, 2*Nvec);
     
    7148  // this somehow
    7249  for (j = 0; j < Nvec; j++) {
    73     gfits_define_bintable_column (&theader, &tformat[2*j], vec[j][0].name, NULL, NULL, 1.0, 0.0);
     50    gfits_define_bintable_column (theader, &tformat[2*j], vec[j][0].name, NULL, NULL, 1.0, 0.0);
    7451  }
    7552  free (tformat);
    7653
    7754  // generate the output array that carries the data
    78   gfits_create_table (&theader, &ftable);
     55  gfits_create_table (theader, ftable);
    7956
    8057  // add the vectors to the output array
    8158  for (j = 0; j < Nvec; j++) {
    8259    if (vec[j][0].type == OPIHI_FLT) {
    83       gfits_set_bintable_column_reformat (&theader, &ftable, vec[j][0].name, "double", vec[j][0].elements.Flt, vec[j][0].Nelements);
     60      gfits_set_bintable_column_reformat (theader, ftable, vec[j][0].name, "double", vec[j][0].elements.Flt, vec[j][0].Nelements);
    8461    } else {
    85       gfits_set_bintable_column_reformat (&theader, &ftable, vec[j][0].name, "int", vec[j][0].elements.Int, vec[j][0].Nelements);
    86     }
    87   }
     62      gfits_set_bintable_column_reformat (theader, ftable, vec[j][0].name, "int", vec[j][0].elements.Int, vec[j][0].Nelements);
     63    }
     64  }
     65  return (TRUE);
     66
     67 escape:
     68  if (tformat) free (tformat);
     69  return (FALSE);
     70}
     71 
     72// write a set of vectors to a FITS file (vectors names become fits column names)
     73int WriteVectorTableFITS (char *filename, char *extname, Vector **vec, int Nvec, int append, char *format) {
     74 
     75  Header header;
     76  Matrix matrix;
     77  Header theader;
     78  FTable ftable;
     79
     80  FILE *f = NULL;
     81
     82  /* open file for outuput */
     83  if (append) {
     84    f = fopen (filename, "a");
     85  } else {
     86    f = fopen (filename, "w");
     87  }
     88  if (f == (FILE *) NULL) {
     89    gprint (GP_ERR, "can't open file for write : %s\n", filename);
     90    return (FALSE);
     91  }
     92
     93  if (!WriteVectorTable (&theader, &ftable, extname, vec, Nvec, format)) goto escape;
    8894
    8995  if (!append) {
     96    gfits_init_header (&header);
     97    header.extend = TRUE;
     98    gfits_create_header (&header);
     99    gfits_create_matrix (&header, &matrix);
    90100    gfits_fwrite_header  (f, &header);
    91101    gfits_fwrite_matrix  (f, &matrix);
     
    111121  gfits_free_table (&ftable);
    112122
    113   if (tformat) free (tformat);
    114123  fclose (f);
    115124  fflush (f);
Note: See TracChangeset for help on using the changeset viewer.