From 23fa71ba9fc4ff7d810e81e6a575724248a0e752 Mon Sep 17 00:00:00 2001 From: pidloop Date: Tue, 14 Dec 2021 19:34:56 -0700 Subject: [PATCH] Add telescope eod j2000 option (#48) * Increase precision of telescope conversion constants. * Add option to allow telescope to use either astrometric, J2000, or apparent coordinates at current epoch. This work began from a request for a new feature from a user in South Africa. We worked together both on the requirements and testing after I sent him these changed files. I also tested against my telescope simulator and both of us agreed these changes work well. Along the way we discovered one tiny source of error was in these two values used for the conversion of dec in degrees and RA in hours to radians, so I computed them to insane accuracy and pasted them in. Now that particular limitation will never appear again :-) --- GUI/xephem/fallbacks.c | 15 +++++----- GUI/xephem/scope.c | 68 +++++++++++++++++++++++++++--------------- 2 files changed, 52 insertions(+), 31 deletions(-) diff --git a/GUI/xephem/fallbacks.c b/GUI/xephem/fallbacks.c index cd109ff..01ef68f 100644 --- a/GUI/xephem/fallbacks.c +++ b/GUI/xephem/fallbacks.c @@ -219,21 +219,22 @@ String fallbacks[] = { "XEphem*INDIConfig*EDBValue.value: Mount.GOTOedb.edb", "XEphem*INDIConfig*EnableEDB.set: False", "XEphem*INDIConfig*EnableRADec.set: False", + "XEphem*INDIConfig*TelEOD.set: False", "XEphem*INDIConfig*GotoDecOffset.value: 0", - "XEphem*INDIConfig*GotoDecSlope.value: .0174532925", + "XEphem*INDIConfig*GotoDecSlope.value: .01745329251994329576", "XEphem*INDIConfig*GotoDecValue.value: Telescope.SetRADec2K.Dec", "XEphem*INDIConfig*GotoRAOffset.value: 0", - "XEphem*INDIConfig*GotoRASlope.value: .2617993875", + "XEphem*INDIConfig*GotoRASlope.value: .26179938779914943653", "XEphem*INDIConfig*GotoRAValue.value: Telescope.SetRADec2K.RA", "XEphem*INDIConfig*Host.value: localhost", "XEphem*INDIConfig*JDOffset.value: -2415020", "XEphem*INDIConfig*JDSlope.value: 1", "XEphem*INDIConfig*JDValue.value: Mount.Date.JD", "XEphem*INDIConfig*LatitudeOffset.value: 0", - "XEphem*INDIConfig*LatitudeSlope.value: .0174532925", + "XEphem*INDIConfig*LatitudeSlope.value: .01745329251994329576", "XEphem*INDIConfig*LatitudeValue.value: Mount.GEOGRAPHIC_COORD.LAT", "XEphem*INDIConfig*LongitudeOffset.value: 0", - "XEphem*INDIConfig*LongitudeSlope.value: .0174532925", + "XEphem*INDIConfig*LongitudeSlope.value: .01745329251994329576", "XEphem*INDIConfig*LongitudeValue.value: Mount.GEOGRAPHIC_COORD.LONG", "XEphem*INDIConfig*POSIXTMValue.value: Mount.Date.POSIX", "XEphem*INDIConfig*Port.value: 7624", @@ -242,11 +243,11 @@ String fallbacks[] = { "XEphem*INDIConfig*PressureValue.value: Weather.WX.Pres", "XEphem*INDIConfig*Recenter.set: False", "XEphem*INDIConfig*SkyDecOffset.value: 0", - "XEphem*INDIConfig*SkyDecSlope.value: .0174532925", + "XEphem*INDIConfig*SkyDecSlope.value: .01745329251994329576", "XEphem*INDIConfig*SkyDecValue.value: Telescope.Pointing.Dec2K", "XEphem*INDIConfig*SkyMarker.set: False", "XEphem*INDIConfig*SkyRAOffset.value: 0", - "XEphem*INDIConfig*SkyRASlope.value: .2617993875", + "XEphem*INDIConfig*SkyRASlope.value: .26179938779914943653", "XEphem*INDIConfig*SkyRAValue.value: Telescope.Pointing.RA2K", "XEphem*INDIConfig*TemperatureOffset.value: 0", "XEphem*INDIConfig*TemperatureSlope.value: 1", @@ -963,4 +964,4 @@ String fallbacks[] = { NULL }; -/* $Id: fallbacks.c,v 1.313 2013/01/14 04:02:19 ecdowney Exp $ */ +/* $Id: fallbacks.c,v 1.314 2021/12/14 19:10:39 ecdowney Exp $ */ diff --git a/GUI/xephem/scope.c b/GUI/xephem/scope.c index 03e86ba..e2b25d9 100644 --- a/GUI/xephem/scope.c +++ b/GUI/xephem/scope.c @@ -85,6 +85,7 @@ static Widget gotodecb_w; /* INDI goto dec offset */ static Widget edbon_w; /* TB whether edb GOTO is on */ static Widget rdon_w; /* TB whether ra/dec GOTO is on */ +static Widget teleod_w; /* TB whether ra/dec sent as EOD else J2000 */ static Widget markeron_w; /* TB whether skyview marker is on */ static XtIntervalId marker_tid; /* timer to display sky marker */ @@ -162,27 +163,34 @@ Obj *op; } } - /* send as astrometric J2000 ra/dec if on */ + /* send as INDI if on */ if (XmToggleButtonGetState (rdon_w)) { + Now *np = mm_get_now(); char *dev, *prop, *ele[2]; double v[2]; - Now now, *np; - Obj obj; + double ra, dec; - /* update ephemeris for op */ - np = mm_get_now(); - if (epoch != J2000) { - now = *np; - np = &now; - epoch = J2000; - obj = *op; - op = &obj; - } - obj_cir (np, op); + /* convert op to desired telescope's coords */ + ra = op->f_RA; + dec = op->f_dec; + + if (XmToggleButtonGetState(teleod_w)) { + /* telescope wants apparent @ EOD */ + if (epoch != EOD) { + as_ap (np, op->f_epoch, &ra, &dec); + } /* else op is already apparent */ + } else { + /* telescope wants astrometric @ 2000 */ + if (epoch == EOD) { + ap_as (np, J2000, &ra, &dec); + } else { + precess (op->f_epoch, J2000, &ra, &dec); + } + } /* scale to INDI coords */ - v[0] = toINDIValue (op->s_ra, gotoram_w, gotorab_w); - v[1] = toINDIValue (op->s_dec, gotodecm_w, gotodecb_w); + v[0] = toINDIValue (ra, gotoram_w, gotorab_w); + v[1] = toINDIValue (dec, gotodecm_w, gotodecb_w); /* send INDI ra/dec elements */ if (getINDIele (gotorav_w, gotodecv_w, &dev, &prop, ele) < 0) { @@ -339,9 +347,10 @@ sc_create_w() "EDB", &edbv_w, NULL, NULL); oneConfigRow (rc_w, &rdon_w, NULL, "EnableRADec", "Enable sending RA/Dec goto to", - "GotoRA", &gotorav_w, &gotoram_w, &gotorab_w); - oneConfigRow (rc_w, NULL, NULL, NULL, NULL, - "GotoDec", &gotodecv_w, &gotodecm_w, &gotodecb_w); + "GotoRA", &gotorav_w, &gotoram_w, &gotorab_w); + oneConfigRow (rc_w, &teleod_w, NULL, "TelEOD", + "Tel uses EOD, else J2000", + "GotoDec", &gotodecv_w, &gotodecm_w, &gotodecb_w); oneConfigRow (rc_w, &markeron_w, marker_cb, "SkyMarker", "Enable Sky marker from", "SkyRA", &rav_w, &ram_w, &rab_w); @@ -717,19 +726,28 @@ marker_tcb (XtPointer client, XtIntervalId *id) if (rnp) { INumber *dnp = findNumber (rap, ele[1]); if (dnp) { + Now *np = mm_get_now(); Obj o; - Now *np; - /* build object */ + /* get telescope's coords */ + double ra = fromINDIValue (rnp->value, ram_w, rab_w); + double dec = fromINDIValue (dnp->value, decm_w,decb_w); + + /* convert from telescope's coords to astrometric J2000 */ + if (XmToggleButtonGetState(teleod_w)) { + /* telescope is sending us apparent at EOD */ + ap_as (np, J2000, &ra, &dec); + } /* else no change, telescope already sending us astrometric @ J2000 */ + + /* find sky fields */ memset (&o, 0, sizeof(o)); - o.f_RA = fromINDIValue (rnp->value, ram_w, rab_w); - o.f_dec = fromINDIValue (dnp->value, decm_w,decb_w); + o.f_RA = ra; + o.f_dec = dec; o.o_type = FIXED; o.f_epoch = J2000; + obj_cir (np, &o); /* mark, on screen */ - np = mm_get_now(); - obj_cir (np, &o); sv_scopeMark (&o); } else { xe_msg(1,"INDI:%s.%s.%s not found",dev,prop,ele[1]); @@ -864,3 +882,5 @@ fromINDIValue (double indiv, Widget m_w, Widget b_w) return (localv); } +/* For RCS Only -- Do Not Edit */ +static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: scope.c,v $ $Date: 2021/12/14 19:10:55 $ $Revision: 1.29 $ $Name: $"};