IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 21, 2007, 12:13:40 PM (19 years ago)
Author:
eugene
Message:

adding vector option

File:
1 edited

Legend:

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

    r9038 r12524  
    11# include "astro.h"
    22
    3 enum {NONE, SKY, PIXEL};
     3enum {NONE, SKY, PIXEL, VECTOR, SCALAR};
    44
    55int coords (int argc, char **argv) {
    66
    7   int mode, N, Quiet;
    8   double X, Y, R, D;
     7  int i, mode, form, N, Quiet;
     8  double Xin, Yin, Xout, Yout;
    99  char *MOSAIC;
    1010  Coords coords, moscoords;
    1111  Buffer *buf, *mosbuffer;
     12  Vector *xvec, *yvec;
    1213
    1314  MOSAIC = NULL;
     
    2829  }
    2930
     31  form = NONE;
    3032  mode = NONE;
    3133  if ((N = get_argument (argc, argv, "-p"))) {
    32     remove_argument (N, &argc, argv);
    33     X = atof(argv[N]);
    34     remove_argument (N, &argc, argv);
    35     Y = atof(argv[N]);
    3634    remove_argument (N, &argc, argv);
    3735    mode = SKY;
     
    4038    if (mode == SKY) goto syntax;
    4139    remove_argument (N, &argc, argv);
    42     R = atof(argv[N]);
    43     remove_argument (N, &argc, argv);
    44     D = atof(argv[N]);
    45     remove_argument (N, &argc, argv);
    4640    mode = PIXEL;
    4741  }
    4842  if (mode == NONE) goto syntax;
    49   if (argc != 2) goto syntax;
     43  if (argc != 4) goto syntax;
     44
     45  if (SelectScalar (argv[2], &Xin)) {
     46    if (!SelectScalar (argv[3], &Yin)) {
     47      gprint (GP_ERR, "syntax error: mixed vector and scalar?\n");
     48      return (FALSE);
     49    }
     50    form = SCALAR;
     51  } else {
     52    if ((xvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     53    if ((yvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     54    if (xvec[0].Nelements != yvec[0].Nelements) {
     55      fprintf (stderr, "mis-matched vector lengths\n");
     56      return (FALSE);
     57    }
     58    form = VECTOR;
     59  }     
    5060
    5161  if ((buf = SelectBuffer (argv[1], OLDBUFFER, TRUE)) == NULL) goto escape;
     
    6171  }
    6272 
     73  if (form == SCALAR) {
     74    if (mode == SKY) {
     75      XY_to_RD (&Xout, &Yout, Xin, Yin, &coords);
     76      if (!Quiet) gprint (GP_LOG, "%10.6f %10.6f\n", Xout, Yout);
     77      set_variable ("RA", Xout);
     78      set_variable ("DEC", Yout);
     79      return (TRUE);
     80    }
     81    if (mode == PIXEL) {
     82      RD_to_XY (&Xout, &Yout, Xin, Yin, &coords);
     83      if (!Quiet) gprint (GP_LOG, "%7.2f %7.2f\n", Xout, Yout);
     84      set_variable ("Xc", Xout);
     85      set_variable ("Yc", Yout);
     86      return (TRUE);
     87    }
     88  }
    6389  if (mode == SKY) {
    64     XY_to_RD (&R, &D, X, Y, &coords);
    65     if (!Quiet) gprint (GP_LOG, "%10.6f %10.6f\n", R, D);
    66     set_variable ("RA", R);
    67     set_variable ("DEC", D);
     90    for (i = 0; i < xvec[0].Nelements; i++) {
     91      fXY_to_RD (&xvec[0].elements[i], &yvec[0].elements[i], xvec[0].elements[i], yvec[0].elements[i], &coords);
     92    }
    6893    return (TRUE);
    6994  }
    70    
    7195  if (mode == PIXEL) {
    72     RD_to_XY (&X, &Y, R, D, &coords);
    73     if (!Quiet) gprint (GP_LOG, "%7.2f %7.2f\n", X, Y);
    74     set_variable ("Xc", X);
    75     set_variable ("Yc", Y);
     96    for (i = 0; i < xvec[0].Nelements; i++) {
     97      fRD_to_XY (&xvec[0].elements[i], &yvec[0].elements[i], xvec[0].elements[i], yvec[0].elements[i], &coords);
     98    }
    7699    return (TRUE);
    77100  }
     
    79102
    80103 syntax:
    81   gprint (GP_ERR, "USAGE: coords [buffer] (-c R D) / (-p X Y)\n");
     104  gprint (GP_ERR, "USAGE: coords [buffer] (-c R D) | (-p X Y)\n");
    82105  gprint (GP_ERR, "only one of -p or -c can be used\n");
    83106 escape:
Note: See TracChangeset for help on using the changeset viewer.