32 void sla_de2h_(
double& hourangle,
double& declination,
double& observer_latitude,
33 double& azimuth,
double& elevation);
34 void sla_dh2e_(
double& azimuth,
double& elevation,
double& observer_latitude,
35 double& hourangle,
double& declination);
38 void sla_eqecl_(
double& rightascension,
double& declination,
double& time,
39 double& ecliptic_longitude,
double& ecliptic_latitude);
40 void sla_ecleq_(
double& ecliptic_longitude,
double& ecliptic_latitude,
double& time,
41 double& rightascension,
double& declination);
44 void sla_eqgal_(
double& rightascension,
double& declination,
45 double& galactic_longitude,
double& galactic_latitude);
46 void sla_galeq_(
double& galactic_longitude,
double& galactic_latitude,
47 double& rightascension,
double& declination);
50 void sla_galsup_(
double& galactic_longitude,
double& galactic_latitude,
51 double& sgalactic_longitude,
double& sgalactic_latitude);
52 void sla_supgal_(
double& sgalactic_longitude,
double& sgalactic_latitude,
53 double& galactic_longitude,
double& galactic_latitude);
60 double& mjd,
int& status);
63 void sla_clyd_(
int& year,
int& month,
int& day,
int& nyears,
int& ndays,
int&status);
67 int result[4],
int& status);
71 char sign[1],
int result[4]);
78 void sla_rdplan_(
double& dtt,
int&
object,
const double& longitude,
const double& latitude,
79 double& rightascension,
double& declination,
double& diam);
82 void sla_preces_(
char *system,
double& ep0,
double& ep1,
double& ra,
double& dec,
int length);
87 void sla_prenut_(
double& epoch,
double& mjd,
double rmatpn[3][3] );
104 inline double wrap(
double angle )
106 int n = int(angle / (2 *
JMATH::PI)) - (angle < 0);
127 const double zone_width = 6 *
JMATH::PI / 180;
128 return -
JMATH::PI + (utmzone -1)*zone_width + zone_width/2;
143 double latitude_deg = latitude * 180/
JMATH::PI;
145 if ( latitude_deg > 84. || latitude_deg < -80.)
147 std::cout <<
"UTM coordinate system not defined for given Latitude: %f (max 84 deg N or min -80 deg S), setting meridian convergence angle to 0 deg.";
152 double lambda = longitude;
153 double phi = latitude;
158 double omega = lambda-lambda0;
162 double e2 = 0.0066943800;
164 double rho = a*(1.-e2)/pow(1.-e2*pow(sin(phi),2),3./2.);
165 double nu = a/sqrt(1-e2*pow(sin(phi),2.));
170 double gamma = sin(phi) * omega
171 - sin(phi) * pow(omega,3.)/3. * pow(cos(phi),2.) * (2.*pow(psi,2.)-psi)
172 - sin(phi) * pow(omega,5.)/15. * pow(cos(phi),4.) * (pow(psi,4.)*(11.-24.*pow(t,2.))-
173 pow(psi,3.)*(11.-36.*pow(t,2.))+
174 2.*pow(psi,2.)*(1.-7.*pow(t,2.))+
177 - sin(phi) * pow(omega,7.)/315. * pow(cos(phi),6.) * (17.-26.*pow(t,2.)+2.*pow(t,4.));
193 inline void correct_to_j2000(
double& in_dec,
double& in_ra,
double& mjd,
double& out_dec,
double& out_ra,
bool reverse=
false)
201 double rmatpn[3][3] {};
204 JMATH::JMatrix3D M =
JMATH::JMatrix3D(rmatpn[0][0], rmatpn[0][1], rmatpn[0][2], rmatpn[1][0], rmatpn[1][1], rmatpn[1][2], rmatpn[2][0], rmatpn[2][1], rmatpn[2][2]);
211 v[0] = sin (theta) * cos(phi);
212 v[1] = sin (theta) * sin(phi);
225 double phi_2 = atan2( v[1], v[0] );
double theta_2 = acos(v[2]);
227 out_ra =
wrap(phi_2);
257 (double) amin / 60.0 +
258 (double) asec / 3600.0) / 180.0;
274 double ha = (
JMATH::PI * (double) hour / 12.0 +
308 const double right_ascension) :
324 double dec_j2000;
double ra_j2000;
328 const double const_dec_j2000 = dec_j2000;
329 return const_dec_j2000;
340 double dec_j2000;
double ra_j2000;
344 const double const_ra_j2000 = ra_j2000;
345 return const_ra_j2000;
374 const double gal_longitude) :
409 const double& azimuth) :
445 const double longitude) :
460 const int minutesNorth,
461 const int degreesEast,
462 const int minutesEast)
521 double lst = gmst + longitude + eqeqx;
527 double ha = lst - ra;
535 sla_de2h_(ha, dec, latitude, azimuth, elevation);
537 double theta = -elevation +
JMATH::PI/2.0;
569 double azimuth_geo = azimuth_utm - meridian_convergence_angle;
571 double elevation = -zenith +
JMATH::PI/2.0;
577 sla_dh2e_(azimuth_sla, elevation, latitude, ha, dec);
582 double lst = gmst + longitude + eqeqx;
583 double ra = lst - ha;
604 double &dec_j2000_n =
const_cast<double&
> (dec_j2000);
605 double &ra_j2000_n =
const_cast<double&
> (ra_j2000);
606 double galactic_longitude;
double galactic_latitude;
607 sla_eqgal_(ra_j2000_n, dec_j2000_n, galactic_longitude, galactic_latitude);
633 double elevation = -theta +
JMATH::PI/2.0;
642 sla_dh2e_(azimuth, elevation, latitude, ha, dec);
654 double lst = gmst + longitude + eqeqx;
658 double ra = lst - ha;
Auxiliary class to make coordinate transformations for a specific geographical location of the detect...
JNeutrinoDirection getDirectionOfNeutrino(const double &t1, const JSourceLocation &pos) const
Get direction pointing to source.
JAstronomy(const JGeographicalLocation &location)
Constructor.
JSourceLocation getLocationOfSource(const double t1, const JNeutrinoDirection &dir) const
Get location of source.
JSourceLocation getLocationOfSourceFromZenithAzimuth(const double t1, const JGEOMETRY3D::JAngle3D &dir) const
Get location of source given a neutrino direction (zenith,azimuth) and time.
JGalacticCoordinates getGalacticCoordinatesOfSource(const double t1, const JGEOMETRY3D::JAngle3D &dir) const
Get location of source in galactic coordinates given a neutrino direction and time.
Location of astrophysical source in Galactic coordinates.
JGalacticCoordinates()
Default constructor.
const double & getGalacticLatitude() const
JGalacticCoordinates(const double gal_latitude, const double gal_longitude)
Constructor.
const double & getGalacticLongitude() const
JGeographicalLocation()
Default constructor.
JGeographicalLocation(const int degreesNorth, const int minutesNorth, const int degreesEast, const int minutesEast)
Constructor.
JGeographicalLocation(const double latitude, const double longitude)
Constructor.
const double & getLongitude() const
const double & getLatitude() const
Direction of incident neutrino.
JNeutrinoDirection()
Default constructor.
JNeutrinoDirection(const double &zenith, const double &azimuth)
Constructor.
const double & getZenith() const
const double & getAzimuth() const
Location of astrophysical source.
double getDeclinationJ2000(const double t1) const
Get declination in J2000.
JSourceLocation()
Default constructor.
const double & getDeclination() const
JSourceLocation(const double declination, const double right_ascension)
Constructor.
const double & getRightAscension() const
double getRightAscensionJ2000(const double t1) const
Get Right Ascension in J2000.
Data structure for angles in three dimensions.
double getTheta() const
Get theta angle.
double getPhi() const
Get phi angle.
JMatrix3D & transpose()
Transpose.
void transform(double &__x, double &__y, double &__z) const
Transform.
Singular value decomposition.
const JMatrix3D & invert(const double precision=1.0e-12) const
Get inverted matrix.
static const JGeographicalLocation Sicily(36, 16, 16, 06)
static const JSourceLocation VELAX(getRadians(-45, -10, -35.2), getHourAngle(8, 35, 20.66))
double getHourAngle(const int hour, const int min, const double sec)
Convert hour angle to radians.
void sla_clyd_(int &year, int &month, int &day, int &nyears, int &ndays, int &status)
double wrap(double angle)
double longitude_of_central_meridian(int utmzone)
static const double NUMBER_OF_SECONDS_PER_YEAR
void sla_dh2e_(double &azimuth, double &elevation, double &observer_latitude, double &hourangle, double &declination)
void sla_ecleq_(double &ecliptic_longitude, double &ecliptic_latitude, double &time, double &rightascension, double &declination)
void sla_djcal_(int &precision, double &mjd, int result[4], int &status)
static const JSourceLocation RXJ1713(getRadians(-39, -46, 0.0), getHourAngle(17, 13, 7))
double sla_gmst_(double &ut1)
void sla_galeq_(double &galactic_longitude, double &galactic_latitude, double &rightascension, double &declination)
void sla_prenut_(double &epoch, double &mjd, double rmatpn[3][3])
void sla_dd2tf_(int &ndec, double &day, char sign[1], int result[4])
double compute_meridian_convergence_angle(double longitude, double latitude)
void sla_eqgal_(double &rightascension, double &declination, double &galactic_longitude, double &galactic_latitude)
void sla_galsup_(double &galactic_longitude, double &galactic_latitude, double &sgalactic_longitude, double &sgalactic_latitude)
static const double NUMBER_OF_SECONDS_PER_DAY
double sla_gmsta_(double &ut1, double &part_day)
void sla_eqecl_(double &rightascension, double &declination, double &time, double &ecliptic_longitude, double &ecliptic_latitude)
double getDot(const JNeutrinoDirection &first, const JNeutrinoDirection &second)
Dot product.
static const JGeographicalLocation ORCA(42, 48, 06, 02)
static const double NUMBER_OF_SECONDS_PER_SEDERIAL_DAY
void correct_to_j2000(double &in_dec, double &in_ra, double &mjd, double &out_dec, double &out_ra, bool reverse=false)
Convert (Dec, RA) to J2000.
double sla_eqeqx_(double &ut1)
void sla_preces_(char *system, double &ep0, double &ep1, double &ra, double &dec, int length)
static const JGeographicalLocation ARCA(36, 17, 15, 58)
static const double NUMBER_OF_SECONDS_PER_HOUR
void sla_supgal_(double &sgalactic_longitude, double &sgalactic_latitude, double &galactic_longitude, double &galactic_latitude)
int get_utm_zone(double lat)
static const double MJD_EPOCH
double getRadians(const double angle)
Convert angle to radians.
static const JGeographicalLocation Pylos(36, 33, 16, 06)
void sla_rdplan_(double &dtt, int &object, const double &longitude, const double &latitude, double &rightascension, double &declination, double &diam)
void sla_de2h_(double &hourangle, double &declination, double &observer_latitude, double &azimuth, double &elevation)
double sla_dtt_(double &ut1)
static const JGeographicalLocation Antares(42, 48, 06, 10)
static const JSourceLocation galacticCenter(-0.5062816, -1.633335)
void sla_caldj_(int &year, int &month, int &day, double &mjd, int &status)
static const double PI
Mathematical constants.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).