IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 24, 2010, 11:22:25 AM (16 years ago)
Author:
eugene
Message:

large update merging in changes for Ohana to support large files

Location:
trunk/Ohana
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana

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

    r17282 r27435  
    44# define dSIN(A)   ((double) sin ((double)RAD_DEG*A))
    55
     6int HD_to_AZ(double *alt, double *az, double *rot, double ha, double dec, double lat);
     7int AZ_to_HD(double *ha, double *dec, double *rot, double alt, double az, double lat);
     8
    69double atan2 (double y, double x);
    710
    811int altaz (int argc, char **argv) {
    912 
     13  int i;
    1014  double alt, az, lat, rot;
    1115  double ha, dec;
    12   double sind, sinh, cosh;
    1316  char *latstr;
     17  Vector *hvec, *dvec, *avec, *zvec, *rvec;
     18  opihi_flt *Hv, *Dv, *Av, *Zv, *Rv;
    1419
    15   if (argc != 6) goto usage;
    16 
    17   if (!strcmp (argv[1], "-h")) goto radec;
    18   if (!strcmp (argv[1], "-c")) goto altaz;
    19 
    20  radec:
    21   /* ha/dec -> alt/az */
    22   ha  = atof (argv[2]);
    23   dec = atof (argv[3]);
     20  if (argc != 7) goto usage;
     21  if (strcasecmp (argv[4], "to")) goto usage;
    2422
    2523  latstr = get_variable ("LATITUDE");
    2624  if (latstr == (char *) NULL) {
    2725    gprint (GP_ERR, "please define $LATITUDE\n");
    28     return (FALSE);
     26    return FALSE;
    2927  }
    3028  lat = atof (latstr);
     29  gprint (GP_ERR, "using latitude of %f\n", lat);
    3130  free (latstr);
    32  
     31
     32  if (!strcmp (argv[1], "-az")) goto radec;
     33  if (!strcmp (argv[1], "-hd")) goto altaz;
     34
     35 radec:
     36  if (ISNUM(argv[2][0]) && ISNUM(argv[3][0])) {
     37    /* ha/dec -> alt/az */
     38    ha  = atof (argv[2]);
     39    dec = atof (argv[3]);
     40 
     41    HD_to_AZ (&alt, &az, &rot, ha, dec, lat);
     42
     43    set_variable (argv[5], alt);
     44    set_variable (argv[6], az);
     45    set_variable ("ROT", rot);
     46    return TRUE;
     47  }
     48
     49  /* find vectors */
     50  if ((hvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return FALSE;
     51  if ((dvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return FALSE;
     52  if ((avec = SelectVector (argv[5], ANYVECTOR, TRUE)) == NULL) return FALSE;
     53  if ((zvec = SelectVector (argv[6], ANYVECTOR, TRUE)) == NULL) return FALSE;
     54  if ((rvec = SelectVector ("ROT",   ANYVECTOR, TRUE)) == NULL) return FALSE;
     55
     56  if (hvec[0].Nelements != dvec[0].Nelements) {
     57    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[2], argv[3]);
     58    return FALSE;
     59  }
     60 
     61  // cast xvec or yvec to FLT if it is type INT
     62  CastVector (hvec, OPIHI_FLT);
     63  CastVector (dvec, OPIHI_FLT);
     64  ResetVector (avec, OPIHI_FLT, hvec[0].Nelements);
     65  ResetVector (zvec, OPIHI_FLT, hvec[0].Nelements);
     66  ResetVector (rvec, OPIHI_FLT, hvec[0].Nelements);
     67
     68  Hv = hvec[0].elements.Flt;
     69  Dv = dvec[0].elements.Flt;
     70  Av = avec[0].elements.Flt;
     71  Zv = zvec[0].elements.Flt;
     72  Rv = rvec[0].elements.Flt;
     73
     74  for (i = 0; i < hvec[0].Nelements; i++, Hv++, Dv++, Av++, Zv++, Rv++) {
     75    HD_to_AZ (Av, Zv, Rv, *Hv, *Dv, lat);
     76  }
     77  return TRUE;
     78 
     79 altaz:
     80  if (ISNUM(argv[2][0]) && ISNUM(argv[3][0])) {
     81    /* alt/az -> ha/dec */
     82    alt = atof (argv[2]);
     83    az  = atof (argv[3]);
     84
     85    AZ_to_HD (&ha, &dec, &rot, alt, az, lat);
     86
     87    set_variable (argv[5], ha);
     88    set_variable (argv[6], dec);
     89    set_variable ("ROT", rot);
     90    return TRUE;
     91  }
     92 
     93  /* find vectors */
     94  if ((avec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return FALSE;
     95  if ((zvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return FALSE;
     96  if ((hvec = SelectVector (argv[5], ANYVECTOR, TRUE)) == NULL) return FALSE;
     97  if ((dvec = SelectVector (argv[6], ANYVECTOR, TRUE)) == NULL) return FALSE;
     98  if ((rvec = SelectVector ("ROT",   ANYVECTOR, TRUE)) == NULL) return FALSE;
     99
     100  if (avec[0].Nelements != zvec[0].Nelements) {
     101    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[2], argv[3]);
     102    return FALSE;
     103  }
     104 
     105  // cast xvec or yvec to FLT if it is type INT
     106  CastVector (avec, OPIHI_FLT);
     107  CastVector (zvec, OPIHI_FLT);
     108  ResetVector (hvec, OPIHI_FLT, avec[0].Nelements);
     109  ResetVector (dvec, OPIHI_FLT, avec[0].Nelements);
     110  ResetVector (rvec, OPIHI_FLT, avec[0].Nelements);
     111
     112  Hv = hvec[0].elements.Flt;
     113  Dv = dvec[0].elements.Flt;
     114  Av = avec[0].elements.Flt;
     115  Zv = zvec[0].elements.Flt;
     116  Rv = rvec[0].elements.Flt;
     117
     118  for (i = 0; i < hvec[0].Nelements; i++, Hv++, Dv++, Av++, Zv++, Rv++) {
     119    AZ_to_HD (Hv, Dv, Rv, *Av, *Zv, lat);
     120  }
     121  return TRUE;
     122 
     123 usage:
     124  gprint (GP_ERR, "USAGE: altaz -az (ha) (dec) to (alt) (az)\n");
     125  gprint (GP_ERR, "USAGE: altaz -hd (alt) (az) to (ha) (dec)\n");
     126  gprint (GP_ERR, "       -hd alt/az to ha/dec, -az ha/dec to alt/az\n");
     127  gprint (GP_ERR, "       returned values in variables or vectors provided\n");
     128  return FALSE;
     129}
     130
     131int HD_to_AZ(double *alt, double *az, double *rot, double ha, double dec, double lat) {
     132
     133  double sind, sinh, cosh;
     134
    33135  sind = dSIN (dec) * dSIN (lat) + dCOS (dec) * dCOS (ha) * dCOS (lat);
    34   alt  = DEG_RAD * asin (sind);
     136  *alt  = DEG_RAD * asin (sind);
    35137
    36138  sinh = - dCOS (dec) * dSIN (ha);
    37139  cosh =   dSIN (dec) * dCOS (lat) - dCOS (dec) * dCOS (ha) * dSIN (lat);
    38140
    39   az = DEG_RAD * atan2 (sinh, cosh);
    40   set_variable (argv[4], alt);
    41   set_variable (argv[5], az);
     141  *az = DEG_RAD * atan2 (sinh, cosh);
     142 
     143  sinh = -dCOS(*az) * dSIN(*alt) * dSIN(ha) * dSIN(lat) + dSIN(*az) * dSIN(*alt) * dCOS(ha) - dSIN(ha) * dCOS(*alt) * dCOS(lat);
     144  cosh = -dSIN(*az) * dSIN(ha) * dSIN(lat) - dCOS(*az) * dCOS(ha);
     145  *rot = -DEG_RAD * atan2 (sinh, cosh);
     146 
     147  return TRUE;
     148}
    42149
    43   sinh = -dCOS(az) * dSIN(alt) * dSIN(ha) * dSIN(lat) + dSIN(az) * dSIN(alt) * dCOS(ha) - dSIN(ha) * dCOS(alt) * dCOS(lat);
    44   cosh = -dSIN(az) * dSIN(ha) * dSIN(lat) - dCOS(az) * dCOS(ha);
    45   rot = -DEG_RAD * atan2 (sinh, cosh);
    46   set_variable ("ROT", rot);
     150int AZ_to_HD(double *ha, double *dec, double *rot, double alt, double az, double lat) {
    47151
    48   return (TRUE);
    49  
    50  altaz:
    51   /* alt/az -> ha/dec */
    52   alt = atof (argv[4]);
    53   az  = atof (argv[5]);
    54 
    55   latstr = get_variable ("LATITUDE");
    56   if (latstr == (char *) NULL) {
    57     gprint (GP_ERR, "please define $LATITUDE\n");
    58     return (FALSE);
    59   }
    60   lat = atof (latstr);
    61   free (latstr);
     152  double sind, sinh, cosh;
    62153
    63154  sind = dSIN (alt) * dSIN (lat) + dCOS (alt) * dCOS (az) * dCOS (lat);
    64   dec  = DEG_RAD * asin (sind);
     155  *dec  = DEG_RAD * asin (sind);
    65156
    66157  sinh = -dCOS (alt) * dSIN (az);
    67158  cosh =  dSIN (alt) * dCOS (lat) - dCOS (alt) * dCOS (az) * dSIN (lat);
    68159
    69   ha = DEG_RAD * atan2 (sinh, cosh);
    70   set_variable (argv[2], ha);
    71   set_variable (argv[3], dec);
     160  *ha = DEG_RAD * atan2 (sinh, cosh);
    72161
    73   sinh = -dCOS(az) * dSIN(alt) * dSIN(ha) * dSIN(lat) + dSIN(az) * dSIN(alt) * dCOS(ha) - dSIN(ha) * dCOS(alt) * dCOS(lat);
    74   cosh = -dSIN(az) * dSIN(ha) * dSIN(lat) - dCOS(az) * dCOS(ha);
    75   rot = -DEG_RAD * atan2 (sinh, cosh);
    76   set_variable ("ROT", rot);
     162  sinh = -dCOS(az) * dSIN(alt) * dSIN(*ha) * dSIN(lat) + dSIN(az) * dSIN(alt) * dCOS(*ha) - dSIN(*ha) * dCOS(alt) * dCOS(lat);
     163  cosh = -dSIN(az) * dSIN(*ha) * dSIN(lat) - dCOS(az) * dCOS(*ha);
     164  *rot = -DEG_RAD * atan2 (sinh, cosh);
    77165
    78   return (TRUE);
    79  
    80  usage:
    81   gprint (GP_ERR, "USAGE: altaz -h (ha) (dec) (alt) (az)\n");
    82   gprint (GP_ERR, "USAGE: altaz -c (ha) (dec) (alt) (az)\n");
    83   gprint (GP_ERR, "       -h alt/az to ha/dec, -c ha/dec to alt/az\n");
    84   gprint (GP_ERR, "       returned values in variables provided\n");
    85   return (FALSE);
    86 
     166  return TRUE;
    87167}
    88 
Note: See TracChangeset for help on using the changeset viewer.