Coordinate Transformations TM, A. Tamburro Based on Slalib docs/sun67.htx/sun67.html Tested against MACRO algorithms and other coordinate trasformations in ANTARES that were based on sla_oap (reduntant since it includes corrections for optical telescopes).
From AMANDA to SLALIB AMANDA (x,y,z) = (E, N, up) SLALIB (x’,y’,z’) = (E,N,up) ’ = /2 – if ( ’ <0) ’ = ’ + 2 x = E y = N ’’ x’ = E y’ = N Also cos directors can be used: the unit vector pointing in the direction of travel tan = vy/vx and cos = vz. In AMANDA convention: vx = -cos sin vy = -sin sin SLALIB (vx,vy,vz) (-vy,-vx,-vz) vz = -cos for upgoing <0 for downgoing vz
From local to astrophysical Elevation = h = /2- altazimutal ref system to ‘local’ equatorial (LH systems) Slalib::sla_dh2e(ang_azimuth,elevation,detector_latitude,H,declination); Hour angle: Ψ detector latitude = - /2 The definition of RA allows to Get rid of the dependency on Earth rotation
Equatorial coordinates (RH) point: RA origin, intercept of equatorial plane + ecliptic (Sun curve on sphere) Need hour angle of point = Local Sidereal Time H = LST – RA [in 0-24 hrs] UTC related to motion of Sun as observed from Greenwich GMST = Greenwich Mean Sidereal Time related to star motion (any stars returns at the same place after 24 hrs) LST = GMST + detector_longitude in hrs (AMANDA = 0 thanks Mike!)
Precession and nutation position varies due to equinox precession (rotation of Earth axis in yrs due to Sun-Moon influence) Nutation: small periodic terms caused by varying distances and relative directions of Moon and Sun RA and Dec should be referred to a particular year e.g. J2000 sla_prenut: rigorous matrix method =calculates the combined precession matrix × nutation one The precession matrix M connects 'real' coordinates (at the time of detection) to mean ones (for an epoch, eg 2000) So to get v Mean M needs to be inverted and multiplied by v real Validated against Duffet-Smith
Comparison Mike’s transformations Low precision method Difference from Duffet-Smith between 1) low precision and 2) rigorous methods: = º = at in = º = º at = º = at in = º = º at = 6.7e-4º = 5e-5º But can vary depending on the epochs. Test: GMST = hrs (apparent) = º = º RA º Dec º Mike RA J2000 = º º Dec J2000= º º RA = 0.058º = 0.028º
Date: the class for times Uses sla_caldj to calculate from UT time (Gregorian Calendar Date that the user should refer to Greenwich) the modified julian date at 0hr (JD ) Methods: Getters: double get_modified_julian(): modified julian date at UT double get_GMST(): Greenwich Mean Sidereal Time (The local sidereal time of the Greenwich Meridian) double get_TAI_correction(): provides International Atomic Time correction The user can use this methods to provide the times needed by Local_to_Equa to calculate astronomical coordinates starting from Calendar Date e.g.: double time = Date(2012,9,14,21,46,17).get_GMST(); double time_jd = Date(2012,9,14,21,46,17).get_modified_julian(); (is needed to calculate precession and nutation effects)
Local_to_Equa: equatorial and galactic coordinates Based on sla_dh2e. Returns starting from cosine vectors (vx,vy,vz) or (zenith,azimut) in the detector local reference frame (x,y,z) = (E, N, up) + times (GMST+MJD) Notice that vz >0 for upgoing events and zenith should be defined in the standard way (zenith = 0 and nadir = 180°) Internally there is a conversion to fit the Slalib system that is (x,y,z) = (N,E,up) Setters: void set_detection_time(double detection_time); void set_detection_time_jd(double detection_time_jd); void set_with_detector_coordinates( double ang_zenith, doubl$ void set_cosvectors_angles(double vx, double vy, double vz,double time, double time1) void set_with_equatorial_coordinates( double right_ascension, double declination) void set_with_galactical_coordinates( double gal_longitude, double gal_lattitude) Getters: double get_detection_time(): returns Greenwich Mean Sidereal Time void get_detector_defaults(double detector_longitude, double detector_latitude) void get_detector_coordinates_sla( double zenith, double azimuth) in Slalib system void get_equatorial_coordinates( double right_ascension, double declination) void get_galactical_coordinates( double gal_longitude, double gal_latitude)
Example double time = Date(2012,9,14,21,46,17).get_GMST(); double time_jd = Date(2012,9,14,21,46,17).get_modified_julian(); ( needed to calculate precession and nutation effects) Local_to_Equa localfunction; localfunction.set_detection_time(time); localfunction.set_detection_time_jd(time_jd); localfunction.set_cosvectors_angles(vx,vy,vz,time,time_jd); OR localfunction.set_with_detector_coordinates(ang_zenith (in rad), ang_azimuth (in rad), time, time_jd); localfunction.get_equatorial_coordinates(ra (in rad),dec (in rad)); localfunction.get_galactic_coordinates(lat (in rad),lon (in rad));